Google Services Gradle Eklentisi

Giriş

Android uygulamanızda Google API'lerini veya Firebase hizmetlerini etkinleştirmenin bir parçası olarak google-services eklentisini build.gradle dosyanıza eklemeniz gerekebilir:

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

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ı oluşturun. Daha fazla bilgi için JSON dosyasını ekleme bölümüne bakın.
  2. Etkinleştirdiğiniz hizmetler için gereken temel kitaplıklara bağımlılık ekleyin. Bu adımda, app/build.gradle dosyanıza Google Services Gradle eklentisini uygulamanız gerekir. Örneğin:
    apply plugin: 'com.google.gms.google-services'

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

JSON Dosyası Ekleme

google-services.json dosyası genellikle app/ dizinine (Android Studio uygulama modülünün kök dizini) yerleştirilir. Eklenti, 2.2.0 sürümünden itibaren derleme türüne ve ürün aromasına ö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ğlamak, üretim APK'larınız için ayrı bir Firebase projesi tutmanıza olanak tanır.

Ürün çeşitleri kullanılırken 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ı İşleme

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

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

project_info nesnesi, projenizle ilgili genel bilgiler içerirken client dizisinin her üyesi, projeye eklediğiniz istemciler (Android uygulamaları) hakkında bilgi 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 (geçerli derleme türü için) client nesnesini kullanır:

  • 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 nesneyi döndürür.
  • client üyelerinden hiçbiri paket adıyla eşleşmiyorsa bir istisna yapılır.

Bu dokümanın geri kalanında, yukarıdaki prosedüre göre belirlenen client dizisinin üyesini belirtmek için {YOUR_CLIENT} ifadesini kullanacağız.

JSON işlemenin ana sonucu, Java kodunuzda Android kaynakları olarak başvurabileceğiniz iki XML dosyası oluşturmaktır. Aşağıda her dosyaya bir örnek verilmiştir:

app/build/generate/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/generate/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 konumlardaki google-services.json dosyasında mevcuttur. Android projenizde google-services eklentisini kullanmanızı engelleyen bazı yapılandırmalar varsa XML dosyalarını aşağıdaki değerleri kullanarak manuel olarak güvenli bir şekilde yeniden oluşturabilirsiniz:

google_uygulama_kimliği:

{YOUR_CLIENT}/client_info/mobilesdk_app_id

gcm_defaultGönderen Kimliği:

project_info/project_number

varsayılan_web_istemci_kimliği:

{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

proje_kimliği:

project_info/project_id

Sorun giderme

S: Derleme sırasında şu hata mesajını alıyorum: "Modülün kök klasöründe google-services.json dosyası eksik. Google Services Plugin olmadan onlar çalışmaz.

C: Firebase konsolu google-services.json sürümünü indirmenize yardımcı olur. Ayrıca, çoğu API için Hızlı Başlangıç kılavuzları bu dosyayı oluşturma talimatlarına sahiptir. 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_defaultGönderen Kimliği", "R.xml.global_tracker" ifadesini 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 gözden geçirin ve yeni bir json dosyası edinin.