Google Hizmetleri Gradle Eklentisi

Giriş

Android uygulamanızda Google API'lerini veya Firebase hizmetlerini etkinleştirdiğinizde, build.gradle dosyanıza google-services eklentisini eklemeniz gerekebilir:

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

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

  1. google-services.json dosyasını işleyin ve uygulamanızın kodunda kullanılabilecek Android kaynakları üretin. Daha fazla bilgi için JSON Dosyasını Ekleme konusuna bakın.
  2. Etkinleştirdiğiniz hizmetler için gereken temel kitaplıklara bağımlılık ekleyin. Bu adım, app/build.gradle dosyanızda Google Services Gradle eklentisini uygulamanızı gerektirir. Şunun gibi:
    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 dizininde) yerleştirilir. 2.2.0 sürümünden itibaren eklenti, 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
    ...

Not: Sürüm dizininde bir google-services.json dosyası sağlamak, üretim APK'larınız için ayrı bir Firebase projesi yönetmenizi sağlar.

Ürün çeşitleri kullanıldığında, bu daha karmaşık dizin yapıları da geçerli olur.

// 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 bir üyesi, projeye eklediğiniz istemciler (Android uygulamaları) hakkında bilgiler içerir.

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

  • client dizisinin her bir ü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 istisna yapılır.

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

JSON işleminin ana sonucu, Java kodunuzda Android kaynakları olarak referans verebileceğiniz iki XML dosyası oluşturmaktır. Aşağıda her dosyaya ait bir örnek 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 aşağıdaki 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

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

Y: Firebase konsolu, google-services.json uygulamasını indirmenize yardımcı olur. Ek olarak, çoğu API'ye yönelik Hızlı Başlangıç kılavuzlarında bu dosyanın oluşturulmasına ilişkin talimatlar bulunur. google-services.json dosyasını indirdikten sonra dosyayı 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" simgesini bulamıyorum.

Y: 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.