Il plug-in Gradle di Google Services

Introduzione

Nell'ambito dell'abilitazione delle API di Google o dei servizi Firebase nel tuo account Android potresti dover aggiungere il plug-in google-services alla tua build.gradle file:

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

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

  1. Elabora il file google-services.json e crea un Android e risorse che possono essere utilizzate le API nel tuo codice. Per ulteriori informazioni, vedi Aggiungere il file JSON.
  2. Aggiungi le dipendenze per le librerie di base necessarie per i servizi che hai in un bucket in cui è abilitato il controllo delle versioni. Questo passaggio richiede l'applicazione di Google Services Gradle plug-in nel file app/build.gradle, in questo modo:
    apply plugin: 'com.google.gms.google-services'

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

Aggiunta del file JSON

Generalmente il file google-services.json viene inserito nella Directory app/ (nella directory principale del modulo dell'app Android Studio). Come della versione 2.2.0 il plug-in supporta il tipo di build e la versione del prodotto file JSON specifici. 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 release consente per mantenere un progetto Firebase separato per gli APK di produzione.

Quando sono in uso versioni di prodotto, queste strutture di directory più complicate sono validi.

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

Durante l'elaborazione del file JSON per l'app Android, il plug-in utilizza solo Oggetto client che corrisponde al nome del pacchetto (per la build attuale tipo) 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, restituisce l'oggetto membro.
  • Se nessuno dei membri di client corrisponde al nome del pacchetto, viene generata un'eccezione.

Nella parte restante del documento utilizzeremo {YOUR_CLIENT} per fare riferimento il membro dell'array client determinato dalla procedura descritta sopra.

Il risultato principale dell'elaborazione JSON è produrre due file XML che possono essere utilizzate come risorse Android nel tuo codice Java. Di seguito è riportato un esempio 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>

Ogni valore dei file XML è presente nell'elemento google-services.json nelle posizioni di seguito. Se il tuo progetto Android ha una configurazione che impedisce di usare 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 creazione viene visualizzato il seguente messaggio di errore: "File google-services.json non è presente nella cartella principale del modulo. I servizi Google Il plug-in non può funzionare senza il plug-in".

R: La console Firebase ti aiuterà scarica google-services.json. Inoltre, le guide rapide per la maggior parte delle API contengono istruzioni per generando questo file. Dopo aver scaricato il file google-services.json, copialo nella cartella app/ del tuo progetto Android Studio oppure nella 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 alla nome del pacchetto inserito durante la creazione di google-services.json . In caso di dubbi, ripeti il flusso per iniziare e ottieni un nuovo file JSON.