FCM biasanya mengantarkan pesan segera setelah pesan dikirim. Namun, hal tersebut terkadang tidak dapat dilakukan. Misalnya, perangkat mungkin saja tidak tersedia atau FCM mungkin memang sengaja menunda pesan agar aplikasi tidak menggunakan resource secara berlebihan dan berdampak negatif pada masa pakai baterai.
Dalam kasus ini, FCM akan menyimpan pesan dan mengirimkannya segera setelah kondisinya memungkinkan. Meskipun dalam kebanyakan kasus hal ini tidak menjadi masalah, ada beberapa aplikasi yang memerlukan pengiriman notifikasi tanpa penundaan. Misalnya, notifikasi untuk panggilan masuk atau undangan ke suatu acara.
Di Android dan Web, Anda dapat menentukan masa aktif maksimum suatu pesan. Nilainya harus berupa durasi dari 0 hingga 2.419.200 detik (28 hari), yaitu sama dengan periode waktu maksimum FCM menyimpan dan mencoba mengirimkan pesan. Secara default, permintaan yang tidak berisi kolom ini memiliki masa aktif maksimum empat minggu.
Di iOS, Anda dapat menetapkan header apns-expiration
di
objek
ApnsConfig. Untuk mengetahui detail selengkapnya, lihat dokumentasi Apple tentang Mengirim
permintaan notifikasi ke
APNS.
Berikut adalah beberapa kemungkinan penggunaan fitur ini:
- Panggilan masuk video chat
- Acara undangan yang akan segera kedaluwarsa
- Acara kalender
Keuntungan lain dari penetapan masa aktif pesan adalah
FCM tidak menerapkan throttle pesan yang dapat diciutkan pada pesan yang memiliki
nilai time to live 0 detik. Perlu diingat bahwa jika nilai ttl
0, berarti
pesan yang tidak dapat segera dikirimkan akan dihapus. Namun, karena
pesan seperti itu tidak pernah disimpan, hal ini memberikan latensi terbaik untuk mengirim
pesan notifikasi.
Berikut contoh permintaan yang berisi TTL:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data":{
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
"apns":{
"headers":{
"apns-expiration":"1604750400"
}
},
"android":{
"ttl":"4500s"
},
"webpush":{
"headers":{
"TTL":"4500"
}
}
}
}
Masa aktif pesan
Saat server aplikasi memposting pesan ke FCM dan menerima kembali ID pesan, ini bukan berarti bahwa pesan tersebut sudah dikirim ke perangkat. Hal itu hanya berarti bahwa pesan telah diterima dan dapat dikirim. Sedangkan waktu pengiriman pesan itu sendiri bergantung pada banyak faktor.
Jika perangkat terhubung tetapi berada dalam mode Istirahatkan, pesan berprioritas rendah akan disimpan oleh
FCM hingga perangkat keluar dari mode Istirahatkan. Jika collapse_key
ditetapkan, dan
sudah ada pesan yang memiliki kunci
penciutan dan
token pendaftaran sama yang menunggu pengiriman, pesan lama tersebut akan dihapus dan
pesan baru akan menggantikannya. Namun, jika kunci penciutan tidak ditetapkan, baik pesan lama
maupun pesan baru akan disimpan untuk dikirimkan kemudian.
Jika perangkat tidak terhubung ke FCM, pesan akan disimpan hingga
perangkat terhubung. Saat terhubung, FCM akan mengirimkan
semua pesan yang tertunda ke perangkat. Jika perangkat tidak pernah terhubung
kembali, waktu tunggu pesan akan habis dan pesan tersebut akan dihapus dari penyimpanan
FCM. Waktu tunggu default-nya adalah empat minggu, kecuali jika tanda ttl
ditetapkan. Jika aplikasi
telah di-uninstal saat FCM mencoba mengirimkan pesan ke
perangkat, FCM akan langsung menghapus pesan tersebut dan membatalkan validasi
token pendaftaran. Setelah itu, semua upaya pengiriman pesan ke perangkat tersebut akan menghasilkan
error NotRegistered
.
Untuk perangkat Android, jika perangkat tidak terhubung ke FCM selama lebih
dari satu bulan, FCM akan tetap menerima pesan, tetapi pesan tersebut akan langsung
dihapus. Jika perangkat terhubung dalam waktu empat minggu sejak terakhir dikirimi pesan data,
aplikasi klien Anda akan menerima
callback
onDeletedMessages()
.
Untuk mendapatkan insight selengkapnya tentang pengiriman pesan di platform Android atau Apple, Anda dapat menggunakan dasbor pelaporan FCM, yang mencatat jumlah pesan yang terkirim dan dibuka di perangkat Android dan Apple, beserta data terkait tayangan untuk aplikasi Android.