Ustawianie priorytetu wiadomości na Androidzie i zarządzanie nim

Na Androidzie masz 2 opcje przypisywania priorytetu wyświetlania wiadomościom wysyłanym do aplikacji: normalny i wysoki. Dostarczanie wiadomości o normalnym i wysokim priorytecie działa tak:

  • Normalny priorytet – to domyślny priorytet danych i wiadomości z powiadomieniami. Wiadomości o normalnym priorytecie są dostarczane natychmiast, gdy urządzenie nie jest w trybie uśpienia. Gdy urządzenie jest w trybie uśpienia, dostarczanie może być opóźnione, aby oszczędzać baterię, dopóki urządzenie nie wyjdzie z tego trybu. W przypadku mniej pilnych wiadomości, takich jak powiadomienia o nowych e-mailach, synchronizacja interfejsu czy synchronizacja danych aplikacji w tle, wybierz normalny priorytet dostarczania.

  • Wysoki priorytetFCM – próby natychmiastowego dostarczania wiadomości o wysokim priorytecie, co umożliwia FCM wybudzanie uśpionego urządzenia w razie potrzeby i przeprowadzanie ograniczonego przetwarzania (w tym bardzo ograniczonego dostępu do sieci). Wiadomości o wysokim priorytecie powinny zwykle prowadzić do interakcji użytkownika z aplikacją lub jej powiadomieniami.

Decyduj, czy wiadomość ma mieć wysoki czy normalny priorytet

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. Na czas dostarczania wiadomości o normalnym priorytecie może wpływać tryb uśpienia, dlatego ustawienie większości powiadomień widocznych dla użytkownika jako powiadomień o wysokim priorytecie zapewni ich szybkie dostarczanie. Na przykład powiadomienia takie jak wiadomości na czacie, problemy z kontem czy 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 otrzymywanych na urządzeniu z Androidem na przetworzenie ładunku wiadomości w onMessageReceivedobsłudzeonMessageReceived przydzielanych jest kilka sekund. Wiadomości o wysokim priorytecie mają nieco więcej czasu niż te 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 zebrania dodatkowych treści, musisz wykonać dodatkowe kroki.

Metoda onMessageReceived jest wywoływana w osobnym wątku instancji roboczej. Zgodnie ze sprawdzoną metodą należy przetworzyć ładunek wiadomości 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 niektóre wysyłane wiadomości FCM mogą powodować opóźnienia w wyświetlaniu powiadomień lub ich brak.

Jeśli potrzebujesz więcej czasu na przetworzenie wiadomości, np. na pobranie elementu imageUrl zawartego w ładunku wiadomości, musisz użyć konstrukcji takiej jak WorkManager lub usługa na pierwszym planie, aby wydłużyć cykl życia aplikacji. Jeśli chcesz zastąpić metodę onMessageReceived, aby sprawdzić, czy powiadomienia są w pełni przetwarzane, postępuj zgodnie z tymi wskazówkami.

  • W przypadku powiadomień o wysokim priorytecie: rozpocznij zadanie priorytetowe za pomocą interfejsu Android WorkManager, aby sprawdzić, czy powiadomienie o wysokim priorytecie ma przyznany czas przetwarzania o wyższym priorytecie, i czy renderowanie powiadomienia zostało ukończone. Jeśli obawiasz się, że w wyniku przetwarzania FCM o wysokim priorytecie wyczerpiesz limity zadań przyspieszonych, nie musisz się tym martwić. Obowiązuje krótkie zwolnienie w przypadku przyspieszonych zadań zaplanowanych natychmiast po wysłaniu komunikatu FCM o wysokim priorytecie onMessageReceived.
  • W przypadku powiadomień o normalnym priorytecie: rozpocznij zwykłeWorkRequest za pomocą interfejsu Android WorkManager. Dzięki temu sprawdzisz, czy dodatkowa praca wymagana do przetworzenia powiadomienia zostanie ostatecznie wykonana bez wykorzystania przetwarzania priorytetowego i powodowania niepotrzebnych problemów z wykorzystaniem baterii.

Określanie priorytetów wiadomości

Powiadomienia możesz wysyłać do użytkowników za pomocą Admin SDK, interfejsu API REST FCM i konsoli Firebase. Aby zmienić ustawienie priorytetu z Admin SDK i interfejsu FCM REST API, musisz zaktualizować ładunek JSON wiadomości. Aby dowiedzieć się, jak ustawić wysoki priorytet, możesz użyć 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 uśpienia

Aby mieć pewność, że powiadomienia o wysokim priorytecie są prawidłowo odbierane i przetwarzane, gdy docierają do użytkownika, wykonaj te instrukcje, aby przetestować powiadomienia:

  1. Ustaw urządzenie w trybie uśpienia, korzystając z instrukcji w artykule Testowanie aplikacji w trybie uśpienia.
  2. Uzyskaj dostęp do tokena rejestracyjnego 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.
  3. Gdy uzyskasz token FCM, wyślij powiadomienie o wysokim priorytecie na urządzenie testowe, używając kodu wysyłania powiadomień FCM lub polecenia cURL z parametrami konfiguracji pasującymi do powiadomienia o wysokim priorytecie.

