FCM zwykle dostarcza wiadomości natychmiast po ich wysłaniu. Nie zawsze jest to jednak możliwe. Na przykład urządzenie może być niedostępne lub FCM może celowo opóźniać wiadomości, aby zapobiec nadmiernemu zużyciu zasobów przez aplikację i negatywnemu wpływowi na żywotność baterii.
W takich przypadkach FCM przechowuje wiadomość i dostarcza ją tak szybko, jak to możliwe. W większości przypadków nie jest to problem, ale niektóre aplikacje wymagają wysyłania powiadomień bez opóźnień. Może to być na przykład powiadomienie o połączeniu przychodzącym lub zaproszenie na wydarzenie.
Na Androidzie i w internecie możesz określić maksymalny czas życia wiadomości. Wartość musi być czasem trwania od 0 do 2 419 200 sekund (28 dni) i odpowiada maksymalnemu okresowi, w którym FCM przechowuje i próbuje dostarczyć wiadomość. Domyślnie żądania, które nie zawierają tego pola, trwają maksymalnie 4 tygodnie.
W iOS możesz ustawić nagłówek apns-expiration
w obiekcie ApnsConfig. Więcej informacji znajdziesz w dokumentacji Apple na temat wysyłania żądań powiadomień do APNs.
Oto kilka możliwych zastosowań tej funkcji:
- Odbieranie przychodzących połączeń wideo
- Wygasające wydarzenia z zaproszeniami
- Wydarzenia w kalendarzu
Kolejną zaletą określania czasu życia wiadomości jest to, że FCM nie stosuje ograniczenia liczby zwijanych wiadomości do wiadomości z wartością czasu życia wynoszącą 0 sekund. Pamiętaj, że wartość ttl
0 oznacza, że wiadomości, których nie można dostarczyć od razu, są odrzucane. Jednak ponieważ takie wiadomości nigdy nie są przechowywane, zapewnia to najmniejsze opóźnienie w wysyłaniu wiadomości z powiadomieniami.
Oto przykład żądania, które zawiera parametr 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"
}
}
}
}
Cykl życia wiadomości
Gdy serwer aplikacji opublikuje wiadomość w FCM i otrzyma z powrotem identyfikator wiadomości, nie oznacza to, że wiadomość została już dostarczona na urządzenie. Oznacza to, że została zaakceptowana do dostarczenia. Czas dostarczenia wiadomości zależy od wielu czynników.
Jeśli urządzenie jest połączone, ale w trybie uśpienia, wiadomość o niskim priorytecie jest przechowywana przez FCM do momentu, aż urządzenie wyjdzie z tego trybu. Jeśli parametr collapse_key
jest ustawiony i istnieje wiadomość z tym samym kluczem zwijania i tokenem rejestracji oczekująca na dostarczenie, stara wiadomość jest odrzucana, a nowa wiadomość zajmuje jej miejsce. Jeśli jednak klucz zwijania nie jest ustawiony, zarówno nowe, jak i stare wiadomości są przechowywane do późniejszego dostarczenia.
Jeśli urządzenie nie jest połączone z FCM, wiadomość jest przechowywana do momentu nawiązania połączenia. Po nawiązaniu połączenia FCMdostarcza na urządzenie wszystkie oczekujące wiadomości. Jeśli urządzenie nigdy nie zostanie ponownie połączone, wiadomość w końcu wygaśnie i zostanie usunięta z pamięci FCM. Domyślny czas oczekiwania to 4 tygodnie, chyba że ustawiona jest flaga ttl
. Jeśli aplikacja zostanie odinstalowana, gdy FCM próbuje dostarczyć wiadomość na urządzenie, FCM natychmiast odrzuca tę wiadomość i unieważnia token rejestracji. Kolejne próby wysłania wiadomości na to urządzenie będą powodować błąd NotRegistered
.
W przypadku urządzeń z Androidem, jeśli urządzenie nie łączyło się z FCM od ponad miesiąca, FCM nadal akceptuje wiadomość, ale natychmiast ją odrzuca. Jeśli urządzenie połączy się w ciągu 4 tygodni od wysłania ostatniej wiadomości z danymi, aplikacja kliencka otrzyma wywołanie zwrotne onDeletedMessages()
.
Aby uzyskać więcej informacji o dostarczaniu wiadomości na platformach Android i Apple, możesz użyć FCMpanelu raportowania, który rejestruje liczbę wiadomości wysłanych i otwartych na urządzeniach z Androidem i Apple, a także dane o wyświetleniach w aplikacjach na Androida.