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 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, dostarczanie 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 uruchomić 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. Na wiadomości o wysokim priorytecie przypada nieco więcej czasu niż na 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. W metodzie onMessageReceived nie należy wykonywać
dodatkowych asynchronicznych wywołań sieciowych ani przetwarzać ładunku w osobnym
wątku. 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 adresu 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. Gdy
zastępujesz onMessageReceivedmetodę
, aby sprawdzić, czy powiadomienia są w pełni przetwarzane, postępuj zgodnie z tymi wskazówkami.
- W przypadku powiadomień o wysokim priorytecie: Uruchom
zadanie priorytetowe
za pomocą Android
WorkManager, aby sprawdzić, czy powiadomienie o wysokim priorytecie ma priorytetowy czas przetwarzania i czy jego renderowanie zostało zakończone. Jeśli martwisz się, że w wyniku przetwarzania FCM o wysokim priorytecie wyczerpiesz limity przyspieszonych zadań, 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: Zamiast tego uruchom
zwykłe
WorkRequestza pomocą AndroidWorkManager. 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. Aby zobaczyć, jak ustawić wysoki priorytet, użyj tego przykładowego kodu. 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 przez użytkownika, 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 serwer proxy . 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, przyszłe wiadomości o wysokim priorytecie nie będą miały na to wpływu.
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 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 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 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 powiadomień. Dzieje się tak, ponieważ dane analityczne dotyczące przekazywanych 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 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, ale wiadomości wysyłane przez konsolę Firebase lub starsze interfejsy API nie będą przekazywane. Pamiętaj, że ta funkcja jest obecnie w wersji beta i może ulec zmianie.
Zdecydowanie zalecamy pozostawienie włączonego przekazywania, ponieważ przynosi ono korzyści dla baterii i pamięci urządzenia. Możesz jednak 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 przepływie interfejsu 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 Podczas dostarczania 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 powiadomienia Przekazywane 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 wiadomościach używaj FCM Aggregate Delivery Data API.
ProxyNotificationInsightPercentsraportuje odsetek powiadomień, które zostały pomyślnie przekazane, oraz szczegóły dotyczące wiadomości, których nie można przekazać.
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 urządzeń mobilnych z Androidem 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ą WorkManager, aby wykonać je w tle.