Wtyczka Gradle usług Google i plik konfiguracyjny JSON

Aby dodać Firebase do projektu aplikacji na Androida, musisz dodać do niego wtyczkę google-services Gradle i plik konfiguracji google-services.json.

Jeśli dodasz Firebase do projektu aplikacji na Androida za pomocą konsoli Firebase, interfejsu Management REST API lub interfejsu wiersza poleceń Firebase, musisz ręcznie dodać do projektu wtyczkę Gradle i plik konfiguracji JSON. Jeśli jednak używasz Firebase Assistant for Android Studio, te zadania są wykonywane automatycznie podczas konfiguracji.

Dodawanie wtyczki Gradle

Dodaj wtyczkę Gradle usług Google (google-services) do pliku build.gradle:

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

Wtyczka Gradle usług Google ma 2 główne funkcje:

  • Przetwarza plik konfiguracji google-services.json i generuje zasoby Androida, których można używać w kodzie aplikacji.

  • Dodaje zależności dla podstawowych bibliotek wymaganych przez włączone usługi. W tym kroku musisz zastosować wtyczkę 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 konfiguracji JSON

Plik konfiguracji google-services.json jest zwykle umieszczany w katalogu app/ (w katalogu głównym modułu aplikacji Android Studio). Od wersji 2.2.0 wtyczka obsługuje pliki JSON dotyczące typu kompilacji i wariantu usługi. 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
    ...

Jeśli używane są warianty usługi, te bardziej skomplikowane struktury katalogów również są prawidłowe.

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

Jak przetwarzany jest plik konfiguracji JSON

Plik konfiguracji 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 do projektu.

Podczas przetwarzania pliku JSON 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 wtyczka sprawdza wartość 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 client nie pasuje do nazwy pakietu, wtyczka zgłasza wyjątek.

W dalszej części tego dokumentu używamy YOUR_CLIENT, aby odnieść się do elementu tablicy client określonego przez opisaną powyżej logikę.

tworzenie plików XML,

Głównym wynikiem przetwarzania pliku JSON jest utworzenie 2 plików XML, do których możesz odwoływać się w kodzie jako do zasobów Androida. Poniżej znajdziesz przykłady każdego z tych 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>
    

Wartości w plikach XML

Każda wartość w plikach XML jest obecna w pliku konfiguracji google-services.json w lokalizacjach wymienionych poniżej. Jeśli Twój projekt aplikacji na Androida ma konfigurację, która uniemożliwia korzystanie z wtyczki Gradle 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

Podczas kompilowania 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.

Konsola Firebase pomoże Ci pobrać plik konfiguracyjny google-services.json.

Po pobraniu pliku konfiguracji google-services.json skopiuj go do folderu app/ projektu Android Studio lub do folderu app/src/{build_type}, jeśli używasz wielu typów kompilacji.

Nie mogę znaleźć symboli takich jak R.string.gcm_defaultSenderId lub R.xml.global_tracker.

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