Google Hizmetleri Gradle Eklentisi

Giriş

Android uygulamanızda Google API'lerini veya Firebase hizmetlerini etkinleştirme kapsamında google-services eklentisini build.gradle dosyanıza eklemeniz gerekebilir:

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

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ı oluşturun. Daha fazla bilgi için JSON Dosyası Ekleme başlıklı makaleyi inceleyin.
  2. Etkinleştirdiğiniz hizmetler için gereken temel kitaplıkların bağımlılıklarını ekleyin. Bu adımda, app/build.gradle dosyanızda Google Hizmetleri Gradle eklentisini şu şekilde 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 dosyasını ekleme

google-services.json 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ı 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: Yayın dizininde bir google-services.json dosyası sağlamak, üretim APK'larınız için ayrı bir Firebase projesi sürdürmenize olanak tanır.

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

google-services.json dosyasının temel yapısı aşağıdaki gibidir:

{
  "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.

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

  • client dizisindeki her üye 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ür.
  • client üyelerinden hiçbiri paket adıyla eşleşmezse istisna oluşturulur.

Bu belgenin geri kalanında, yukarıdaki prosedürle belirlenen client dizisinin üyesini ifade etmek için {YOUR_CLIENT} kullanılacaktır.

JSON işlemenin temel sonucu, Java kodunuzda Android kaynakları olarak referans verebileceğiniz iki XML dosyası oluşturmaktır. Aşağıda her dosya türüne dair 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, aşağıdaki konumlarda bulunan google-services.json dosyasında yer alır. Android projenizde google-services 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

S: Derleme sırasında şu hata mesajını alıyorum: "File google-services.json is missing from module root folder. Google Hizmetleri Eklentisi olmadan çalışamaz."

Y: Firebase konsolu, google-services.json dosyasını indirmenize yardımcı olur. Ayrıca, çoğu API'nin hızlı başlangıç kılavuzlarında bu dosyanın nasıl oluşturulacağıyla ilgili talimatlar yer alır. 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.

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