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 iletileri kasıtlı olarak geciktiriyor olabilir.
Bu durumlarda FCM iletiyi saklar ve mümkün olan en kısa sürede teslim eder. Bu durum çoğu durumda sorun teşkil etmese de bazı uygulamaların bildirimleri gecikmeden göndermesi gerekir. Örneğin, gelen arama veya etkinlik daveti bildirimi.
Android ve web'de mesajların maksimum kullanım ömrünü belirleyebilirsiniz. Değer, 0 ile 2.419.200 saniye (28 gün) arasında bir süre olmalıdır ve FCM'nın iletiyi saklayıp teslim etmeye çalıştığı maksimum süreyi ifade eder. Bu alanı içermeyen istekler varsayılan olarak en fazla dört hafta sürer.
iOS'te apns-expiration
başlığını ApnsConfig nesnesinde ayarlayabilirsiniz. Daha fazla bilgi için Apple'ın APNs'ye bildirim isteği gönderme ile ilgili dokümanlarına bakın.
Bu özelliğin olası kullanım alanlarından bazıları şunlardır:
- Gelen görüntülü sohbet aramaları
- Süresi dolan davetiye 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 silineceği anlamına geldiğini unutmayın. Ancak bu tür mesajlar hiçbir zaman depolanmadığı için bildirim mesajları gönderme konusunda 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 kullanım ömrü
Bir uygulama sunucusu FCM adresine ileti gönderip ileti kimliği aldığında, iletinin cihaza zaten teslim edildiği anlamına gelmez. Bu, e-postanın teslimat 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 uyku modundaysa cihaz uyku modundan çıkana kadar düşük öncelikli mesaj FCM tarafından depolanır. collapse_key
ayarlanmışsa ve aynı collapse_key ile kayıt jetonuna sahip, teslim edilmeyi bekleyen mevcut bir ileti varsa eski ileti atılır ve yeni ileti 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 ileti zaman aşımına uğrar 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 ileti teslim etmeye çalıştığında uygulama kaldırılmışsa FCM bu iletiyi hemen siler ve kayıt jetonunu geçersiz kılar. Gelecekte bu cihaza mesaj gönderme girişimleri 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 teslim edilmesiyle ilgili daha fazla bilgi edinmek için FCM raporlama gösterge tablosunu kullanabilirsiniz. Bu gösterge tablosu, Apple ve Android cihazlarda gönderilen ve açılan mesajların sayısını, Android uygulamalarındaki gösterim verileriyle birlikte kaydeder.