Praktik terbaik untuk pengelolaan token pendaftaran FCM

Jika menggunakan FCM API untuk membuat permintaan kirim secara terprogram, Anda mungkin mendapati bahwa, dari waktu ke waktu, Anda menyia-nyiakan resource dengan mengirimkan pesan ke perangkat yang tidak aktif dengan token pendaftaran yang sudah usang. Situasi ini dapat memengaruhi data pengiriman pesan yang dilaporkan di Firebase console atau data yang diekspor ke BigQuery, yang ditampilkan sebagai penurunan rasio penayangan yang drastis (tetapi tidak valid). Panduan ini berisi pembahasan mengenai beberapa langkah 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 dalam aplikasi apa pun yang menggunakan FCM API untuk membuat permintaan kirim secara terprogram. Praktik terbaik utama adalah:

  • Simpan token pendaftaran di server Anda. Peran penting server adalah memantau setiap token klien dan menyimpan daftar terbaru token aktif. Sebaiknya terapkan stempel waktu token dalam kode serta server Anda, dan update stempel waktu ini secara berkala.
  • Hapus token tersimpan yang sudah usang. Selain menghapus token dalam kasus yang jelas, yaitu respons token yang tidak valid, Anda mungkin perlu memantau tanda lain bahwa token sudah usang. Panduan ini berisi pembahasan mengenai beberapa opsi yang Anda miliki untuk melakukannya.

Mengambil dan menyimpan token pendaftaran

Saat aplikasi dijalankan untuk pertama kalinya, FCM SDK akan menghasilkan token pendaftaran untuk instance aplikasi klien. Ini adalah token yang harus disertakan dalam permintaan kirim yang ditargetkan dari API, atau yang harus ditambahkan ke langganan topik untuk menarget topik.

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

Selain itu, Anda harus menyimpan token ke server dan mengupdate stempel waktu setiap kali ada perubahan, seperti saat:

  • Aplikasi dipulihkan di perangkat baru
  • Pengguna melakukan uninstal/instal ulang aplikasi
  • Pengguna menghapus data aplikasi.

Mendeteksi respons token yang tidak valid dari backend FCM

Pastikan untuk mendeteksi respons token yang tidak valid dari FCM dan meresponsnya dengan menghapus token pendaftaran apa pun yang didapati tidak valid dari sistem Anda. Dengan HTTP v1 API, pesan error ini dapat menunjukkan bahwa permintaan kirim Anda menarget token yang sudah usang atau tidak valid:

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

Lihat ErrorCodes untuk mengetahui informasi selengkapnya.

Jika Anda menerima salah satu respons tersebut untuk token yang ditarget, hapus data token ini karena tidak akan valid lagi. Namun, perlu diingat bahwa tetap ada kasus di mana token memang tidak valid, tetapi tidak ada indikasinya. Misalnya, terkadang backend FCM tidak dapat memverifikasi apakah perangkat menjadi offline secara permanen atau tidak.

Memastikan keaktualan token pendaftaran

Menentukan apakah sebuah token masih baru atau sudah usang tidak selalu mudah. Untuk mencakup semua kasus, Anda harus menerapkan batasan guna menentukan kapan token dianggap usang. Rekomendasi kami adalah dua bulan. Setiap token yang berusia lebih dari dua bulan kemungkinan besar adalah perangkat yang tidak aktif karena perangkat aktif pasti akan mengupdate tokennya.

Mengupdate token secara rutin

Sebaiknya Anda mengambil dan mengupdate semua token pendaftaran di server Anda secara berkala. Hal ini mengharuskan Anda untuk:

  • Menambahkan logika aplikasi di aplikasi klien untuk mengambil token saat ini menggunakan panggilan API yang sesuai (seperti token(completion): untuk platform Apple atau getToken() untuk Android), lalu mengirimkan token saat ini ke server aplikasi Anda untuk disimpan (dengan stempel waktu). Tugas ini dapat dilakukan per bulan, dan dikonfigurasi untuk mencakup semua klien/token.
  • Menambahkan logika server untuk mengupdate stempel waktu token secara berkala, terlepas dari apakah token telah berubah atau belum.

Apa pun pola pengaturan waktu yang Anda ikuti, pastikan untuk mengupdate token secara berkala. Frekuensi update satu kali per bulan kemungkinan besar akan menghasilkan keseimbangan antara dampak terhadap baterai vs. pendeteksian token pendaftaran yang tidak aktif. Dengan melakukan update ini, Anda juga memastikan bahwa perangkat yang tidak aktif akan me-refresh pendaftarannya saat perangkat kembali aktif. Tidak ada gunanya melakukan refresh lebih dari seminggu sekali.

Menghentikan langganan token usang pada topik

Mengelola langganan topik untuk menghapus token pendaftaran yang sudah usang juga dapat dilakukan. Hal ini melibatkan dua langkah:

  1. Aplikasi Anda harus kembali berlangganan topik sebulan sekali dan/atau setiap kali token pendaftaran berubah. Ini akan membentuk solusi pemulihan diri, ketika langganan muncul kembali secara otomatis saat aplikasi kembali aktif.
  2. Jika instance aplikasi tidak aktif selama 2 bulan (atau periode keusangan yang Anda tentukan sendiri), Anda harus menghentikan langganannya dari topik menggunakan Firebase Admin SDK untuk menghapus pemetaan token/topik dari backend FCM.

Dua langkah ini bermanfaat mempercepat fanout karena jumlah token usang yang harus di-fanout menjadi lebih sedikit, dan instance aplikasi yang usang akan berlangganan kembali secara otomatis setelah aktif lagi.

Mengukur keberhasilan pengiriman

Umumnya, sebaiknya targetkan pesan berdasarkan tindakan yang dilihat atau diambil dari instance aplikasi yang digunakan secara aktif. Hal ini sangat penting jika Anda rutin mengirim pesan ke topik dengan jumlah pelanggan yang besar. Jika sebagian pelanggan tersebut sebenarnya tidak aktif, dampaknya 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 bahwa token aktif?
  • Apakah upaya pengiriman sebelumnya gagal secara konsisten selama jangka waktu tertentu?
  • Apakah token pendaftaran telah diupdate di server Anda dalam waktu dua bulan terakhir?
  • Untuk perangkat Android, apakah FCM Data API melaporkan persentase kegagalan pengiriman pesan yang tinggi karena droppedDeviceInactive?

Untuk mendapatkan informasi lebih lanjut tentang pengiriman, baca artikel Memahami pengiriman pesan.