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
build.gradle archivo:
dependencies {
classpath 'com.google.gms:google-services:4.4.4'
// ...
}
El complemento google-services tiene dos funciones principales:
- Procesar el archivo
google-services.jsony producir 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) Agregar dependencias para las bibliotecas básicas necesarias para los servicios que habilitaste (este paso requiere que apliques el complemento de Gradle de 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
app/ directorio (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 directorio son válidas:
// dogfood and release are build types. app/ google-services.json src/dogfood/google-services.json src/release/google-services.json ...
Nota: Si proporcionas un archivo google-services.json en el directorio de lanzamiento, puedes mantener un proyecto de Firebase independiente para tus APKs de producción.
Cuando se usan variantes del producto, estas estructuras de directorio 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 ...
Cómo procesar 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
client objeto que coincide con el nombre del paquete (para el tipo de compilación actual) según la siguiente lógica:
- Para cada miembro del
clientarray:- Verifica el valor de
client_info/android_client_info/package_name. - Si el nombre del paquete coincide con este valor, muestra el objeto miembro.
- Verifica el valor de
- Si ninguno de los miembros de
clientcoincide con el nombre del paquete, se arroja una excepción.
Para el resto de este documento, usaremos {YOUR_CLIENT} para hacer referencia a
l miembro del array client determinado por el procedimiento anterior.
El resultado principal del procesamiento de JSON es producir dos archivos XML a los que tú 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>Cada valor de los archivos XML está presente en el google-services.json
archivo en las siguientes ubicaciones. Si tu proyecto de Android tiene alguna configuración
que te impide usar el google-services complemento, puedes
volver a crear los archivos XML de forma manual con estos valores:
google_app_id:
{YOUR_CLIENT}/client_info/mobilesdk_app_idgcm_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_idfirebase_database_url:
project_info/firebase_url
google_api_key:
{YOUR_CLIENT}/api_key/current_keygoogle_crash_reporting_api_key:
{YOUR_CLIENT}/api_key/current_keyproject_id:
project_info/project_id
Solución de problemas
P: Cuando compilo, recibo el siguiente mensaje de error: "File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it".
R: La consola de Firebase te ayudará a
descargar el google-services.json.
Además, las guías de inicio rápido para la mayoría de las APIs tienen instrucciones para
generar este archivo.
Una vez que hayas descargado el google-services.json archivo, cópialo
en la carpeta app/ de tu proyecto de Android Studio o en la
app/src/{build_type} carpeta si usas varios tipos de compilación.
P: No puedo encontrar 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 google-services.json
archivo. Si no estás seguro, vuelve a ejecutar el flujo de inicio y obtén
un archivo JSON nuevo.