Praktik terbaik untuk manajemen token pendaftaran FCM

Jika Anda menggunakan FCM API untuk membuat permintaan pengiriman secara terprogram, Anda mungkin menemukan bahwa, seiring waktu, Anda membuang-buang sumber daya dengan mengirim pesan ke perangkat yang tidak aktif dengan token pendaftaran yang basi. Situasi ini dapat memengaruhi data pengiriman pesan yang dilaporkan di Firebase console atau data yang diekspor ke BigQuery, yang muncul sebagai penurunan dramatis (namun sebenarnya tidak valid) dalam tingkat pengiriman. Panduan ini membahas beberapa tindakan yang dapat Anda ambil untuk membantu memastikan penargetan pesan yang efisien dan pelaporan pengiriman yang valid.

Praktik terbaik dasar

Ada beberapa praktik dasar yang harus Anda ikuti di aplikasi apa pun yang menggunakan API FCM untuk membuat permintaan pengiriman secara terprogram. Praktik terbaik utama adalah:

  • Simpan token pendaftaran di server Anda. Peran penting server adalah untuk melacak setiap token klien dan menyimpan daftar token aktif yang diperbarui. Kami sangat menyarankan untuk menerapkan stempel waktu token dalam kode dan server Anda, dan memperbarui stempel waktu ini secara berkala.
  • Hapus token yang disimpan yang menjadi basi . Selain menghapus token dalam kasus nyata dari respons token yang tidak valid, Anda mungkin perlu memantau tanda-tanda lain bahwa token tersebut kedaluwarsa. Panduan ini membahas beberapa pilihan Anda untuk mencapai ini.

Ambil dan simpan token pendaftaran

Saat memulai awal aplikasi Anda, FCM SDK membuat token pendaftaran untuk instance aplikasi klien. Ini adalah token yang harus Anda sertakan dalam permintaan pengiriman yang ditargetkan dari API, atau tambahkan ke langganan topik untuk topik penargetan.

Seperti yang disebutkan dalam panduan penyiapan klien kami, aplikasi Anda harus mengambil token ini saat startup awal dan menyimpannya ke server aplikasi Anda bersama stempel waktu . Stempel waktu ini harus diterapkan oleh kode dan server Anda, karena tidak disediakan untuk Anda oleh FCM SDK.

Selain itu, penting untuk menyimpan token ke server dan memperbarui stempel waktu setiap kali berubah, seperti saat:

  • Aplikasi dipulihkan di perangkat baru
  • Pengguna mencopot/menginstal ulang aplikasi
  • Pengguna menghapus data aplikasi.

Deteksi respons token yang tidak valid dari backend FCM

Pastikan untuk mendeteksi respons token yang tidak valid dari FCM dan merespons dengan menghapus dari sistem Anda semua token pendaftaran yang diketahui tidak valid. Dengan HTTP v1 API, pesan kesalahan ini mungkin menunjukkan bahwa permintaan pengiriman Anda menargetkan token yang basi atau tidak valid:

  • UNREGISTERED (HTTP 404)
  • INVALID_ARGUMENT (HTTP 400)

Lihat ErrorCodes untuk informasi lebih lanjut.

Jika Anda menerima salah satu dari respons ini untuk token yang ditargetkan, Anda dapat menghapus catatan token ini dengan aman, karena tidak akan valid lagi. Namun, perlu diingat bahwa masih akan ada kasus di mana token sebenarnya tidak valid, tetapi tidak ada indikasinya. Misalnya, terkadang backend FCM tidak dapat memverifikasi apakah perangkat telah offline secara permanen atau tidak.

Memastikan kesegaran token pendaftaran

Menentukan apakah token baru atau basi tidak selalu mudah. Untuk mencakup semua kasus, Anda harus mengadopsi ambang batas ketika Anda menganggap token sudah usang; rekomendasi kami adalah dua bulan. Token apa pun yang lebih lama dari dua bulan kemungkinan merupakan perangkat yang tidak aktif; perangkat yang aktif akan me-refresh tokennya.

Perbarui token secara teratur

Kami menyarankan Anda secara berkala mengambil dan memperbarui semua token pendaftaran di server Anda. Ini mengharuskan Anda untuk:

  • Tambahkan logika aplikasi di aplikasi klien Anda untuk mengambil token saat ini menggunakan panggilan API yang sesuai (seperti token(completion): untuk platform Apple atau getToken() untuk Android), lalu kirim token saat ini ke server aplikasi Anda untuk penyimpanan (dengan stempel waktu ). Ini bisa menjadi pekerjaan bulanan yang dikonfigurasi untuk mencakup semua klien/token.
  • Tambahkan logika server untuk memperbarui stempel waktu token secara berkala, terlepas dari apakah token telah berubah atau tidak.

Apa pun pola waktu yang Anda ikuti, pastikan untuk memperbarui token secara berkala. Frekuensi pembaruan sekali per bulan kemungkinan mencapai keseimbangan yang baik antara dampak baterai vs. mendeteksi token pendaftaran yang tidak aktif. Dengan melakukan penyegaran ini, Anda juga memastikan bahwa perangkat apa pun yang tidak aktif akan menyegarkan pendaftarannya ketika menjadi aktif kembali. Tidak ada untungnya melakukan refresh lebih sering daripada mingguan.

Berhenti berlangganan token basi dari topik

Mengelola langganan topik untuk menghapus token pendaftaran basi adalah pertimbangan lain. Ini melibatkan dua langkah:

  1. Aplikasi Anda harus berlangganan kembali topik sebulan sekali dan/atau setiap kali token pendaftaran berubah. Ini membentuk solusi penyembuhan diri, di mana langganan muncul kembali secara otomatis ketika aplikasi menjadi aktif kembali.
  2. Jika instance aplikasi tidak digunakan selama 2 bulan (atau jendela kedaluwarsa Anda sendiri), Anda harus berhenti berlangganan dari topik menggunakan Firebase Admin SDK untuk menghapus pemetaan token/topik dari backend FCM.

Manfaat dari dua langkah ini adalah fanout Anda akan terjadi lebih cepat karena ada lebih sedikit token basi untuk disebarkan, dan instance aplikasi basi Anda akan otomatis berlangganan kembali setelah aktif kembali.

Mengukur keberhasilan pengiriman

Umumnya, kami menyarankan untuk menargetkan pesan berdasarkan tindakan yang diamati atau diambil dari instance aplikasi yang digunakan secara aktif. Ini sangat penting jika Anda secara teratur mengirim pesan ke topik dengan banyak pelanggan; jika sebagian dari pelanggan tersebut sebenarnya tidak aktif, dampak pada statistik pengiriman Anda dapat menjadi signifikan dari waktu ke waktu.

Sebelum menargetkan pesan ke token, pertimbangkan:

  • Apakah Google Analytics, data yang diambil di BigQuery, atau sinyal pelacakan lainnya menunjukkan token aktif?
  • Apakah upaya pengiriman sebelumnya gagal secara konsisten selama periode waktu tertentu?
  • Apakah token pendaftaran telah diperbarui di server Anda dalam dua bulan terakhir?
  • Untuk perangkat Android, apakah FCM Data API melaporkan persentase kegagalan pengiriman pesan yang tinggi karena droppedDeviceInactive ?

Untuk informasi selengkapnya tentang pengiriman, lihat Memahami pengiriman pesan .