Apa yang sebenarnya dilakukan google-services.json?

120

Saya bekerja untuk menambahkan layanan Google Analytics dan GCM ke aplikasi saya saat ini. Pada panduan untuk penerapan kedua layanan, google meminta pengembang untuk membuat file json: google-services.json dan meletakkannya di bawah direktori root aplikasi.

Saya menemukan bahwa meskipun saya menghapus file json ini dari aplikasi saya, layanan tetap berfungsi.

Hanya ingin tahu pasti, sebenarnya untuk apa file ini? Apa kegunaannya dan bagaimana cara kerjanya?

Arthur Wang
sumber

Jawaban:

197

Saya menyelidiki sedikit tentang plugin layanan google dan json dan menemukan sumber dari plugin ini.

Hal pertama yang pertama

Layanan google plugin gradle yang direferensikan oleh classpath dan dengan apply adalah plugin waktu-build saja! Jadi, ini hanya memengaruhi proses build aplikasi Anda, tetapi bukan proses runtime!

Plugin ini hanya dimaksudkan sebagai bantuan memulai cepat untuk mengintegrasikan layanan Google dengan cepat di aplikasi Anda. Jelas, prosesnya agak berbelit-belit dan tidak didokumentasikan, jadi Google seharusnya menjelaskan apa yang dilakukan proses ini.

Nyatanya, saya menemukan kode sumber untuk versi plugin com.google.gms: google-services: 1.4.0-beta3 dan tidak menemukan referensi khusus di dalamnya terkait appinvites dan saya juga tidak menemukan Google API untuk Undangan Aplikasi! (Tapi mungkin itu hanya menggunakan proyek API umum dengan id proyeknya, saya tidak mencoba ini)

Apa yang dilakukannya

Plugin gradle layanan-google mencari file google-services.json yang disebutkan dalam modul aplikasi Anda. Kemudian ia mencari setelan yang dikonfigurasi seperti project-id dan tracking-id dan semacamnya, yang dihasilkan oleh konsol pengembang Google API ke dalam file google-services.json. Dari setelan yang ditemukan, nilai sumber daya Android dihasilkan ke jalur berikut:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

Misalnya untuk debug-build aplikasi Anda:

app/build/generated/res/google-services/debug/values/values.xml

Misalnya, jika Anda mengikuti tutorial GCM, file JSON akan menyertakan id proyek API sebagai android-resource berikut:

<string name="gcm_defaultSenderId">project-id</string>

Jadi plugin dan file JSON ini tidak penting untuk menjalankan atau memublikasikan aplikasi Anda, ini hanyalah bantuan quickstart untuk menghasilkan beberapa file sumber daya android dasar untuk integrasi yang lebih mudah dari fitur Google API tertentu.

Perhatikan dalam kode sumber yang direferensikan di bawah ini bahwa plugin layanan google selalu menghasilkan sumber daya android tersebut untuk setiap varian aplikasi yang ditentukan dalam aplikasi / build.gradle Anda.

Jika Anda tidak menginginkannya, Anda harus menggunakan sumber daya yang dihasilkan dalam varian aplikasi yang Anda inginkan, dan menghapus yang lainnya. Jangan lupa untuk menghapus penerapan plugin layanan-google dari app / build.gradle, atau plugin tersebut akan dibuat ulang untuk semua varian aplikasi.

Apa yang tidak

Plugin dan file JSON ini TIDAK secara langsung memengaruhi cara kerja fitur-fitur Google tersebut untuk aplikasi Anda! Jika Anda telah mengikuti tutorial lama di developer.android.com tentang cara mengintegrasikan mis. GCM atau Google Analytics, Anda bahkan tidak perlu mengintegrasikan layanan google-plugin gradle atau file google-services.json!

Perhatikan di mana saya menemukan sumbernya

Setelah Anda mengintegrasikan plugin gradle layanan-google dan ketika menyinkronkan proyek Anda, Gradle secara otomatis mengunduh ketergantungan layanan-google ke jalur yang mirip dengan ini (di Windows, Anda mungkin perlu melihat ke home / .gradle untuk Linux):

C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services\1.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar

Jika Anda mengekstrak file jar ini, Anda akan menemukan dua file:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

yang berisi kode sumber sederhana dari plugin gradle.

GoogleServicesPlugin.groovy

berisi penanganan varian aplikasi dan definisi dasar jalur, dll.

GoogleServicesTask.java

berisi definisi tugas yang sebenarnya, cari metode berikut untuk melihat apa yang sebenarnya dilakukannya:

