Google Hizmetleri Gradle Eklentisi

Giriş

Android uygulamanızda Google API'lerini veya Firebase hizmetlerini etkinleştirmek için google-services eklentisini build.gradle dosyanıza eklemeniz gerekebilir:

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

google-services eklentisinin iki ana işlevi vardır:

  1. google-services.json dosyasını işleyin ve uygulamanızın kodunda kullanılabilecek Android kaynaklarını oluşturun. Daha fazla bilgi için JSON Dosyası Ekleme bölümüne bakın.
  2. Etkinleştirdiğiniz hizmetler için gereken temel kitaplıkların bağımlılıkları ekleyin. Bu adımda, app/build.gradle dosyanıza Google Hizmetleri Gradle eklentisini ş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 dosyasını ekleme

google-services.json dosyası genellikle app/ dizinine (Android Studio uygulama modülünün kökünde) yerleştirilir. 2.2.0 sürümü itibarıyla bu eklenti, derleme türüne ve ürün çeşidine ö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
    ...

Not: Sürüm dizininde bir google-services.json dosyası sağlamanız, üretim APK'larınız için ayrı bir Firebase projesi kullanmanıza olanak tanır.

Ürün varyantları 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 dosyasını işleme

google-services.json 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 müşteriler (Android uygulamaları) hakkında bilgi içerir.

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

  • client dizisinin her üyesi için:
    • client_info/android_client_info/package_name değerini kontrol edin
    • Paket adı bu değerle eşleşirse üye nesnesini döndürün.
  • client üyelerinden hiçbiri paket adıyla eşleşmezse bir istisna atılır.

Bu belgenin geri kalanında, yukarıdaki prosedürle belirlenen client dizisinin üyesini belirtmek için {YOUR_CLIENT} kullanacağız.

JSON işlemenin asıl sonucu, Java kodunuzda Android kaynağı olarak referans verebileceğiniz iki XML dosyası oluşturmaktır. Aşağıda her dosyanın bir örneği 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 her değer, google-services.json dosyasında aşağıdaki konumlarda bulunur. Android projenizde google-services eklentisini kullanmanızı engelleyen bir yapılandırma varsa XML dosyalarını aşağıdaki değerleri kullanarak manuel olarak 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

S: Derleme yaparken şu hata mesajını alıyorum: "google-services.json dosyası, modül kök klasöründe yok. Google Hizmetleri eklentisi bu olmadan çalışamaz".

C: google-services.json dosyasını indirmek için Firebase konsolunu kullanabilirsiniz. Ayrıca, çoğu API'nin Hızlı Başlangıç kılavuzlarında bu dosyayı oluşturmayla ilgili talimatlar bulunur. google-services.json 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.

S: "R.string.gcm_defaultSenderId", "R.xml.global_tracker" vb. sembolleri bulamıyorum.

C: 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ı oluşturun.