FCM, iletileri 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 geciktiriyor olabilir.
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 veya etkinlik daveti bildirimi.
Android ve web'de mesajları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. Bu alanı içermeyen istekler varsayılan olarak 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
Bir mesajın kullanım ömrünü belirtmenin bir diğer avantajı da FCM'nın, kullanım ömrü değeri 0 saniye olan mesajlara daraltılabilir mesaj sınırlaması uygulamamasıdır. ttl değerinin 0 olmasının, hemen teslim edilemeyen iletilerin silindiği anlamına geldiğini unutmayın. 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"
}
}
}
}
İletinin ö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. İletinin ne zaman teslim edileceği birçok faktöre bağlıdır.
Cihaz bağlı ancak Doz modundaysa cihaz Doz modundan çıkana kadar düşük öncelikli mesajlar 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 gelecekte teslim edilmek üzere saklanır.
Cihaz FCM'ya bağlı değilse mesaj, bağlantı kurulana kadar saklanır. Bağlantı kurulduğunda FCM, bekleyen tüm mesajları cihaza iletir. Cihaz bir daha hiç bağlanmazsa mesajın süresi dolar ve FCM depolama alanından silinir. ttl işareti ayarlanmadığı sürece varsayılan zaman aşımı süresi 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'ya 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ğırmasını 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.