Wtyczka Gradle usług Google

Wprowadzenie

W ramach włączania interfejsów API Google lub usług Firebase w aplikacji na Androida może być konieczne dodanie wtyczki google-services do pliku build.gradle:

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

Wtyczka google-services ma 2 główne funkcje:

  1. Przetwórz plik google-services.json i utwórz zasoby Androida, których można użyć w kodzie aplikacji. Więcej informacji znajdziesz w artykule Dodawanie pliku JSON.
  2. Dodaj zależności dla podstawowych bibliotek wymaganych w przypadku włączonych usług. Ten krok wymaga zastosowania wtyczki Gradle usług Google w pliku app/build.gradle w ten sposób:
    apply plugin: 'com.google.gms.google-services'

    Wynik tego kroku możesz zobaczyć, uruchamiając polecenie ./gradlew :app:dependencies.

Dodawanie pliku JSON

Plik google-services.json jest zwykle umieszczany w katalogu app/ (w katalogu głównym modułu aplikacji w Android Studio). Od wersji 2.2.0 wtyczka obsługuje pliki JSON specyficzne dla typu kompilacji i wersji produktu. Prawidłowe są wszystkie te struktury katalogów:

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

Uwaga: umieszczenie pliku google-services.json w katalogu wersji umożliwia utrzymywanie osobnego projektu Firebase dla plików APK wersji produkcyjnych.

Gdy używane są wersje produktu, te bardziej skomplikowane struktury katalogów są również prawidłowe.

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

Przetwarzanie pliku JSON

Plik google-services.json ma taką podstawową strukturę:

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

Obiekt project_info zawiera ogólne informacje o Twoim projekcie, a każdy element tablicy client zawiera informacje o klientach (aplikacjach na Androida) dodanych do projektu.

Podczas przetwarzania pliku JSON dla aplikacji na Androida wtyczka używa tylko obiektu client, który pasuje do nazwy pakietu (w przypadku bieżącego typu kompilacji) zgodnie z tą logiką:

  • Dla każdego elementu tablicy client:
    • Sprawdź wartość client_info/android_client_info/package_name
    • Jeśli nazwa pakietu jest zgodna z tą wartością, zwróć obiekt elementu.
  • Jeśli żaden z elementów zbioru client nie pasuje do nazwy pakietu, zostanie zgłoszony wyjątek.

W pozostałej części tego dokumentu będziemy używać symbolu {YOUR_CLIENT}, aby odwoływać się do elementu tablicy client określonego powyższą procedurą.

Głównym wynikiem przetwarzania pliku JSON jest utworzenie 2 plików XML, do których możesz się odwoływać jako do zasobów Androida w kodzie Java. Poniżej znajdziesz przykład każdego z plików:

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>

Każda wartość w plikach XML znajduje się w pliku google-services.json w lokalizacjach podanych poniżej. Jeśli Twój projekt na Androida ma konfigurację, która uniemożliwia korzystanie z wtyczki google-services, możesz bezpiecznie odtworzyć pliki XML ręcznie, używając tych wartości:

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

Rozwiązywanie problemów

P: Podczas kompilacji pojawia się ten komunikat o błędzie: „File google-services.json is missing from module root folder. Wtyczka Usług Google nie może działać bez tego komponentu”.

O: Konsola Firebase pomoże Ci pobrać google-services.json. Ponadto w przewodnikach Szybki start dotyczących większości interfejsów API znajdziesz instrukcje generowania tego pliku. Po pobraniu pliku google-services.json skopiuj go do folderu app/ w projekcie Android Studio lub do folderu app/src/{build_type}, jeśli używasz wielu typów kompilacji.

P: Nie mogę znaleźć symbolu „R.string.gcm_defaultSenderId”, „R.xml.global_tracker” itp.

O: Upewnij się, że nazwa pakietu w pliku build.gradle jest zgodna z nazwą pakietu wpisaną podczas tworzenia pliku google-services.json. Jeśli nie masz pewności, ponownie przejdź proces wprowadzający i pobierz nowy plik JSON.