Introducción
Como parte de la habilitación de las APIs de Google o los servicios de Firebase en tu aplicación para Android, es posible que debas agregar el complemento google-services
a tu archivo build.gradle
:
dependencies {
classpath 'com.google.gms:google-services:4.4.3'
// ...
}
El complemento google-services
tiene dos funciones principales:
- Procesa el archivo
google-services.json
y genera recursos de Android que se pueden usar en el código de tu aplicación. Consulta Cómo agregar el archivo JSON para obtener más información. Agrega dependencias para las bibliotecas básicas que se requieren para los servicios que habilitaste. En este paso, debes aplicar el complemento de Gradle para los servicios de Google en tu archivo
app/build.gradle
, de la siguiente manera:
apply plugin: 'com.google.gms.google-services'
Para ver el resultado de este paso, ejecuta
./gradlew :app:dependencies
.
Cómo agregar el archivo JSON
Por lo general, el archivo google-services.json
se coloca en el directorio app/
(en la raíz del módulo de la app de Android Studio). A partir de la versión 2.2.0
, el complemento admite archivos JSON específicos del tipo de compilación y la variante del producto. Todas las siguientes estructuras de directorios son válidas:
// dogfood and release are build types. app/ google-services.json src/dogfood/google-services.json src/release/google-services.json ...
Nota: Proporcionar un archivo google-services.json en el directorio de lanzamiento te permite mantener un proyecto de Firebase independiente para tus APKs de producción.
Cuando se usan variantes de productos, estas estructuras de directorios más complicadas también son válidas.
// free and paid are product flavors. app/ google-services.json src/dogfood/paid/google-services.json src/release/free/google-services.json ...
Procesa el archivo JSON
El archivo google-services.json
tiene la siguiente estructura básica:
{ "project_info": {...}, "client": [...], }
El objeto project_info
contiene información general sobre tu proyecto, mientras que cada miembro del array client
contiene información sobre los clientes (apps para Android) que agregaste al proyecto.
Cuando procesa el archivo JSON de tu app para Android, el complemento solo usa el objeto client
que coincide con el nombre de tu paquete (para el tipo de compilación actual) según la siguiente lógica:
- Para cada miembro del array
client
, haz lo siguiente:- Comprueba el valor de
client_info/android_client_info/package_name
. - Si el nombre del paquete coincide con este valor, devuelve el objeto miembro.
- Comprueba el valor de
- Si ninguno de los miembros de
client
coincide con el nombre del paquete, se arroja una excepción.
En el resto de este documento, usaremos {YOUR_CLIENT}
para hacer referencia al miembro del array client
determinado por el procedimiento anterior.
El resultado principal del procesamiento de JSON es la producción de dos archivos XML a los que puedes hacer referencia como recursos de Android en tu código Java. A continuación, se muestra un ejemplo de cada archivo:
app/build/generated/res/google-services/{build_type}/values/values.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <! -- Present in all applications --> <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string> <! -- Present in applications with the appropriate services configured --> <string name="gcm_defaultSenderId" translatable="false">1035469437089</string> <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string> <string name="ga_trackingId" translatable="false">UA-65557217-3</string> <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string> <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string> <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string> <string name="project_id" translatable="false">mydemoapp</string> </resources>
app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="ga_trackingId" translatable="false">UA-65557218-3</string> </resources>
Todos los valores de los archivos XML están presentes en el archivo google-services.json
en las siguientes ubicaciones. Si tu proyecto para Android tiene alguna configuración que te impide usar el complemento google-services
, puedes volver a crear los archivos XML de forma manual con estos valores:
google_app_id:
{YOUR_CLIENT}/client_info/mobilesdk_app_id
gcm_defaultSenderId:
project_info/project_number
default_web_client_id:
{YOUR_CLIENT}/oauth_client/client_id (client_type == 3)
ga_trackingId:
{YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id
firebase_database_url:
project_info/firebase_url
google_api_key:
{YOUR_CLIENT}/api_key/current_key
google_crash_reporting_api_key:
{YOUR_CLIENT}/api_key/current_key
project_id:
project_info/project_id
Solución de problemas
P.: Cuando compilo, recibo el siguiente mensaje de error: "Falta el archivo google-services.json en la carpeta raíz del módulo. El complemento de Google Services no puede funcionar sin él".
R.: Firebase console te ayudará a descargar el archivo google-services.json
.
Además, las guías de inicio rápido de la mayoría de las APIs incluyen instrucciones para generar este archivo.
Una vez que hayas descargado el archivo google-services.json
, cópialo en la carpeta app/
de tu proyecto de Android Studio o en la carpeta app/src/{build_type}
si usas varios tipos de compilación.
P.: No encuentro el símbolo "R.string.gcm_defaultSenderId", "R.xml.global_tracker", etc.
R.: Asegúrate de que el nombre del paquete en tu archivo build.gradle
coincida con el nombre del paquete que ingresaste cuando creaste el archivo google-services.json
. Si no lo sabes, vuelve a ejecutar el flujo de inicio y obtén un nuevo archivo JSON.