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

Masz 2 opcje przypisywania priorytetu wyświetlania wiadomości do aplikacji na Androidzie: normalny 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, 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 priorytet.FCM próbuje dostarczać 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.

Wybieranie 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, przy czym 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. 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ą Android 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ć. Obowiązuje krótkotrwałe zwolnienie z limitów w przypadku przyspieszonych zadań zaplanowanych natychmiast po wysłaniu onMessageReceived FCM o wysokim priorytecie.
  • W przypadku powiadomień o normalnym priorytecie: Zamiast tego uruchom zwykłe WorkRequest za pomocą Android WorkManager. 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 możesz zobaczyć, 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:

  1. Ustaw urządzenie w trybie Doze, korzystając z instrukcji w artykule Testowanie aplikacji w trybie Doze.
  2. 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.
  3. Gdy masz 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 na Androidzie

Wiadomości o wysokim priorytecie na 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, priorytet wiadomości może zostać obniżony do normalnego lub mogą one zostać przekazane do obsługi przez Usługi Google Play.

FCM używa 7 dni zachowania wiadomości, aby określić, czy obniżyć priorytet wiadomości, czy przekazać je do obsługi przez Usługi Google Play. Decyzję 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 lepszej ogólnej obsługi 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 odbieraniem 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 do obsługi 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 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 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 proxy na DENY w obiekcie AndroidNotification.

Pomiar obniżania priorytetu wiadomości na 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 procent wszystkich wiadomości wysyłanych na Androida ma obniżony priorytet. Niektóre wiadomości mogą zostać pominięte w raportach zbiorczych, ale ogólnie powinny one dawać 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 przekazywanych do obsługi wiadomości używaj FCM Aggregate Delivery Data API. ProxyNotificationInsightPercents raportuje 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. Przed wysłaniem 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ą WorkManager, aby wykonać je w tle.