Plug-in Gradle dei servizi Google e file di configurazione JSON

Quando aggiungi Firebase al tuo progetto Android, devi aggiungere il plug-in Gradle google-services e un file di configurazione google-services.json al tuo progetto.

Se aggiungi Firebase al tuo progetto Android utilizzando la console Firebase, l'API REST Management, o la CLI Firebase, devi aggiungere manualmente il plug-in Gradle e il file di configurazione JSON al tuo progetto. Tuttavia, se utilizzi Firebase Assistant for Android Studio, queste attività vengono eseguite automaticamente durante la configurazione.

Aggiungere il plug-in Gradle

Aggiungi il plug-in Gradle dei servizi Google (google-services) al file build.gradle:

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

Il plug-in Gradle dei servizi Google ha due funzioni principali:

  • Elabora il file di configurazione google-services.json e produce risorse Android che possono essere utilizzate nel codice dell'app.

  • Aggiunge 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 di configurazione JSON

Il file di configurazione google-services.json viene generalmente inserito nella directory app/ (nella directory principale del modulo dell'app Android Studio). A partire dalla versione 2.2.0, il plug-in supporta file JSON specifici per il tipo di compilazione e la versione 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
    ...

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

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

Come viene elaborato il file di configurazione JSON

Il file di configurazione 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 client (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 compilazione corrente) in base alla seguente logica:

  • Per ogni membro dell'array client, il plug-in controlla il valore di client_info/android_client_info/package_name. Se il nome del pacchetto corrisponde a questo valore, restituisce l'oggetto membro.

  • Se nessuno dei membri di client corrisponde al nome del pacchetto, il plug-in genera un'eccezione.

Il resto di questo documento utilizza YOUR_CLIENT per fare riferimento al membro dell'array client determinato dalla logica descritta sopra.

Produzione di file XML

Il risultato principale dell'elaborazione JSON è la produzione di due file XML a cui puoi fare riferimento come risorse Android nel tuo codice. Di seguito sono riportati esempi di ciascun 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>
    

Valori nei file XML

Ogni valore nei file XML è presente nel file di configurazione google-services.json nelle posizioni elencate di seguito. Se il tuo progetto Android ha una configurazione che ti impedisce di utilizzare il plug-in Gradle 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

Durante la creazione, ricevo il seguente messaggio di errore: File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it.

La console Firebase ti aiuterà a scaricare il file di configurazione google-services.json.

Dopo aver scaricato il file di configurazione google-services.json, copialo nella cartella app/ del progetto Android Studio o nella cartella app/src/{build_type} se utilizzi più tipi di build.

Non riesco a trovare simboli come R.string.gcm_defaultSenderId o R.xml.global_tracker.

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