Wtyczka Gradle usług Google

Wstęp

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

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

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 sekcji Dodawanie pliku JSON.
  2. Dodaj zależności podstawowych bibliotek wymaganych przez włączone usługi. Ten krok wymaga zastosowania wtyczki do obsługi Gradle usług Google w pliku app/build.gradle w następujący sposób:
    apply plugin: 'com.google.gms.google-services'

    Aby zobaczyć wynik tego kroku, uruchom polecenie ./gradlew :app:dependencies.

Dodawanie pliku JSON

Plik google-services.json znajduje się zwykle w katalogu app/ (w katalogu głównym modułu aplikacji Android Studio). Od wersji 2.2.0 wtyczka obsługuje pliki JSON typu kompilacji i typów produktów. Wszystkie te struktury katalogów są prawidłowe:

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

Uwaga: udostępnienie pliku google-services.json w katalogu wersji umożliwia utrzymanie osobnego projektu Firebase na potrzeby produkcyjnych pakietów APK.

Jeśli używasz odmian produktów, możesz też stosować bardziej skomplikowane struktury katalogów.

// 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 projekcie, a każdy element tablicy client zawiera informacje o klientach (aplikacjach na Androida) dodanych przez Ciebie do projektu.

Podczas przetwarzania pliku JSON Twojej aplikacji na Androida wtyczka używa tylko obiektu client pasującego do nazwy Twojego pakietu (na potrzeby bieżącego typu kompilacji) zgodnie z tą logiką:

  • Dla każdego elementu tablicy client:
    • Sprawdź wartość kolumny client_info/android_client_info/package_name
    • Jeśli nazwa pakietu pasuje do tej wartości, zwraca obiekt elementu.
  • Jeśli żaden z elementów grupy client nie pasuje do nazwy pakietu, zgłaszany jest wyjątek.

W pozostałej części tego dokumentu używamy {YOUR_CLIENT}, aby odwoływać się do elementu tablicy client określonego w powyższej procedurze.

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

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>

Wszystkie wartości z plików XML znajdują się w pliku google-services.json w poniższych lokalizacjach. Jeśli Twój projekt na Androida ma konfigurację, która uniemożliwia użycie 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ę komunikat o błędzie: „W folderze głównym modułu brakuje pliku google-services.json. Bez niego wtyczka usług Google nie może działać”.

O: Konsola Firebase pomoże Ci pobrać google-services.json. Dodatkowo instrukcje generowania tego pliku znajdziesz w przewodnikach szybkiego startu dotyczących większości interfejsów API. 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.

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

O: Sprawdź, czy nazwa pakietu w pliku build.gradle jest taka sama jak nazwa pakietu podana podczas tworzenia pliku google-services.json. Jeśli nie masz pewności, jeszcze raz wykonaj procedurę rozpoczynania pracy i pobierz nowy plik json.