Complemento de Gradle de los servicios de Google y archivo de configuración JSON

Como parte de agregar Firebase a tu proyecto de Android, debes agregar el complemento de Gradle google-services y un archivo de configuración google-services.json a tu proyecto.

Si agregas Firebase a tu proyecto de Android con Firebase console, la API de REST de Management o Firebase CLI, debes agregar manualmente el complemento de Gradle y el archivo de configuración JSON a tu proyecto. Sin embargo, si usas Firebase Assistant for Android Studio, estas tareas se realizan automáticamente durante la configuración.

Agrega el complemento de Gradle

Agrega el complemento de Gradle de los servicios de Google (google-services) a tu archivo build.gradle:

dependencies {
    classpath 'com.google.gms:google-services:4.5.0'
    // ...
}

El complemento de Gradle de los servicios de Google tiene dos funciones principales:

  • Procesa el archivo de configuración google-services.json y genera recursos de Android que se pueden usar en el código de tu app.

  • Agrega dependencias para las bibliotecas básicas que se requieren para los servicios que habilitaste. En este paso, debes aplicar 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.

Agrega el archivo de configuración JSON

Por lo general, el archivo de configuración 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 de 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
    ...

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
    ...

Cómo se procesa el archivo de configuración JSON

El archivo de configuración de 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, el complemento verifica el valor de client_info/android_client_info/package_name. Si el nombre del paquete coincide con este valor, devuelve el objeto miembro.

  • Si ninguno de los miembros de client coincide con el nombre del paquete, el complemento arroja una excepción.

En el resto de este documento, se usa YOUR_CLIENT para hacer referencia al miembro del array client determinado por la lógica descrita anteriormente.

Producción de archivos XML

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. A continuación, se muestran ejemplos 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>
    

Valores en los archivos XML

Cada valor de los archivos XML está presente en el archivo de configuración google-services.json en las ubicaciones que se indican a continuación. Si tu proyecto de Android tiene alguna configuración que te impide usar el complemento de Gradle de 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
    

Soluciona problemas

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.

La consola de Firebase te ayudará a descargar el archivo de configuración de google-services.json.

Después de descargar el archivo de configuración 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.

No encuentro los símbolos como R.string.gcm_defaultSenderId o R.xml.global_tracker.

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 introducción y obtén un nuevo archivo JSON.