İletinin ömrünü ayarlama

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, mesajı 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ü belirtebilirsiniz. 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 üstbilgisini ApnsConfig nesnesinde ayarlayabilirsiniz. Daha fazla bilgi için Apple'ın APNs'ye bildirim isteği gönderme ile ilgili belgelerine bakın.

Bu özelliğin olası kullanım alanlarından bazıları şunlardır:

  • Gelen görüntülü sohbet aramaları
  • Süresi dolan davet etkinlikleri
  • Takvim etkinlikleri

Bir mesajın geçerlilik süresini belirtmenin bir diğer avantajı da FCM'nın, geçerlilik süresi 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 iletiler hiçbir zaman depolanmadığından bildirim iletilerinin gönderilmesi 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 mesaj kimliği aldığında, mesajın cihaza zaten teslim edildiği anlamına gelmez. Bunun yerine, 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 uyku modundaysa cihaz uyku modundan çıkana kadar düşük öncelikli mesaj FCM tarafından saklanı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 yerine geçer. 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ı 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. İleride 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 iletilerin 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 ileti sayısını Android uygulamalarının gösterim verileriyle birlikte kaydeder.