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 czas pracy na baterii.
W takich przypadkach FCM przechowuje wiadomość i dostarcza ją, gdy tylko jest to możliwe. W większości przypadków jest to wystarczające, 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 przeglądarce możesz określić maksymalny czas ważności wiadomości. Wartość musi być czasem trwania od 0 do 2 419 200 sekund (28 dni) i odpowiada maksymalnemu okresowi, przez który FCM przechowuje wiadomość i próbuje ją dostarczyć. Domyślnie prośby, które nie zawierają tego pola, są ważne przez maksymalnie 4 tygodnie.
W iOS możesz ustawić nagłówek apns-expiration w obiekcie ApnsConfig. Więcej informacji znajdziesz w dokumentacji Apple dotyczącej wysyłania próśb o powiadomienia do APNs.
Oto kilka możliwych zastosowań tej funkcji:
- Połączenia przychodzące na czacie wideo
- Zdarzenia związane z wygasającymi zaproszeniami
- Wydarzenia w Kalendarzu
Kolejną zaletą określania czasu życia wiadomości jest to, że FCM nie stosuje ograniczania przepustowości wiadomości zwijanych do wiadomości o czasie życia wynoszącym 0 sekund. Pamiętaj, że wartość ttl równa 0 oznacza, że wiadomości, których nie można dostarczyć natychmiast, są odrzucane. Ponieważ jednak takie wiadomości nigdy nie są przechowywane, zapewnia to najmniejsze opóźnienie w wysyłaniu powiadomień.
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 identyfikator wiadomości, nie oznacza to, że wiadomość została już dostarczona na urządzenie. Oznacza to, że został on zaakceptowany do wyświetlania. To, kiedy wiadomość zostanie dostarczona, zależy od wielu czynników.
Jeśli urządzenie jest połączone, ale znajduje się w trybie uśpienia, wiadomość o niskim priorytecie jest przechowywana przez FCM, dopóki urządzenie nie wyjdzie z trybu uśpienia. Jeśli parametr collapse_key jest ustawiony i istnieje wiadomość z tym samym kluczem zwijania i tokenem rejestracji, która oczekuje na dostarczenie, stara wiadomość zostanie odrzucona, a jej miejsce zajmie nowa. 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 siecią FCM, wiadomość jest przechowywana do momentu nawiązania połączenia. Po nawiązaniu połączenia FCM dostarcza na urządzenie wszystkie oczekujące wiadomości. Jeśli urządzenie nie połączy się ponownie, wiadomość ostatecznie wygaśnie i zostanie usunięta z pamięci FCM. Domyślny limit czasu to 4 tygodnie, chyba że ustawiono flagę ttl. Jeśli aplikacja została odinstalowana, gdy usługa 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 spowodują błąd NotRegistered.
Jeśli urządzenie z Androidem nie połączyło się z FCM przez ponad miesiąc, FCM nadal akceptuje wiadomość, ale natychmiast ją odrzuca. Jeśli urządzenie połączy się w ciągu 4 tygodni od ostatniej wysłanej do niego wiadomości z danymi, aplikacja kliencka otrzyma wywołanie zwrotne onDeletedMessages().
Aby uzyskać więcej statystyk o dostarczaniu wiadomości na platformach Android lub Apple, możesz użyć panelu raportowania FCM, który rejestruje liczbę wiadomości wysłanych i otwartych na urządzeniach Apple i z Androidem, a także dane o wyświetleniach w aplikacjach na Androida.