Complemento de Gradle de los servicios de Google

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Introducción

Como parte de la habilitación de las API 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.3.15'
    // ...
}

El complemento google-services tiene dos funciones principales:

  1. Procesa el archivo google-services.json y produce recursos de Android que se podrán usar en el código de tu aplicación. Consulta Agrega el archivo JSON para obtener más información.
  2. Agrega las dependencias de las bibliotecas básicas necesarias para los servicios que habilitaste. Este paso requiere que apliques el complemento Gradle de los servicios de Google en tu archivo app/build.gradle, de la siguiente manera:
    apply plugin: 'com.google.gms.google-services'

    Puedes ver el resultado de este paso si ejecutas ./gradlew :app:dependencies.

Cómo agregar el archivo JSON

Por lo general, el archivo google-services.json se encuentra 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 de tipo de compilación y variante de producto específicos. 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: Proporcionar un archivo google-services.json en el directorio de la versión te permite mantener un proyecto de Firebase independiente para tus APK de producción.

Cuando se usan las 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 arreglo client contiene información sobre los clientes (apps para Android) que agregaste al proyecto.

Cuando procesas 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 arreglo client, haz lo siguiente:
    • Verifica el valor de client_info/android_client_info/package_name
    • Si el nombre del paquete coincide con este valor, muestra el objeto miembro.
  • Si ninguno de los miembros de client coincide con el nombre del paquete, se genera una excepción.

En el resto de este documento, usaremos {YOUR_CLIENT} para hacer referencia al miembro del arreglo client determinado por el procedimiento anterior.

El resultado principal del procesamiento de JSON es producir 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>

Cada valor en los archivos XML está presente en el archivo google-services.json, en las ubicaciones que se indican más abajo. Si tu proyecto de Android tiene alguna configuración que te impide usar el complemento google-services, puedes recrear manualmente los archivos en formato XML 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: Al compilar, recibo el siguiente mensaje de error: "Archivo google-services.json no está en la carpeta raíz del módulo. El complemento de Google Services no puede funcionar sin eso".

R: Firebase console te ayudará a descargar google-services.json. Además, las guías de inicio rápido para la mayoría de las API incluyen instrucciones a fin de 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étera.

R: Asegúrate de que el nombre del paquete en el archivo build.gradle coincida con el nombre del paquete que ingresaste cuando creaste el archivo google-services.json. Si no estás seguro, vuelve a ejecutar el flujo de introducción y obtén un archivo JSON nuevo.