FCM, mesajları genellikle gönderildikten hemen sonra teslim eder. Ancak bu her zaman mümkün olmayabilir. Örneğin, cihaz kullanılamıyor olabilir veya FCM, bir uygulamanın aşırı kaynak tüketmesini ve pil ömrünü olumsuz etkilemesini önlemek için mesajları kasıtlı olarak geciktirebilir.
Bu durumlarda FCM, iletiyi depolar ve mümkün olan en kısa sürede teslim eder. Bu durum çoğu durumda sorun teşkil etmese de bildirimlerin gecikmeden gönderilmesini gerektiren bazı uygulamalar vardır. Örneğin, gelen arama bildirimi veya etkinlik daveti.
Android ve web'de bir mesajın maksimum kullanım ömrünü belirtebilirsiniz. Değer, 0 ile 2.419.200 saniye (28 gün) arasında bir süre olmalıdır ve FCM tarafından iletinin depolanıp teslim edilmeye çalışılacağı maksimum süreyi ifade eder. Varsayılan olarak, bu alanı içermeyen istekler en fazla dört hafta sürer.
iOS'te, ApnsConfig nesnesinde apns-expiration başlığını ayarlayabilirsiniz. Daha fazla bilgi için Apple'ın APN'lere bildirim istekleri gönderme ile ilgili belgelerine bakın.
Bu özelliğin olası kullanım alanlarından bazıları şunlardır:
- Görüntülü sohbet gelen aramaları
- Süresi dolan davet etkinlikleri
- Takvim etkinlikleri
Mesajın kullanım ömrünü belirtmenin bir diğer avantajı da FCM'nin, geçerlilik süresi 0 saniye olan mesajlara daraltılabilir mesaj kısıtlaması uygulamamasıdır. ttl değerinin 0 olması, hemen teslim edilemeyen mesajların silineceği anlamına gelir. Ancak bu tür mesajlar hiçbir zaman depolanmadığından bildirim mesajları göndermek için en iyi gecikme süresini sağlar.
Aşağıda, ttl içeren bir istek örneği verilmiştir:
{
"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"
}
}
}
}
Mesajın ömrü
Bir uygulama sunucusu FCM adresine mesaj gönderip bir mesaj kimliği aldığında bu, mesajın cihaza teslim edildiği anlamına gelmez. Bunun yerine, iletinin teslim için kabul edildiği anlamına gelir. Mesajın ne zaman teslim edileceği birçok faktöre bağlıdır.
Cihaz bağlı ancak Doze modundaysa düşük öncelikli bir mesaj, cihaz Doze modundan çıkana kadar FCM tarafından saklanır. collapse_key ayarlanmışsa ve aynı daraltma anahtarı ile kayıt jetonuna sahip, teslim edilmeyi bekleyen mevcut bir mesaj varsa eski mesaj silinir ve yeni mesaj onun yerini alır. Ancak daraltma anahtarı ayarlanmamışsa hem yeni hem de eski mesajlar daha sonra teslim edilmek üzere saklanır.
Cihaz FCM hizmetine bağlı değilse mesaj, bağlantı kurulana kadar saklanır. Bağlantı kurulduğunda FCM, bekleyen tüm mesajları cihaza teslim eder. Cihaz bir daha hiç bağlanmazsa mesajın zaman aşımı süresi dolar ve FCM depolama alanından silinir. ttl işareti ayarlanmadığı sürece varsayılan zaman aşımı dört haftadır. FCM, cihaza mesaj göndermeye çalıştığında uygulama kaldırılmışsa FCM bu mesajı hemen siler ve kayıt jetonunu geçersiz kılar. Bu cihaza mesaj göndermek için yapılacak sonraki denemeler NotRegistered hatasıyla sonuçlanır.
Android cihazlarda, cihaz bir aydan uzun süredir FCM hizmetine bağlanmadıysa FCM mesajı kabul eder ancak hemen siler. Cihaz, gönderdiğiniz son veri mesajından sonraki dört hafta içinde bağlanırsa istemci uygulamanız onDeletedMessages() geri çağırma işlevini alır.
Android veya Apple platformlarında mesajların teslimi hakkında daha fazla bilgi edinmek için FCM raporlama kontrol panelini kullanabilirsiniz. Bu kontrol paneli, Apple ve Android cihazlarda gönderilen ve açılan mesajların sayısını ve Android uygulamaları için gösterim verilerini kaydeder.