Obniżanie priorytetu FCM na Androidzie

Wiadomości o wysokim priorytecie na Androidzie są przeznaczone dla treści, które wymagają natychmiastowej uwagi użytkownika i powinny skutkować wyświetlaniem powiadomień. Jeśli FCM wykryje wzorzec, w którym wiadomości nie powodują wyświetlania powiadomień użytkownikom, może obniżyć priorytet Twoich wiadomości do normalnego lub przekazać ich obsługę do usług Google Play.

FCM wykorzystuje 7 dni zachowań związanych z wiadomościami, aby określić, czy obniżyć priorytet wiadomości lub przekierować je 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, nie wpłynie to na Twoje przyszłe wiadomości o wysokim priorytecie.

Przekazywanie powiadomień za pomocą Usług Google Play

Wiadomości z powiadomieniami o wysokim priorytecie, które spełniają określone kryteria, są przekazywane przez usługi Google Play zamiast być traktowane jako mniej ważne. Oznacza to, że powiadomienia są wyświetlane przez usługi Google Play w imieniu aplikacji bez konieczności jej uruchamiania. Ma to na celu poprawę ogólnego komfortu użytkowników urządzeń z Androidem.

Pamiętaj, że wiadomości z powiadomieniami przekazywanymi przez serwer proxy wprowadzają zmiany w sposobie raportowania danych analitycznych związanych z otrzymywanymi wiadomościami:

  • Aby można było raportować dane analityczne dotyczące powiadomień przekazywanych przez serwer proxy, aplikacja musi korzystać z pakietu FCM SDK w wersji 24.0.0 lub nowszej.
  • Możesz zauważyć opóźnienia lub spadki w liczbie otrzymywanych wiadomości w porównaniu z liczbą sprzed wprowadzenia powiadomień proxy. Dzieje się tak, ponieważ statystyki dotyczące powiadomień przekazywanych przez serwer proxy są raportowane dopiero po uruchomieniu aplikacji i mogą nie być raportowane wcale, jeśli powiadomienie nie spowoduje otwarcia aplikacji.

Przekazywanie powiadomień 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 przez serwer proxy, ale wiadomości wysyłane przez konsolę Firebase lub starsze interfejsy API nie będą przekazywane przez serwer proxy. Pamiętaj, że ta funkcja jest obecnie w wersji beta i może ulec zmianie.

Zdecydowanie zalecamy pozostawienie delegowania włączonego ze względu na korzyści dla baterii i pamięci urządzenia. Możesz jednak zrezygnować z tego zachowania w jeden 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"/>.
  • W przypadku 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.
  • W przypadku poszczególnych wiadomości: w obiekcie AndroidNotification ustaw klucz proxy na DENY w żądaniu wysłania.

Pomiar obniżania priorytetu wiadomości na urządzeniach z Androidem

  • Wiadomości indywidualne Po dostarczeniu możesz sprawdzić, czy dana wiadomość została obniżona w rankingu, porównując jej priorytet dostarczenia uzyskany z funkcji getPriority() z jej pierwotnym priorytetem uzyskanym z funkcji getOriginalPriority().

  • Wszystkie wiadomości. FCMInterfejs Aggregate Delivery Data API może raportować, jaki odsetek wszystkich wiadomości wysyłanych na urządzenia z Androidem jest traktowany priorytetowo. Niektóre wiadomości mogą być pomijane w raportach z zagregowanymi danymi, ale ogólnie powinny one dawać globalny obraz współczynników obniżania priorytetu wiadomości. Więcej informacji i przykładowy kod do wysyłania zapytań do interfejsu API znajdziesz w artykule o zagregowanych danych o dostawie. Możesz też zapoznać się z nim w eksploratorze interfejsu API.

  • Powiadomienia w zastępstwie Powiadomienia przekazywane przez serwer proxy nie będą uwzględniane w bieżących wskaźnikach dostarczania FCM ani GA, więc możesz zauważyć spadek wskaźników dostarczania powiadomień nawet o 15%. Do raportowania o wiadomościach przekazywanych przez serwer proxy używaj FCM interfejsu Aggregate Delivery Data API. ProxyNotificationInsightPercents zawiera raport o odsetku powiadomień, które zostały pomyślnie przekazane przez serwer proxy, a także szczegółowe informacje o wiadomościach, których nie można przekazać przez serwer proxy.

Rozwiązywanie problemów z opóźnieniami w powiadomieniach

  • 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 Twoje wiadomości będą miały niższy priorytet. Zanim wyślesz wiadomości o wysokim priorytecie do instancji aplikacji, sprawdź, czy powiadomienia są włączone.

  • Unikaj wykonywania dodatkowych połączeń sieciowych podczas przetwarzania powiadomienia. Niewielka część użytkowników urządzeń mobilnych z Androidem korzysta z sieci o dużych opóźnieniach, dlatego 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 w sieciach o dużych opóźnieniach.

    Zamiast tego umieść treść powiadomienia w wiadomości FCM i wyświetl ją od razu. Jeśli musisz zsynchronizować dodatkowe treści w aplikacji na Androidzie, możesz zaplanować zadanie za pomocą WorkManagera, aby wykonać je w tle.