Google hizmetleri Gradle eklentisi ve JSON yapılandırma dosyası

Firebase'i Android projenize eklerken projenize google-services Gradle eklentisini ve bir google-services.json yapılandırma dosyasını eklemeniz gerekir.

Firebase konsolu, Management REST API veya Firebase CLI'yı kullanarak Android projenize Firebase'i eklerseniz Gradle eklentisini ve JSON yapılandırma dosyasını projenize manuel olarak eklemeniz gerekir. Ancak Firebase Assistant for Android Studio kullanırsanız bu görevler kurulum sırasında sizin için otomatik olarak yapılır.

Gradle eklentisini ekleme

Google hizmetleri Gradle eklentisini (google-services) build.gradle dosyanıza eklersiniz:

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

Google hizmetleri Gradle eklentisinin iki ana işlevi vardır:

  • google-services.json yapılandırma dosyasını işler ve uygulamanızın kodunda kullanılabilecek Android kaynakları oluşturur.

  • Etkinleştirdiğiniz hizmetler için gereken temel kitaplıkların bağımlılıklarını ekler. Bu adımda, Google hizmetleri Gradle eklentisini app/build.gradle dosyanıza şu şekilde uygulamanız gerekir:
    apply plugin: 'com.google.gms.google-services'

    ./gradlew :app:dependencies komutunu çalıştırarak bu adımın sonucunu görebilirsiniz.

JSON yapılandırma dosyasını ekleme

google-services.json yapılandırma dosyası genellikle app/ dizinine (Android Studio uygulama modülünün köküne) yerleştirilir. 2.2.0 sürümünden itibaren eklenti, derleme türüne ve ürün türüne özel JSON dosyalarını destekler. Aşağıdaki dizin yapılarının tümü geçerlidir:

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

Ürün türleri kullanıldığında bu daha karmaşık dizin yapıları da geçerlidir.

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

JSON yapılandırma dosyasının işlenme şekli

google-services.json yapılandırma dosyası aşağıdaki temel yapıya sahiptir:

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

project_info nesnesi projenizle ilgili genel bilgileri içerirken client dizisinin her bir üyesi, projeye eklediğiniz istemcilerle (Android uygulamaları) ilgili bilgileri içerir.

Eklenti, Android uygulamanızın JSON dosyasını işlerken yalnızca aşağıdaki mantığa göre paket adınızla (mevcut derleme türü için) eşleşen client nesnesini kullanır:

  • Eklenti, client dizisinin her üyesi için client_info/android_client_info/package_name değerini kontrol eder. Paket adı bu değerle eşleşirse üye nesnesini döndürür.

  • client üyelerinden hiçbiri paket adıyla eşleşmiyorsa eklenti bir istisna oluşturur.

Bu belgenin geri kalanında, yukarıda açıklanan mantıkla belirlenen client dizisinin üyesine atıfta bulunmak için YOUR_CLIENT kullanılmaktadır.

XML dosyalarının oluşturulması

JSON işlemenin ana sonucu, kodunuzda Android kaynakları olarak referans verebileceğiniz iki XML dosyası oluşturmaktır. Aşağıda her bir dosyanın örnekleri verilmiştir:

  • 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>
    

XML dosyalarındaki değerler

XML dosyalarındaki her değer, aşağıdaki konumlarda bulunan google-services.json yapılandırma dosyasında yer alır. Android projenizde google-services Gradle eklentisini kullanmanızı engelleyen bir yapılandırma varsa bu değerleri kullanarak XML dosyalarını manuel olarak güvenli bir şekilde yeniden oluşturabilirsiniz.

  • 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
    

Sorun giderme

Derleme sırasında şu hata mesajını alıyorum: File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it.

Firebase konsolu, google-services.json yapılandırma dosyasını indirmenize yardımcı olur.

google-services.json yapılandırma dosyasını indirdikten sonra Android Studio projenizin app/ klasörüne veya birden fazla derleme türü kullanıyorsanız app/src/{build_type} klasörüne kopyalayın.

R.string.gcm_defaultSenderId veya R.xml.global_tracker gibi simgeleri bulamıyorum.

build.gradle dosyanızdaki paket adının, google-services.json dosyasını oluştururken girdiğiniz paket adıyla eşleştiğinden emin olun. Emin değilseniz başlangıç akışını tekrar çalıştırın ve yeni bir JSON dosyası alın.