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

Masz 2 opcje przypisywania priorytetu wyświetlania wiadomościom przesyłanym do aplikacji na Androidzie: priorytet normalny i wysoki. Dostarczanie wiadomości o normalnym i wysokim priorytecie działa w ten sposób:

  • 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 drzemki, dostarczenie może zostać opóźnione, aby oszczędzać baterię, dopóki urządzenie nie wyjdzie z tego trybu. W przypadku wiadomości, które nie są pilne, takich jak powiadomienia o nowych e-mailach, synchronizacja interfejsu czy synchronizacja danych aplikacji w tle, wybierz normalny priorytet wyświetlania.

  • Wysoki priorytetFCM próbuje natychmiast dostarczyć wiadomości o wysokim priorytecie, umożliwiając FCM wybudzenie uśpionego urządzenia w razie potrzeby i wykonanie pewnych ograniczonych operacji (w tym bardzo ograniczonego dostępu 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 są odpowiednie do ogólnych aktualizacji, ale wybierz wysoki priorytet, gdy chcesz zapewnić natychmiastowe dostarczenie w przypadku pilnych spraw lub działań. Na czas dostarczania wiadomości o normalnym priorytecie może wpływać tryb drzemki, dlatego ustawienie dla większości powiadomień widocznych dla użytkownika wysokiego priorytetu zapewni ich szybkie dostarczanie. Na przykład powiadomienia o wiadomościach na czacie, problemach z kontem czy dostawie jedzenia powinny mieć wysoki priorytet.

Przetwarzanie wiadomości o wysokim i normalnym priorytecie

W przypadku wiadomości o wysokim i normalnym priorytecie odebranych na urządzeniu z Androidem na przetworzenie ładunku wiadomości w module obsługi onMessageReceived jest przeznaczonych kilka sekund, przy czym na wiadomości o wysokim priorytecie przeznacza się nieco więcej czasu niż na wiadomości o normalnym priorytecie. Ten czas powinien być wystarczająco długi, aby natychmiast wyrenderować powiadomienie. 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. Nie należy wykonywać dodatkowych asynchronicznych wywołań sieciowych ani przetwarzać ładunku w osobnym wątku w metodzie onMessageReceived, ponieważ 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 lub brak powiadomień.

Jeśli potrzebujesz dodatkowego czasu na przetworzenie wiadomości, na przykład na pobranie elementu imageUrl zawartego w ładunku wiadomości, musisz użyć konstrukcji takiej jak WorkManager lub usługi na pierwszym planie, aby wydłużyć cykl życia aplikacji. Gdy zastępujesz metodę onMessageReceived, postępuj zgodnie z tymi wskazówkami, aby mieć pewność, że powiadomienia są w pełni przetwarzane.

  • W przypadku powiadomień o wysokim priorytecie: rozpocznij zadanie priorytetowe za pomocą interfejsu WorkManager na Androidzie, aby sprawdzić, czy powiadomienie o wysokim priorytecie ma priorytetowy czas przetwarzania i czy renderowanie powiadomienia zostało ukończone. Dobra wiadomość jest taka, że jeśli obawiasz się wyczerpania limitów zadań priorytetowych w wyniku przetwarzania FCM o wysokim priorytecie, nie musisz się tym martwić. Istnieje krótkie odstępstwo w przypadku zadań priorytetowych zaplanowanych natychmiast po wysłaniu onMessageReceived FCM o wysokim priorytecie.
  • W przypadku powiadomień o normalnym priorytecie: rozpocznij zwykłą sesję WorkRequest, używając WorkManager na Androidzie. Dzięki temu dodatkowe zadania wymagane do przetworzenia powiadomienia zostaną ostatecznie wykonane bez korzystania z priorytetowego przetwarzania i powodowania niepotrzebnych problemów z użyciem baterii.

Ustawianie priorytetu 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 w Admin SDK i interfejsie FCM REST API, musisz zaktualizować ładunek JSON wiadomości. Poniższy przykładowy kod pokazuje, jak ustawić wysoki priorytet. W przypadku powiadomień wysyłanych z konsoli ustawianie pól powiadomień na 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 upewnić się, że powiadomienia o wysokim priorytecie są prawidłowo odbierane i przetwarzane, gdy dotrą do użytkownika, wykonaj te czynności, aby przetestować powiadomienia:

  1. Ustaw urządzenie w trybie uśpienia, postępując zgodnie z instrukcjami podanymi w artykule Testowanie aplikacji w trybie uśpienia.
  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 już token FCM, wyślij powiadomienie o wysokim priorytecie na urządzenie testowe, używając kodu wysyłania powiadomień FCM lub polecenia cURL, które ma parametry konfiguracji pasujące do powiadomienia o wysokim priorytecie.

Obniżenie priorytetu powiadomień o wysokim priorytecie (FCM) na Androidzie

Wiadomości o wysokim priorytecie na Androidzie są przeznaczone do przesyłania treści, które są widoczne dla użytkownika i wymagają szybkiej reakcji. Powinny one 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, może obniżyć priorytet wiadomości do normalnego lub przekazać je do obsługi przez Usługi Google Play.

FCM określa, czy obniżyć priorytet wiadomości lub przekazać je przez serwer proxy, na podstawie zachowania wiadomości z 7 dni. Robi to 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 będzie to miało wpływu na 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, a nie 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 zapewnienie lepszych wrażeń użytkownikom urządzeń z Androidem.

Pamiętaj, że wiadomości z powiadomieniami przekazywane przez serwer proxy wprowadzają zmiany w sposobie raportowania statystyk dotyczących otrzymywanych wiadomości:

  • Aby można było raportować statystyki powiadomień przekazywanych przez serwer proxy, aplikacja musi używać pakietu FCM SDK w wersji 24.0.0 lub nowszej.
  • Możesz zauważyć opóźnienia lub spadki liczby otrzymywanych wiadomości w porównaniu z liczbą przed wprowadzeniem powiadomień przez serwer proxy. Dzieje się tak, ponieważ statystyki 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 aplikacji korzystających z Androida Q lub nowszego 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, ponieważ przynosi ono korzyści w zakresie baterii i pamięci urządzenia. Możesz jednak zrezygnować z tego zachowania na 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"/>.
  • Na poziomie instancji aplikacji: w przypadku instancji aplikacji ustaw fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> w procesie interfejsu aplikacji, w zależności od konkretnego przypadku użycia.
  • Dla poszczególnych wiadomości: ustaw klucz proxy na wartość DENY w obiekcie AndroidNotification w żądaniu wysłania.

Pomiar obniżania priorytetu wiadomości na Androidzie

  • Wiadomości indywidualne. Po dostarczeniu możesz określić, czy priorytet poszczególnych wiadomości został obniżony, porównując priorytet wyświetlania z getPriority() z pierwotnym priorytetem z getOriginalPriority().

  • Wszystkie wiadomości. Interfejs API danych o zbiorczym dostarczaniu FCM może raportować, jaki odsetek wszystkich wiadomości wysyłanych na Androida ma obniżony priorytet. Niektóre wiadomości mogą zostać pominięte w raportach danych zbiorczych, 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 wyświetlaniu. Możesz też skorzystać z APIs Explorer.

  • Powiadomienia przekazywane przez serwer proxy. Powiadomienia przekazywane przez serwer proxy nie będą uwzględniane w bieżących danych FCM ani GA dotyczących dostarczania, więc możesz zauważyć spadek tych danych nawet o 15%. Aby generować raporty o wiadomościach przekazywanych przez serwer proxy, użyj interfejsu FCM Aggregate Delivery Data API. ProxyNotificationInsightPercents podaje odsetek powiadomień, które udało się przekazać przez serwer proxy, oraz szczegółowe informacje o wiadomościach, których nie udało się przekazać.

Rozwiązywanie problemów z opóźnieniami powiadomień

  • Upewnij się, że 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ą się wyświetlać, co spowoduje obniżenie priorytetu Twoich wiadomości. Przed wysłaniem wiadomości o wysokim priorytecie do instancji aplikacji sprawdź, czy powiadomienia są włączone.

  • Unikaj wykonywania dodatkowych wywołań sieciowych podczas przetwarzania powiadomienia. Niewielka część użytkowników urządzeń mobilnych z Androidem korzysta z sieci o wysokim opóźnieniu, dlatego unikaj otwierania połączenia z serwerami przed wyświetleniem powiadomienia. Wywołanie zwrotne do serwera przed upływem dozwolonego czasu przetwarzania może być ryzykowne dla użytkowników w sieciach o dużym opóźnieniu.

    Zamiast tego umieść treść powiadomienia w wiadomości FCM i wyświetl ją natychmiast. Jeśli chcesz zsynchronizować dodatkowe treści w aplikacji na Androidzie, możesz zaplanować zadanie za pomocą WorkManagera, aby obsłużyć je w tle.