Plug-in Gradi di Google Services

Introduzione

Nell'ambito dell'attivazione delle API o dei servizi Firebase di Google nella tua applicazione Android, potresti dover aggiungere il plug-in google-services al tuo file build.gradle:

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

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

  1. Elabora il file google-services.json e produci risorse Android che possono essere utilizzate nel codice della tua applicazione. Scopri di più sull'aggiunta del file JSON.
  2. Aggiungi dipendenze per le librerie di base richieste per i servizi che hai abilitato. Per questo passaggio devi applicare il plug-in Gradle di Google Services nel file app/build.gradle, nel seguente modo:
    apply plugin: 'com.google.gms.google-services'

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

Aggiunta del file JSON

In genere, il file google-services.json si trova nella directory app/, nella directory principale del modulo dell'app Android Studio. A partire dalla versione 2.2.0, il plug-in supporta i file JSON specifici per tipo di build e prodotto. Tutte le seguenti strutture di directory sono valide:

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

Nota: fornire un file google-services.json nella directory di rilascio ti consente di gestire un progetto Firebase separato per i tuoi APK di produzione.

Quando sono in uso i gusti, queste strutture di directory più complesse sono anche valide.

// 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 progetto, mentre ogni membro dell'array client contiene informazioni sui client (app Android) aggiunte al progetto.

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

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

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

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

app/build/generate/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/generate/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>

Tutti i valori dei file XML sono presenti nel file google-services.json nelle posizioni seguenti. Se il tuo progetto Android ha una configurazione che ti impedisce di utilizzare il plug-in google-services, puoi ricreare manualmente i file XML 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)

id_monitoraggio_ga:

{YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id

firebase_database_url:

project_info/firebase_url

chiave_google_api:

{YOUR_CLIENT}/api_key/current_key

chiave_google_crash_reporting_api_key:

{YOUR_CLIENT}/api_key/current_key

project_id:

project_info/project_id

Risoluzione dei problemi

D: Durante la creazione viene visualizzato il seguente messaggio di errore: "File google-services.json mancante nella cartella principale del modulo. Il plug-in dei servizi Google non può funzionare senza questo".

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 oppure 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" ecc.

R: 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 hai dubbi, esegui di nuovo la procedura introduttiva e ottieni un nuovo file JSON.