Il plug-in Gradle di Google Services

Introduzione

Per attivare le API di Google o i servizi Firebase nella tua applicazione Android, potresti dover aggiungere il plug-in google-services al file build.gradle:

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

Il plug-in google-services ha due funzioni principali:

  1. Elabora il file google-services.json e genera risorse Android che possono essere utilizzate nel codice della tua applicazione. Per ulteriori informazioni, consulta la sezione Aggiunta del file JSON.
  2. Aggiungi le dipendenze per le librerie di base richieste per i servizi che hai attivato. Questo passaggio richiede l'applicazione del plug-in Gradle dei servizi Google nel file app/build.gradle, come segue:
    apply plugin: 'com.google.gms.google-services'

    Puoi visualizzare il risultato di questo passaggio eseguendo ./gradlew :app:dependencies.

Aggiungere il file JSON

Il file google-services.json viene generalmente inserito nella directory app/ (nella root del modulo dell'app Android Studio). A partire dalla versione 2.2.0, il plug-in supporta file JSON specifici per il tipo di build e la variante del prodotto. Sono valide tutte le seguenti strutture di directory:

// dogfood and release are build types.
app/
    google-services.json
    src/dogfood/google-services.json
    src/release/google-services.json
    ...

Nota:se fornisci un file google-services.json nella directory di rilascio, puoi mantenere un progetto Firebase separato per i tuoi APK di produzione.

Quando vengono utilizzate le varianti del prodotto, sono valide anche queste strutture di directory più complesse.

// free and paid are product flavors.
app/
    google-services.json
    src/dogfood/paid/google-services.json
    src/release/free/google-services.json
    ...

Elaborazione del file JSON

Il file google-services.json ha la seguente struttura di base:

{
  "project_info": {...},
  "client": [...],
}

L'oggetto project_info contiene informazioni generali sul tuo progetto, mentre ogni membro dell'array client contiene informazioni sui clienti (app per Android) che hai aggiunto al progetto.

Quando elabora il file JSON per la tua app per Android, il plug-in utilizza solo l'oggetto client che corrisponde al nome del pacchetto (per il tipo di build corrente) in base alla seguente logica:

  • Per ogni membro dell'array client:
    • Controlla il valore di client_info/android_client_info/package_name
    • Se il nome del pacchetto corrisponde a questo valore, restituisci l'oggetto membro.
  • Se nessuno dei membri di client corrisponde al nome del pacchetto, viene generata un'eccezione.

Per il resto di questo documento utilizzeremo {YOUR_CLIENT} per fare riferimento al membro dell'array client determinato dalla procedura precedente.

Il risultato principale dell'elaborazione JSON è la produzione di due file XML a cui puoi fare riferimento come risorse Android nel tuo codice Java. Di seguito è riportato un esempio di ogni file:

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>

Ogni valore nei file XML è presente nel file google-services.json nelle posizioni indicate di seguito. Se il tuo progetto Android ha una configurazione che ti impedisce di utilizzare il plug-in google-services, puoi ricreare in modo sicuro i file XML manualmente utilizzando questi valori:

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

Risoluzione dei problemi

D: Durante la compilazione viene visualizzato il seguente messaggio di errore: "Il file google-services.json non è presente nella cartella radice del modulo. Il plug-in Google Services non può funzionare senza".

R: La Console Firebase ti aiuterà a scaricare il google-services.json. Inoltre, le guide rapide per la maggior parte delle API contengono istruzioni per la generazione di questo file. Dopo aver scaricato il file google-services.json, copialo nella cartella app/ del progetto Android Studio o nella cartella app/src/{build_type} se utilizzi più tipi di build.

D: Non riesco a trovare il simbolo "R.string.gcm_defaultSenderId", "R.xml.global_tracker" e così via.

R: Assicurati che il nome del pacchetto nel file build.gradle corrisponda al nome del pacchetto inserito durante la creazione del file google-services.json. Se non sei sicuro, esegui di nuovo il flusso di avvio e ottieni un nuovo file JSON.