@TaskAction
public void action() throws IOException { 
arne.jans
sumber
2
jawaban yang jauh lebih baik. namun tampaknya ada masalah saat mencoba mengikuti pendekatan yang disarankan ( developers.google.com/analytics/devguides/collection/android/v4 ) "jawaban yang diterima" adalah konsep SO yang konyol yang sangat bergantung pada kesabaran orang yang dapat putuskan ...
2016
7
Catatan tindak lanjut tentang ini, karena mungkin telah berubah sejak Anda memposting ini. The Layanan Google Gradle Plugin panduan menyatakan ke-2 fungsi plugin. Ia juga mengklaim menambahkan beberapa dependensi untuk "library dasar yang diperlukan untuk layanan yang telah Anda aktifkan", serta memeriksa benturan dependensi (dari pencampuran versi). Saya menggali sumbernya, dan tampaknya itu juga memasukkan "compile com.google.android.gms: play-services-measure". Hanya sebagai FYI jika ada yang melihat pop-up itu dan tidak yakin mengapa.
Android3000
3
Mengingat file berisi beberapa kunci, apakah aman untuk menambahkannya ke kontrol versi? Sejauh yang saya tahu itu hanya sidik jari, jadi menurut saya itu aman. Tapi saya tidak sepenuhnya yakin.
exhuma
1
@exhuma menurut pendapat pribadi saya, jika Anda mengerjakan proyek pribadi atau internal perusahaan, tidak masalah untuk memeriksanya ke kontrol versi. Di sisi lain, saya tidak akan pernah memeriksa file json ke kontrol versi untuk proyek open source, jelas.
arne.jans
1
@ arne.jans Apakah Anda dapat menyetel senderId secara dinamis, atau Anda hanya melakukan hardcode di values.xml? Saya perlu mengambil senderId secara dinamis dari server, dan daripada mendaftar ke FCM.
Bresiu
37

Untuk apa file ini sebenarnya:

google-services.json berisi kredensial pengembang dan setelan konfigurasi, yang diperlukan untuk memverifikasi saat menghubungkan dengan GoogleApiClient. Meskipun layanan Anda berfungsi dengan baik dengan perangkat uji Anda karena mendeteksi akun pengembang Anda, tetapi setelah merilis aplikasi Anda di depan umum, itu tidak akan berfungsi tanpa file json. Jadi jangan dihapus.

Dokumentasi Resmi mengatakan:

Aplikasi membangun GoogleApiClient, menentukan cakupan dan API mana yang akan diakses aplikasi. Saat GoogleApiClient terhubung, pengguna login.

Lihat bagian cara kerjanya .

Mohammad Arman
sumber
3
Terima kasih atas jawaban Anda. Hanya memiliki pertanyaan tetapi bertanya-tanya apakah Anda bersedia membantu. Saya melihat tautan Anda dikirim ke layanan Masuk. Tetapi jika saya hanya menggunakan Google Analytics dan layanan GCM di aplikasi saya, tidak perlu masuk, apakah saya masih perlu menyimpan file ini? Terima kasih!
Arthur Wang
3
Ya, untuk analitik atau GCM Anda juga memerlukan file konfigurasi ini. Pada langkah 2 dokumentasi, Anda harus pergi ke tautan DAPATKAN FILE KONFIGURASI . Di sana Anda harus memilih apakah Anda menggunakan file conf ini untuk GCM atau analitik. File ini hanya berisi Identitas pengembang Anda (seperti kunci api, hash SHA1 dari pc pengembangan Anda, dll.)
Mohammad Arman
2
@androidGuy Maaf atas tanggapan yang terlambat. Saya rasa Anda harus membuat file google-services.json konfigurasi baru dengan keyhash SHA1 rilis terbaru. Bijak lainnya beberapa fitur mungkin tidak berfungsi setelah dipublikasikan di play store. Maaf atas kebingungan sebelumnya, saya akan menghapus komentar saya sebelumnya karena akan membiarkan seseorang ke arah yang salah.
Mohammad Arman
1
Jika Anda menyalin kata-kata orang lain, Anda harus melakukan blockquote dengan benar dan memberikan atribusi lengkap. Saya telah mengembalikan suntingan Anda, karena saya menganggapnya sebagai plagiarisme dari jawaban di bawah ini.
Brad Larson
6
Bagaimana dengan keamanan? Bisakah google-services.json dibuat ulang dan dibaca dari apk? Saya melihat pengembang dan kunci API di dalamnya. Saya tidak suka diketahui oleh orang lain ...
Tino
4

Tambahkan google-services.json ke modul Anda dan lakukan PEMBERSIHAN dan MEMBANGUN KEMBALI. File xml akan dibuat di app / build / generated / res / google-services / debug / values ​​/ values.xml dengan properti proyek Anda dan Anda bisa dengan mudah mengaksesnya seperti string xml biasa. Contoh:

String serverClientId = getString(R.string.default_web_client_id);

ada daftar dengan semua string dan info lebih lanjut di doc google-service.json

Beto Caldas
sumber