Saya menerapkan Google Cloud Messaging baru mengikuti panduan dari halaman Google Developers di sini
Saya sudah berhasil menjalankan dan mengujinya. Tapi masalah saya sekarang adalah saya memiliki rasa produk yang berbeda dengan applicationId / packageName dan ID Proyek Messaging Google yang berbeda. The google-services.json
harus diletakkan pada /app/google-services.json
tidak folder rasa.
Apakah ada cara untuk membuat google-services.json
konfigurasi berbeda untuk banyak rasa?
apply plugin: 'com.google.gms.google-services'
dalam file gradle tampaknya memasukkangcm
string keapp/build/generated/res/google-services/debug/values/values.xml
...Jawaban:
Google menyertakan dukungan untuk citarasa dalam versi 2.0 dari plugin layanan putar. Sejak versi ini
gradle plugin com.google.gms:google-services:2.0.0-alpha3
kamu bisa melakukan ini
Versi 3.0.0 dari plugin mencari file json di lokasi-lokasi ini (mengingat Anda memiliki
flavor
flavor1 dan tipe builddebug
):Ini bekerja untuk saya bahkan menggunakan flavorDimensions. Saya memiliki gratis & dibayar dalam satu dimensi dan Mock & Prod di dimensi lain. Saya juga memiliki 3 buildTypes: debug, rilis dan pementasan. Ini adalah tampilannya di proyek saya untuk rasa FreeProd:
Berapa banyak file google-services.json akan tergantung pada karakteristik proyek Anda, tetapi Anda memerlukan setidaknya satu file json untuk setiap proyek Google.
Jika Anda ingin detail lebih lanjut tentang apa yang dilakukan plugin ini dengan file json ini, ini dia: https://github.com/googlesamples/google-services/issues/54#issuecomment-165824720
Tautan ke dokumen resmi: https://developers.google.com/android/guides/google-services-plugin
Posting blog dengan info terbaru: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html
Dan buka di sini untuk memeriksa versi terbaru dari plugin ini: https://bintray.com/android/android-tools/com.google.gms.google-services/view
sumber
File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it.
jadi saya akan menyalin file rasa ke folder root setiap kali melalui skrip build.UPDATE: Penjelasan berikut adalah untuk satu proyek Android Studio, dengan satu Proyek Firebase dan berbagai aplikasi Firebase di dalam proyek itu. Jika tujuannya adalah untuk memiliki file JSON yang berbeda untuk Aplikasi Firebase yang berbeda di Proyek Firebase yang berbeda di dalam proyek Android Studio yang sama, (atau jika Anda tidak tahu apa bedanya) lihat di sini. .
Anda memerlukan satu Aplikasi Firebase per ID Aplikasi Android (biasanya nama paket). Adalah umum untuk memiliki satu ID Aplikasi per varian build Gradle (Ini kemungkinan akan terjadi jika Anda menggunakan tipe build Gradle dan rasa build Gradle)
Pada Layanan Google 3.0 dan menggunakan Firebase , tidak perlu membuat file yang berbeda untuk rasa yang berbeda. Membuat file yang berbeda untuk rasa yang berbeda bisa tidak jelas atau langsung jika Anda memiliki jenis produk dan tipe Build yang menyusun satu sama lain.
Dalam file yang sama Anda akan memiliki semua konfigurasi yang Anda butuhkan untuk semua jenis dan rasa build Anda.
Di Firebase console Anda perlu menambahkan satu aplikasi per nama paket. Bayangkan bahwa Anda memiliki 2 rasa (dev dan live) dan 2 tipe build (debug dan rilis). Tergantung pada konfigurasi Anda, tetapi kemungkinan Anda memiliki 4 nama paket yang berbeda seperti:
Anda memerlukan 4 Aplikasi Android yang berbeda di Firebase Console. (Pada masing-masing Anda perlu menambahkan SHA-1 untuk debug dan hidup untuk setiap komputer yang Anda gunakan)
Ketika Anda mengunduh file google-services.json, sebenarnya itu tidak masalah dari aplikasi apa yang Anda unduh, semuanya berisi info yang sama terkait dengan semua aplikasi Anda.
Sekarang Anda perlu mencari file ini di level aplikasi (app /).
Jika Anda membuka file itu, Anda akan melihat bahwa jika berisi semua informasi untuk semua nama paket Anda.
Titik nyeri digunakan untuk menjadi plugin. Untuk membuatnya berfungsi, Anda perlu mencari plugin di bagian bawah file Anda. Jadi baris ini ..
... harus ada di bagian bawah file build.gradle aplikasi Anda.
Untuk sebagian besar yang dikatakan di sini, ini juga berlaku untuk versi sebelumnya. Saya tidak pernah memiliki file yang berbeda untuk konfigurasi yang berbeda, tetapi sekarang dengan Firebase console lebih mudah karena mereka menyediakan satu file tunggal dengan semua yang Anda butuhkan untuk semua yang Anda konfigurasi.
sumber
Menulis posting Medium tentang masalah ini.
Punya masalah yang sama (menggunakan BuildTypes bukannya Flavours), dan memperbaikinya seperti itu.
Manfaatkan sistem manajemen ketergantungan Gradle. Saya membuat dua tugas,
switchToDebug
danswitchToRelease
. Mengharuskan setiap saatassembleRelease
dijalankan, ituswitchToRelease
juga dijalankan. Sama untuk debug.EDIT: gunakan
processDebugFlavorGoogleServices
/processReleaseFlavorGoogleServices
tugas untuk memodifikasinya pada tingkat per rasa.sumber
Yah saya mengalami masalah yang sama dan tidak bisa mendapatkan solusi yang sempurna. Itu hanya solusi. Saya bertanya-tanya bagaimana Google tidak memikirkan rasa ...? Dan saya berharap mereka akan segera mengusulkan solusi yang lebih baik.
Apa yang saya lakukan:
Saya punya dua rasa, di masing-masing saya menaruh google-services.json yang sesuai:
src/flavor1/google-services.json
dansrc/flavor2/google-services.json
.Kemudian dalam build gradle saya menyalin file tergantung pada rasa ke
app/
direktori:Batasan: Anda harus mengubah
myFlavor
secara manual dalam gradle setiap kali Anda ingin menjalankan untuk rasa yang berbeda (karena hardcoded).Saya mencoba banyak cara untuk mendapatkan cita rasa build seperti
afterEvaluate
close ... tidak bisa mendapatkan solusi yang lebih baik sampai sekarang.Perbarui, solusi lain: satu google-services.json untuk semua rasa:
Anda juga dapat, memiliki nama paket yang berbeda untuk setiap rasa dan kemudian di konsol pengembang google Anda tidak harus membuat dua aplikasi yang berbeda untuk setiap rasa, tetapi hanya dua klien berbeda dalam aplikasi yang sama. Maka Anda hanya akan memiliki satu
google-services.json
yang berisi kedua klien Anda. Tentu saja, ini tergantung pada bagaimana Anda menerapkan backend dari rasa Anda. Jika mereka tidak dipisahkan maka solusi ini tidak akan membantu Anda.sumber
google-services.json
untuk keduanyarelease
dandebug
bekerja untuk saya, sebagaimana disebutkan dalam pembaruan Anda. Saya pikir ini adalah solusi paling sederhana jika Anda hanya mencoba membagidebug
bangunan Anda , seperti saya. Untuk referensi, Anda dapat membuat file di sini: developers.google.com/mobile/add?platform=androidMenurut jawaban ahmed_khan_89 , Anda dapat menempatkan "copy code" di dalam rasa produk.
Maka Anda tidak perlu beralih pengaturan secara manual.
sumber
Saya menggunakan file google-services.json, dibuat dari sini: https://developers.google.com/mobile/add?platform=android&cntapi=gcm&cnturl=https:%2F%2Fdevelopers.google.com%2Fcloud-messaging % 2Fandroid% 2Flient & cntlbl = Lanjutkan% 20Tambahkan% 20GCM% 20Dukungan &% 3Konfigurasi%% 3Dtrue
Dalam struktur JSON ada array JSON yang disebut klien. Jika Anda memiliki banyak rasa, tambahkan saja properti yang berbeda di sini.
Dalam proyek saya, saya menggunakan id proyek yang sama dan ketika saya menambahkan nama paket kedua di url di atas, google memberi saya file yang berisi banyak klien di data json.
Maaf untuk data JSON yang ringkas. Saya tidak bisa memformatnya dengan benar ...
sumber
File google-services.json tidak perlu menerima pemberitahuan. Cukup tambahkan variabel untuk setiap rasa dalam file build.gradle Anda:
Gunakan variabel ini BuildConfig.GCM_SENDER_ID alih-alih getString (R.string.gcm_defaultSenderId) saat mendaftar:
sumber
1.) Apa yang sebenarnya dilakukan google-services.json?
Ikuti ini: https://stackoverflow.com/a/31598587/2382964
2.) Bagaimana file google-services.json memengaruhi proyek studio android Anda?
Ikuti ini: https://stackoverflow.com/a/33083898/2382964
singkatnya untuk url kedua, jika Anda menambahkan google-services.json di proyek Anda harus ada
google-services
folder yang dibuat secara otomatis untukdebug
varian di jalur ini3.) Apa yang harus dilakukan, untuk membuatnya selesai?
tambahkan ketergantungan layanan Google di
project_level
build.gradle, Anda juga dapat menggunakanversion 3.0.0
jika Anda menggunakan pustaka app_compact.sekarang di
app_level
build.gradle Anda harus menambahkan di bagian bawah.4.) Tempat meletakkan file google-service.json di struktur Anda.
kasus 1.) jika Anda tidak memiliki build_flavour, taruh saja di dalam
/app/google-service.json
folder.kasus 2.) jika Anda memiliki beberapa build_flavor dan Anda memiliki file google_services.json yang berbeda-beda
app/src/build_flavor/google-service.json
.kasus 3.) jika Anda memiliki beberapa build_flavor dan Anda memiliki satu file google_services.json dimasukkan ke dalam
app/google-service.json
.sumber
Tidak perlu skrip gradle tambahan.
Google mulai menambahkan nama paket berbeda dengan nama 'android_client_info'. Sepertinya di bawah ini di google-services.json
jadi, langkah-langkah berikut cukup untuk memiliki pilihan google-services.json yang berbeda.
Hanya itu saja!..
sumber
Kami memiliki nama paket yang berbeda untuk debug build (* .debug) jadi saya menginginkan sesuatu yang bekerja berdasarkan rasa dan buildType, tanpa harus menulis apa pun yang terkait dengan rasa dalam pola
processDebugFlavorGoogleServices
.Saya membuat folder bernama "google-services" di setiap rasa, yang berisi versi debug dan versi rilis file json:
Di bagian buildTypes dari file gradle Anda, tambahkan ini:
Ini akan menyalin file json kanan di root modul aplikasi Anda secara otomatis ketika Anda akan beralih varian build.
Tambahkan dua metode yang dipanggil untuk mendapatkan rasa saat ini dan tipe build saat ini di root build.gradle Anda
Itu saja, Anda tidak perlu khawatir tentang menghapus / menambahkan / memodifikasi rasa dari file gradle Anda, dan itu mendapatkan debug atau rilis google-services.json secara otomatis.
sumber
Firebase sekarang mendukung beberapa id aplikasi dengan satu file google-services.json.
Posting blog ini menjelaskannya secara rinci.
Anda akan membuat satu proyek induk di Firebase yang akan Anda gunakan untuk semua varian Anda. Anda kemudian membuat aplikasi Android terpisah di Firebase di bawah proyek itu untuk setiap id aplikasi yang Anda miliki.
Ketika Anda membuat semua varian Anda, Anda dapat mengunduh google-services.json yang mendukung semua id aplikasi Anda. Ketika relevan untuk melihat data secara terpisah (yaitu Pelaporan Kecelakaan) Anda dapat mengubahnya dengan dropdown.
sumber
Menurut Firebase docs, Anda juga dapat menggunakan sumber daya string alih-alih google-services.json .
Contoh
strings.xml
:sumber
Berdasarkan jawaban @ ZakTaccardi, dan dengan asumsi Anda tidak ingin satu proyek untuk kedua rasa, tambahkan ini ke akhir
build.gradle
file Anda :Anda harus memiliki file
src/staging/google-services.json
dansrc/production/google-services.json
. Ganti nama rasa dengan yang Anda gunakan.sumber
Saya telah menemukan bahwa plugin google-services tidak berguna untuk proyek yang ingin menambahkan GCM. Ini hanya menghasilkan file berikut yang hanya menambahkan ID proyek Anda sebagai sumber daya string:
Tampaknya Anda hanya memerlukannya jika Anda menyalin kode sampel kata demi kata langsung dari panduan Cloud Messaging untuk Android . Berikut ini contohnya:
Larutan
Jika Anda ingin dapat beralih proyek API untuk berbagai jenis bangunan atau citarasa produk, Anda bisa menentukan konstanta Anda sendiri dan memilih yang sesuai saat memanggil
getToken()
API.Untuk Rasa Produk
Kode di atas berfungsi untuk beralih antara debug dan rilis build. Untuk citarasa produk, Anda akan mendefinisikan kunci API yang berbeda dalam file sumber java dan menempatkan file dalam direktori rasa produk yang sesuai. Untuk referensi: Gradle Build Variants
sumber
DIPERBARUI:
Dalam hal pengaturan Firebase dengan varian build, silakan merujuk ke blog ini yang memiliki instruksi terperinci.
sumber
Maksud dari plugin google-services adalah menyederhanakan integrasi fitur Google.
Karena hanya menghasilkan sumber daya android dari file google-services.json, logika gradle yang terlalu rumit meniadakan hal ini, saya pikir.
Jadi jika Google-docs tidak mengatakan sumber daya mana yang diperlukan untuk fitur-fitur Google tertentu, saya sarankan untuk membuat file JSON untuk setiap buildtype / flavour yang relevan, lihat sumber daya apa yang dihasilkan oleh plugin dan kemudian masukkan sumber daya tersebut secara manual ke direktori src / buildtypeORflavor / res masing-masing.
Hapus referensi untuk plugin google-services dan file JSON setelah itu, dan Anda selesai.
Untuk informasi rinci tentang cara kerja google-services gradle-plugin lihat jawaban saya yang lain:
https://stackoverflow.com/a/33083898/433421
sumber
Menyederhanakan apa yang dikatakan @Scotti. Anda perlu membuat aplikasi Multiples dengan nama paket berbeda untuk Proyek tertentu tergantung pada rasa produk.
Misalkan Proyek Anda adalah ABC yang memiliki rasa produk yang berbeda X, Y di mana X memiliki nama paket com.x dan Y memiliki nama paket com.y maka di konsol firebase Anda perlu membuat proyek ABC di mana Anda perlu membuat 2 aplikasi dengan nama paket com.x dan com.y. Maka Anda perlu mengunduh file google-services.json di mana akan ada 2 objek klien-info yang akan berisi pacakges dan Anda akan baik-baik saja.
Potongan json akan menjadi seperti ini
sumber
Memang, hanya satu google-services.json dalam
MyApp/app/
direktori yang baik, tidak perlu script tambahancom.google.gms:google-services:3.0.0
. Tapi hati-hati menghapus filegoogle-services.json
dari direktori aplikasiMyApp/app/src/flavor1/res/
untuk menghindari jenis kesalahanExecution failed for task ':app:processDebugGoogleServices'. > No matching client found for package
sumber
Jadi, jika Anda ingin menyalin
google-services.json
file dari semua varian Anda secara terprogram ke dalam folder root Anda. Saat Anda beralih ke varian tertentu, inilah solusi untuk AndaAda peringatan untuk pendekatan ini yaitu Anda perlu memiliki
google-service.json
file di setiap folder varian Anda di sini sebagai contoh.sumber
Anda memiliki banyak rasa, jadi itu berarti Anda akan memiliki banyak paket id berbeda, bukan? Jadi, pergi saja ke halaman di mana Anda mengatur / menghasilkan file json Anda dan mengkonfigurasi untuk setiap nama paket. Semua itu akan menambah file json.
Saya sangat malas untuk mengirim gambar sekarang, tetapi pada dasarnya:
Saat mengkonfigurasi file, Anda dapat melihat bahwa google menunjukkan kepada Anda Server API Key + ID Pengirim. Dan itu sama untuk semua paket (rasa)
Pada akhirnya, Anda hanya perlu satu file json untuk semua rasa.
Satu lagi pertanyaan di sini yang harus Anda uji ketika Anda mendaftar untuk mendapatkan Token Registrasi, periksa apakah ada perbedaan untuk setiap rasa. Saya tidak menyentuhnya tetapi berpikir itu harus menjadi perbedaan. Terlambat sekarang dan aku sangat ngantuk :) Semoga bisa membantu!
sumber
Hai Teman juga mencari nama hanya menggunakan huruf kecil maka Anda tidak mendapatkan kesalahan ini
sumber
Saat ini saya menggunakan dua Id Proyek GCM dalam paket aplikasi yang sama. Saya meletakkan google-service.json dari proyek GCM pertama saya tetapi saya beralih dari yang pertama ke yang kedua hanya mengubah SENDER_ID:
(Pada titik ini saya berpikir bahwa google-services.json tidak wajib)
sumber
Terinspirasi oleh @ ahmed_khan_89 jawaban di atas. Kita dapat langsung menyimpan seperti ini di file gradle.
sumber
Tempatkan file "google-services.json" Anda di app / src / flavours masing-masing kemudian di build.gradle app, di bawah Android tambahkan kode di bawah ini
sumber