Plugin Gradle layanan Google dan file konfigurasi JSON

Sebagai bagian dari penambahan Firebase ke project Android, Anda perlu menambahkan plugin Gradle google-services dan file konfigurasi google-services.json ke project Anda.

Jika menambahkan Firebase ke project Android menggunakan Firebase console, Management REST API, atau Firebase CLI, Anda harus menambahkan plugin Gradle dan file konfigurasi JSON secara manual ke project Anda. Namun, jika Anda menggunakan Firebase Assistant for Android Studio, tugas ini akan otomatis dilakukan selama penyiapan.

Tambahkan plugin Gradle

Anda menambahkan plugin Gradle layanan Google (google-services) ke file build.gradle:

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

Plugin Gradle layanan Google memiliki dua fungsi utama:

  • Memproses file konfigurasi google-services.json dan menghasilkan resource Android yang dapat digunakan dalam kode aplikasi Anda.

  • Menambahkan dependensi untuk library dasar yang diperlukan untuk layanan yang telah Anda aktifkan. Langkah ini mengharuskan Anda menerapkan plugin Gradle layanan Google dalam file app/build.gradle, seperti berikut:
    apply plugin: 'com.google.gms.google-services'

    Anda dapat melihat hasil langkah ini dengan menjalankan ./gradlew :app:dependencies.

Tambahkan file konfigurasi JSON

File konfigurasi google-services.json umumnya ditempatkan di direktori app/ (di root modul aplikasi Android Studio). Mulai dari versi 2.2.0 plugin ini mendukung file JSON khusus jenis build dan ragam produk. Semua struktur direktori berikut valid:

// dogfood and release are build types.
app/
    google-services.json
    src/dogfood/google-services.json
    src/release/google-services.json
    ...

Saat varian produk digunakan, struktur direktori yang lebih rumit ini juga valid.

// free and paid are product flavors.
app/
    google-services.json
    src/dogfood/paid/google-services.json
    src/release/free/google-services.json
    ...

Cara file konfigurasi JSON diproses

File konfigurasi google-services.json memiliki struktur dasar berikut:

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

Objek project_info berisi informasi umum tentang project Anda, sedangkan setiap anggota array client berisi informasi tentang klien (aplikasi Android) yang telah Anda tambahkan ke project.

Saat memproses file JSON untuk aplikasi Android Anda, plugin hanya menggunakan objek client yang cocok dengan nama paket Anda (untuk jenis build saat ini) berdasarkan logika berikut:

  • Untuk setiap anggota array client, plugin akan memeriksa nilai client_info/android_client_info/package_name. Jika nama paket cocok dengan nilai ini, fungsi akan menampilkan objek anggota.

  • Jika tidak ada anggota client yang cocok dengan nama paket, plugin akan mengecualikan.

Bagian selanjutnya dari dokumen ini menggunakan YOUR_CLIENT untuk merujuk ke anggota array client yang ditentukan oleh logika yang dijelaskan di atas.

Pembuatan file XML

Hasil utama pemrosesan JSON adalah menghasilkan dua file XML yang dapat Anda rujuk sebagai resource Android dalam kode Anda. Berikut adalah contoh setiap file:

  • 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>
    

Nilai dalam file XML

Setiap nilai dalam file XML ada di file konfigurasi google-services.json di lokasi yang tercantum di bawah. Jika project Android Anda memiliki beberapa konfigurasi yang mencegah Anda menggunakan plugin Gradle google-services, Anda dapat membuat ulang file XML secara manual dengan aman menggunakan nilai ini.

  • 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
    

Pemecahan masalah

Saat membangun, saya mendapatkan pesan error berikut: File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it.

Konsol Firebase akan membantu Anda mendownload file konfigurasi google-services.json.

Setelah mendownload file konfigurasi google-services.json, salin ke folder app/ project Android Studio Anda, atau ke folder app/src/{build_type} jika Anda menggunakan beberapa jenis build.

Saya tidak dapat menemukan simbol seperti R.string.gcm_defaultSenderId atau R.xml.global_tracker.

Pastikan nama paket di file build.gradle Anda cocok dengan nama paket yang Anda masukkan saat membuat file google-services.json. Jika Anda tidak yakin, jalankan alur memulai lagi dan dapatkan file JSON baru.