El complemento de Gradle de los servicios de Google

Introducción

Como parte de la habilitación de las APIs de Google o los servicios de Firebase en tu dispositivo Android app, es posible que debas agregar el complemento google-services a tu Archivo build.gradle:

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

El complemento google-services tiene dos funciones principales:

  1. Procesa el archivo google-services.json y produce Android recursos que se pueden usar en la configuración código. Consulta Cómo agregar el archivo JSON para obtener más información.
  2. Agrega dependencias a las bibliotecas básicas necesarias para los servicios que tienes habilitado. 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

Agrega 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). Como de la versión 2.2.0, el complemento admite el tipo de compilación y la variante de producto. archivos JSON específicos. Todas las estructuras de directorios siguientes 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 permite que te permita mantener un proyecto de Firebase independiente para tus APK de producción.

Cuando se usan las variantes de producto, estas estructuras de directorios más complejas son también son válidos.

// 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 de Android) que agregaste al proyecto.

Cuando procesas el archivo JSON de tu app para Android, el complemento solo usa el client que coincida con el nombre de tu paquete (para la compilación actual) tipo) según la siguiente lógica:

  • Para cada miembro del array client:
    • 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 arroja una excepción.

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

El resultado principal del procesamiento de JSON es producir dos archivos XML que puedes hacer referencia como recursos de Android en tu código Java. Aquí tienes 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 en formato XML está presente en el google-services.json. en las siguientes ubicaciones. Si tu proyecto de Android tiene algún archivo de configuración que te impide usar el complemento google-services, puedes recrea de forma segura los archivos en formato XML manualmente 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

P: Durante la compilación, recibo el siguiente mensaje de error: "File Falta google-services.json en la carpeta raíz del módulo. Los servicios de Google El complemento no puede funcionar sin él".

R: Firebase console te ayudará descarga el google-services.json. Además, las guías de inicio rápido para la mayoría de las APIs tienen instrucciones para generando el archivo. Una vez que hayas descargado el archivo google-services.json, cópialo en la carpeta app/ de tu proyecto de Android Studio 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 del archivo build.gradle coincida con el el nombre del paquete que ingresaste cuando creaste el google-services.json . Si no lo sabes con certeza, vuelve a realizar el proceso de introducción y obtén un nuevo archivo json.