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.

Android projenize Firebase'i Firebase konsolunu, Management REST API'yi veya Firebase CLI'yı kullanarak eklerseniz Gradle eklentisini ve JSON yapılandırma dosyasını projenize manuel olarak eklemeniz gerekir. Ancak Firebase Assistant for Android Studio kullanıyorsanı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 temel 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, app/build.gradle dosyanızda Google hizmetleri Gradle eklentisini aşağıdaki gibi uygulamanız gerekir:
    apply plugin: 'com.google.gms.google-services'

    Bu adımın sonucunu ./gradlew :app:dependencies komutunu çalıştırarak 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ünde) yerleştirilir. Eklenti, 2.2.0 sürümünden itibaren derleme türüne ve ürün çeşidine özel JSON dosyalarını desteklemektedir. 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 çeşitleri 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ı nasıl işlenir?

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 üyesi, projeye eklediğiniz istemciler (Android uygulamaları) hakkında bilgiler 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şmezse eklenti bir istisna oluşturur.

Bu belgenin geri kalanında, yukarıda açıklanan mantıkla belirlenen client dizisinin üyesini ifade etmek için YOUR_CLIENT kullanılır.

XML dosyalarının üretimi

JSON işlemenin temel sonucu, kodunuzda Android kaynakları olarak referans verebileceğiniz iki XML dosyası oluşturmaktır. Aşağıda her dosya türüne ilişkin örnekler 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 google-services.json yapılandırma dosyasında bulunur. Android projenizde google-services Gradle eklentisini kullanmanızı engelleyen bir yapılandırma varsa XML dosyalarını bu değerleri kullanarak 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

Oluşturma 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 sembolleri 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 uygulayın ve yeni bir JSON dosyası alın.