W Androidzie masz 2 opcje przypisywania priorytetu wyświetlania wiadomości do aplikacji: normal i wysoki priorytet. Dostarczanie wiadomości o normalnym i wysokim priorytecie działa tak:
Normalny priorytet Jest to domyślny priorytet wiadomości z danymi i powiadomieniami. Wiadomości o normalnym priorytecie są dostarczane natychmiast, gdy urządzenie nie jest w trybie uśpienia. Gdy urządzenie jest w trybie Doze, dostarczenie może być opóźnione, aby oszczędzać baterię, dopóki urządzenie nie wyjdzie z tego trybu. W przypadku wiadomości, które nie są tak pilne, np. powiadomień o nowych e-mailach, synchronizacji interfejsu lub synchronizacji danych aplikacji w tle, wybierz normalny priorytet wyświetlania.
Wysoki priorytetFCM próbuje dostarczyć wiadomości o wysokim priorytecie natychmiast, co pozwala FCM w razie potrzeby wybudzić uśpione urządzenie i przeprowadzić ograniczone przetwarzanie (w tym bardzo ograniczony dostęp do sieci ). Wiadomości o wysokim priorytecie powinny zwykle powodować interakcję użytkownika z aplikacją lub jej powiadomieniami.
Wybór między wiadomościami o wysokim i normalnym priorytecie
Wiadomości o normalnym priorytecie nadają się do ogólnych aktualizacji, ale w przypadku pilnych spraw lub działań, które wymagają natychmiastowego dostarczenia, wybierz wysoki priorytet. Ponieważ na czas dostarczenia wiadomości o normalnym priorytecie może wpływać tryb Doze, ustawienie wysokiego priorytetu dla większości powiadomień widocznych dla użytkownika zapewni ich szybkie dostarczenie. Na przykład powiadomienia takie jak wiadomości na czacie, problemy z kontem lub aktualizacje dotyczące dostawy jedzenia powinny mieć wysoki priorytet.
Przetwarzanie wiadomości o wysokim i normalnym priorytecie
W przypadku wiadomości o wysokim i normalnym priorytecie otrzymanych na urządzeniu z Androidem na przetworzenie ładunku wiadomości w procedurze obsługi onMessageReceived przeznaczonych jest kilka sekund. W przypadku wiadomości o wysokim priorytecie jest to nieco więcej czasu niż w przypadku wiadomości o normalnym priorytecie. Ten czas powinien wystarczyć tylko na natychmiastowe wyświetlenie powiadomienia. Jeśli musisz wykonać dodatkowe czynności, takie jak wczytanie obrazu z pamięci urządzenia lub wywołanie serwerów w celu pobrania dodatkowych treści, musisz wykonać dodatkowe kroki.
Metoda onMessageReceived jest wywoływana w osobnym wątku instancji roboczej. Zgodnie z najlepszymi praktykami ładunek wiadomości należy przetworzyć i natychmiast wyświetlić powiadomienie w metodzie onMessageReceived. Nie należy wykonywać
dodatkowych asynchronicznych wywołań sieciowych ani przetwarzać ładunku w osobnym
wątku w metodzie onMessageReceived. Może to spowodować, że aplikacja znajdzie się poza
prawidłowym cyklem życia procesu
, zanim ładunek zostanie w pełni przetworzony. W takim przypadku możesz zauważyć, że niektóre wysłane wiadomości FCM powodują opóźnione lub brakujące powiadomienia.
Jeśli potrzebujesz dodatkowego czasu na przetworzenie wiadomości, np. na pobranie imageUrl zawartego w ładunku wiadomości, musisz użyć konstrukcji takiej jak WorkManager lub usługa działająca na pierwszym planie, aby wydłużyć cykl życia aplikacji. Podczas zastępowania metody
onMessageReceived należy postępować zgodnie z tymi wskazówkami, aby sprawdzić, czy powiadomienia są w pełni przetwarzane.
- W przypadku powiadomień o wysokim priorytecie: Uruchom
zadanie priorytetowe
za pomocą Androida
WorkManager, aby sprawdzić, czy powiadomienie o wysokim priorytecie ma priorytetowy czas przetwarzania, i czy wyświetlanie powiadomienia zostało zakończone. Jeśli martwisz się, że wyczerpiesz limity przyspieszonych zadań w wyniku przetwarzania FCM o wysokim priorytecie, nie musisz się tym przejmować. Istnieje krótkie zwolnienie z tego obowiązku w przypadku przyspieszonych zadań zaplanowanych natychmiast po wysłaniuonMessageReceivedFCM o wysokim priorytecie. - W przypadku powiadomień o normalnym priorytecie: Uruchom
zwykłe
WorkRequestza pomocą AndroidaWorkManagerzamiast tego. Dzięki temu dodatkowa praca wymagana do przetworzenia powiadomienia zostanie ostatecznie wykonana bez wykorzystywania priorytetowego przetwarzania i powodowania niepotrzebnego zużycia baterii.
Ustawianie priorytetu wiadomości
Powiadomienia możesz wysyłać do użytkowników za pomocą Admin SDK, FCM REST API i Firebase konsoli. Aby zmienić ustawienie priorytetu w Admin SDK i interfejsie FCM REST API, musisz zaktualizować ładunek JSON wiadomości. W tym przykładzie kodu dowiesz się, jak ustawić wysoki priorytet. W przypadku powiadomień wysyłanych z konsoli ustawianie pól powiadomień specyficznych dla Androida nie jest obsługiwane.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
Testowanie powiadomień o wysokim priorytecie w trybie Doze
Aby mieć pewność, że powiadomienia o wysokim priorytecie są prawidłowo odbierane i przetwarzane, gdy użytkownik je otrzyma, wykonaj te instrukcje, aby przetestować powiadomienia:
- Ustaw urządzenie w trybie Doze, korzystając z instrukcji w artykule Testowanie aplikacji w trybie Doze.
- Uzyskaj dostęp do tokena rejestracji FCM z aplikacji na urządzeniu testowym. Więcej informacji o tym, jak uzyskać dostęp do tokena, znajdziesz w artykule Wysyłanie wiadomości testowej do aplikacji działającej w tle.
- Gdy masz już token FCM, wyślij powiadomienie o wysokim priorytecie na urządzenie testowe, używając kodu wysyłającego powiadomienia FCM lub polecenia cURL z parametrami konfiguracji pasującymi do powiadomienia o wysokim priorytecie.
Obniżanie priorytetu o wysokim priorytecie FCM w Androidzie
Wiadomości o wysokim priorytecie w Androidzie są przeznaczone do treści widocznych dla użytkownika, które wymagają szybkiego dostarczenia, i powinny powodować wyświetlanie powiadomień dla użytkownika. Jeśli FCM wykryje wzorzec, w którym wiadomości nie powodują wyświetlania powiadomień dla użytkownika, ich priorytet może zostać obniżony do normalnego lub mogą zostać przekazane do obsługi przez Usługi Google Play.
FCM używa danych o zachowaniu wiadomości z ostatnich 7 dni , aby określić, czy obniżyć priorytet wiadomości, czy przekazać je do obsługi przez Usługi Google Play . Decyzję tę podejmuje niezależnie dla każdej instancji aplikacji . Jeśli w odpowiedzi na wiadomości o wysokim priorytecie powiadomienia są wyświetlane w sposób widoczny dla użytkownika, nie wpłynie to na przyszłe wiadomości o wysokim priorytecie.
Przekazywanie powiadomień do obsługi przez Usługi Google Play
Wiadomości z powiadomieniami o wysokim priorytecie, które spełniają określone kryteria, są przekazywane do obsługi przez Usługi Google Play zamiast obniżania ich priorytetu. Oznacza to, że powiadomienia są wyświetlane przez Usługi Google Play w imieniu aplikacji bez konieczności jej uruchamiania. Ma to na celu zapewnienie lepszego ogólnego komfortu użytkowania na urządzeniach z Androidem.
Pamiętaj, że przekazywane do obsługi wiadomości z powiadomieniami wprowadzają zmiany w sposobie raportowania danych analitycznych związanych z otrzymywaniem wiadomości:
- Aby można było raportować dane analityczne dotyczące przekazywanych do obsługi powiadomień, aplikacja musi używać pakietu FCM SDK w wersji 24.0.0 lub nowszej.
- Możesz zauważyć opóźnienia lub spadki liczby otrzymanych wiadomości w porównaniu z liczbą przed wprowadzeniem przekazywanych do obsługi powiadomień. Dzieje się tak, ponieważ dane analityczne dotyczące przekazywanych do obsługi powiadomień są raportowane dopiero po uruchomieniu aplikacji i mogą nie być raportowane wcale, jeśli powiadomienie nie spowoduje otwarcia aplikacji.
Przekazywanie wiadomości z powiadomieniami do obsługi w ten sposób jest domyślnym działaniem w przypadku aplikacji korzystających z Androida Q+ i Usług Google Play w wersji 19054000 lub nowszej. Wiadomości wysyłane przez interfejs HTTP v1 API są przekazywane do obsługi, ale wiadomości wysyłane przez konsolę Firebase lub starsze interfejsy API nie będą przekazywane do obsługi. Pamiętaj, że ta funkcja jest obecnie w wersji beta i może ulec zmianie.
Zdecydowanie zalecamy pozostawienie włączonego przekazywania do obsługi ze względu na korzyści dla baterii i pamięci urządzenia, ale możesz zrezygnować z tego działania w dowolny z tych sposobów:
- Na poziomie aplikacji: w pliku manifestu aplikacji dodaj dyrektywę
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>. - Na poziomie instancji aplikacji: w przypadku instancji aplikacji ustaw
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>w interfejsie aplikacji w zależności od konkretnego przypadku użycia. - Na poziomie poszczególnych wiadomości: w przypadku żądania wysłania ustaw klucz
proxynaDENYw obiekcieAndroidNotification.
Pomiar obniżania priorytetu wiadomości w Androidzie
Poszczególne wiadomości Po dostarczeniu możesz sprawdzić, czy priorytet poszczególnej wiadomości został obniżony, porównując jej dostarczony priorytet (z getPriority()) z pierwotnym priorytetem (z getOriginalPriority()).
Wszystkie wiadomości Interfejs FCM Aggregate Delivery Data API może raportować, jaki odsetek wszystkich wiadomości wysyłanych do Androida ma obniżony priorytet. Niektóre wiadomości mogą zostać pominięte w raportach zbiorczych, ale ogólnie powinny one przedstawiać globalny obraz wskaźników obniżania priorytetu wiadomości. Więcej informacji i przykładowy kod do wysyłania zapytań do interfejsu API znajdziesz w artykule o zbiorczych danych o dostarczaniu. Możesz też zapoznać się z nim w eksploratorze interfejsu API.
Przekazywane do obsługi powiadomienia Przekazywane do obsługi powiadomienia nie będą uwzględniane w bieżących statystykach dostarczania FCM ani GA, dlatego możesz zauważyć spadek statystyk dostarczania powiadomień nawet o 15%. Do raportowania o przekazywanych do obsługi wiadomościach używaj FCM Aggregate Delivery Data API.
ProxyNotificationInsightPercentsraportuje odsetek powiadomień, które zostały pomyślnie przekazane do obsługi, oraz szczegóły dotyczące wiadomości, których nie można przekazać do obsługi.
Rozwiązywanie problemów z opóźnieniami powiadomień
Sprawdź, czy w instancji aplikacji są włączone powiadomienia. Jeśli użytkownik wyłączy zgodę na wyświetlanie powiadomień w Twojej aplikacji, żadne powiadomienia nie będą publikowane, a priorytet wiadomości zostanie obniżony. Zanim wyślesz wiadomości o wysokim priorytecie do instancji aplikacji, sprawdź, czy powiadomienia są włączone.
Podczas przetwarzania powiadomienia unikaj wykonywania dodatkowych wywołań sieciowych. Ponieważ niewielka część użytkowników Androida korzysta z sieci o wysokim opóźnieniu, przed wyświetleniem powiadomienia unikaj otwierania połączenia z serwerami. Wywoływanie serwera przed upływem dozwolonego czasu przetwarzania może być ryzykowne dla użytkowników korzystających z sieci o wysokim opóźnieniu.
Zamiast tego umieść treść powiadomienia w wiadomości FCM i wyświetl ją natychmiast. Jeśli musisz zsynchronizować dodatkowe treści w aplikacji na Androidzie, możesz zaplanować zadanie za pomocą WorkManagera, aby wykonać je w tle.