Saya memigrasi aplikasi saya dari GCM ke FCM.
Saat pengguna baru menginstal aplikasi saya, onTokenRefresh()
secara otomatis dipanggil. Masalahnya adalah bahwa pengguna belum masuk (Tidak ada id pengguna).
Bagaimana saya bisa memicu onTokenRefresh()
setelah pengguna masuk?
android
firebase-cloud-messaging
TareK Khoury
sumber
sumber
Jawaban:
The
onTokenRefresh()
Metode ini akan dipanggil setiap kali token baru dihasilkan. Setelah pemasangan aplikasi, itu akan segera dibuat (seperti yang Anda temukan). Itu juga akan dipanggil ketika token telah berubah.Menurut
FirebaseCloudMessaging
panduannya:Artinya, pendaftaran token berlaku untuk setiap aplikasi. Sepertinya Anda ingin menggunakan token setelah pengguna masuk. Yang saya sarankan adalah Anda menyimpan token dalam
onTokenRefresh()
metode ke penyimpanan internal atau preferensi bersama. Kemudian, ambil token dari penyimpanan setelah pengguna masuk dan daftarkan token dengan server Anda sesuai kebutuhan.Jika Anda ingin memaksa secara manual
onTokenRefresh()
, Anda dapat membuat IntentService dan menghapus instance token. Kemudian, saat Anda memanggil getToken,onTokenRefresh()
metode ini akan dipanggil lagi.Kode Contoh:
EDIT
onTokenRefresh () tidak digunakan lagi . Gunakan
onNewToken()
dalamMyFirebaseMessagingService
sumber
Coba terapkan
FirebaseInstanceIdService
untuk mendapatkan token penyegaran.Akses token pendaftaran:
Anda dapat mengakses nilai token dengan memperluas FirebaseInstanceIdService . Pastikan Anda telah menambahkan layanan ke manifes Anda , lalu panggil
getToken
dalam konteksonTokenRefresh
, dan catat nilainya seperti yang ditunjukkan:Kode Lengkap:
Lihat jawaban saya di sini .
EDIT:
Anda tidak boleh memulai FirebaseInstanceIdService sendiri.
Ini tidak akan sering dipanggil, ini diperlukan untuk rotasi kunci dan untuk menangani perubahan ID Instance karena:
Sistem akan membatasi acara penyegaran di semua perangkat untuk menghindari kelebihan beban server aplikasi dengan pembaruan token.
Coba cara di bawah ini :
sumber
onTokenRefresh()
dipanggil?Saya mempertahankan satu bendera di pref bersama yang menunjukkan apakah token gcm dikirim ke server atau tidak. Di layar Splash setiap kali saya memanggil salah satu metode sendDevicetokenToServer. Metode ini memeriksa apakah id pengguna tidak kosong dan status pengiriman gcm kemudian mengirim token ke server.
}
Di kelas MyFirebaseInstanceIDService
sumber
Guys punya solusi yang sangat sederhana
https://developers.google.com/instance-id/guides/android-implementation#generate_a_token
Catatan: Jika aplikasi Anda menggunakan token yang dihapus oleh deleteInstanceID, aplikasi Anda perlu membuat token pengganti.
Sebagai ganti menghapus ID instance, hapus hanya token:
sumber
Ini ada di RxJava2 dalam skenario ketika satu pengguna keluar dari aplikasi Anda dan pengguna lain masuk (Aplikasi yang Sama) Untuk mendaftar dan memanggil masuk (Jika perangkat pengguna tidak memiliki koneksi internet lebih awal pada saat aktivitas dimulai dan kami perlu mengirim token masuk api masuk)
Gabung
sumber
Jawaban ini tidak merusak id instance, melainkan bisa mendapatkan id saat ini. Itu juga menyimpan yang baru di preferensi Bersama.
Strings.xml
Utility.java (semua kelas di mana Anda ingin mengatur / mendapatkan preferensi)
MyFirebaseInstanceIdService.java (memperluas FirebaseInstanceIdService)
}
Layanan Android 2.0 dan yang lebih baru
onCreate
tidak dipanggil saat dimulai secara otomatis ( sumber ). SebaliknyaonStartCommand
diganti dan digunakan. Namun dalam FirebaseInstanceIdService yang sebenarnya, ini dideklarasikan sebagai final dan tidak dapat diganti. Namun, ketika kita memulai layanan menggunakan startService (), jika layanan sudah berjalan, instance aslinya digunakan (yang bagus). OnCreate () (didefinisikan di atas) kita juga dipanggil !.Gunakan ini di awal MainActivity atau di titik mana pun yang menurut Anda perlu id instance.
Dan akhirnya,
Catatan , Anda selanjutnya dapat menyempurnakan ini dengan mencoba memindahkan kode startservice () ke metode getFirebaseInstanceId.
sumber
sumber
Cara baru untuk melakukan ini adalah dengan mengganti
onNewToken
metode dariFirebaseMessagingService
Juga jangan lupa untuk menambahkan layanan di Manifest.xml
sumber
Bagaimana saya memperbarui deviceToken saya
Pertama ketika saya masuk, saya mengirim token perangkat pertama di bawah koleksi pengguna dan pengguna yang masuk saat ini.
Setelah itu, saya hanya mengganti
onNewToken(token:String)
di myFirebaseMessagingService()
dan hanya memperbarui nilai itu jika token baru dibuat untuk pengguna ituSetiap kali aplikasi Anda membukanya, aplikasi akan memeriksa token baru, jika pengguna belum masuk, ia tidak akan memperbarui token, jika pengguna sudah masuk, Anda dapat memeriksa
newToken
sumber