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.4'
// ...
}
Wtyczka google-services ma 2 główne funkcje:
- Przetwarzanie pliku
google-services.jsoni tworzenie zasobów Androida , których można używać w kodzie aplikacji. Więcej informacji znajdziesz w sekcji Dodawanie pliku JSON. Dodawanie zależności dla podstawowych bibliotek wymaganych przez włączone usługi. Ten krok wymaga zastosowania wtyczki Google Services Gradle w pliku
app/build.gradlew 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 zwykle znajduje się 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 rodzaju kompilacji i wariantu produktu. Prawidłowe są 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 w Firebase dla produkcyjnych plików APK.
Gdy używane są warianty produktu, prawidłowe są też te bardziej złożone 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 tę 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 do projektu.
Podczas przetwarzania pliku JSON na potrzeby aplikacji na Androida wtyczka używa tylko obiektu client, który pasuje do nazwy pakietu (w przypadku bieżącego typu kompilacji) na podstawie tej logiki:
- W przypadku każdego elementu tablicy
client:- Sprawdź wartość
client_info/android_client_info/package_name. - Jeśli nazwa pakietu pasuje do tej wartości, zwróć obiekt elementu.
- Sprawdź wartość
- Jeśli żaden z elementów
clientnie pasuje do nazwy pakietu, zgłaszany jest wyjątek.
W dalszej części tego dokumentu będziemy używać {YOUR_CLIENT} do odwoływania się do elementu tablicy client określonego za pomocą powyższej procedury.
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 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>Każda wartość w plikach XML znajduje się w pliku google-services.json w tych lokalizacjach: Jeśli Twój projekt aplikacji 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_idgcm_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_idfirebase_database_url:
project_info/firebase_url
google_api_key:
{YOUR_CLIENT}/api_key/current_keygoogle_crash_reporting_api_key:
{YOUR_CLIENT}/api_key/current_keyproject_id:
project_info/project_id
Rozwiązywanie problemów
Pytanie: podczas kompilacji pojawia się ten komunikat o błędzie: „File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it”.
Odpowiedź: Konsola Firebase pomoże Ci
pobrać plik 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
app/src/{build_type} folderu, jeśli używasz wielu typów kompilacji.
Pytanie: nie mogę znaleźć symbolu „R.string.gcm_defaultSenderId”, „R.xml.global_tracker” itp.
Odpowiedź: sprawdź, czy 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 wykonaj czynności opisane w przewodniku Szybki start i pobierz nowy plik JSON.