Ustawianie priorytetu wiadomości i zarządzanie nim

Na Androidzie masz 2 opcje przypisywania priorytetu dostarczania wiadomości następnych: normalny i wysoki priorytet. Dostarczanie wiadomości o normalnym i wysokim priorytecie działa w ten sposób:

  • Normalny priorytet. Jest to domyślny priorytet dla danych i powiadomień. Wiadomości o normalnym priorytecie są dostarczane natychmiast, gdy urządzenie nie jest w stanie uśpienia. Gdy urządzenie jest w trybie Doze, przesyłanie może zostać opóźnione, aby oszczędzać baterię, dopóki urządzenie nie wyjdzie z trybu Doze. 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 przesyłania.

  • Wysoki priorytet.FCM próbuje natychmiast dostarczać wiadomości o wysokim priorytecie, co pozwala FCM w razie potrzeby aktywować uśpione urządzenie i przeprowadzić ograniczone przetwarzanie (w tym bardzo ograniczony dostęp do sieci). Wiadomości o wysokim priorytecie powinny zazwyczaj prowadzić do interakcji użytkownika z aplikacją lub jej powiadomieniami.

Decydowanie, czy wiadomości mają mieć wysoki czy normalny priorytet

Wiadomości o normalnym priorytecie są odpowiednie do ogólnych aktualizacji, ale jeśli chcesz mieć pewność, że pilne sprawy lub działania zostaną dostarczone natychmiast, wybierz wysoki priorytet. Czas dostarczania wiadomości o normalnym priorytecie może być zależny od trybu Doze. Ustawienie priorytetu większości widocznych powiadomień na wysoki 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 powiadomień o wysokim i normalnym priorytecie otrzymanych na urządzeniu z Androidem na przetworzenie danych wiadomości w elemencie onMessageReceived handler jest kilka sekund. W przypadku powiadomień wymagających asynchronicznego przetwarzania ładunku wiadomości zalecamy użycie konstrukcji takiej jak WorkManager, ponieważ może to przekroczyć czas przeznaczony na obsługę onMessageReceived.

W przypadku wiadomości o wysokim priorytecie możesz zaplanować przyspieszone zadanie za pomocą WorkManagera Androida, aby mieć pewność, że te powiadomienia będą miały priorytet i będą wykonywane do końca.

W przypadku wiadomości o normalnym priorytecie możesz zaplanować zwykłe zapytanie OneTimeWorkRequest za pomocą WorkManagera na Androida. Dzięki temu dodatkowe wymagane zadanie zostanie przetworzone bez korzystania z priorytetowego przetwarzania.

Ustawianie priorytetów wiadomości

Powiadomienia możesz wysyłać do użytkowników za pomocą Admin SDK, interfejsu API REST FCM oraz konsoli Firebase. Aby zmienić ustawienie priorytetu z poziomu Admin SDK i interfejsu FCM REST API, musisz zaktualizować ładunek użyteczny JSON wiadomości. Aby dowiedzieć się, jak ustawić priorytet na wysoki, możesz użyć tego przykładowego kodu. W przypadku powiadomień wysyłanych z konsoli nie można ustawiać pól powiadomień na Androidzie.

 {
  "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ą odbierane i przetwarzane prawidłowo przez użytkownika, przetestuj powiadomienia, wykonując te czynności:

  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 w aplikacji na urządzeniu testowym. Więcej informacji o dostępie do tokena znajdziesz w artykule Wysyłanie testowego komunikatu do aplikacji działającej w tle.
  3. Po uzyskaniu tokena FCM wyślij powiadomienie o wysokim priorytecie na urządzenie testowe za pomocą kodu wysyłania powiadomienia FCM lub polecenia cURL (%3B%0A%7D)-,cURL,-curl%20%2DX), które ma parametry konfiguracji pasujące do powiadomienia o wysokim priorytecie.

Obniżanie priorytetu zadań o wysokim priorytecie FCM na Androidzie

Wiadomości o wysokim priorytecie na Androidzie są przeznaczone do wyświetlania użytkownikowi treści, które są pilne. Powinny prowadzić do wyświetlenia powiadomień. Jeśli FCMwykrywa wzór, w którym wiadomości nie powodują wyświetlania powiadomień dla użytkowników, wiadomości mogą zostać przypisane do normalnego priorytetu lub przedelegowane do obsługi przez usługi Google Play.

FCM używa 7 dni zachowania wiadomości, aby określić, czy należy obniżyć priorytet wiadomości, czy przekierować je; dokonuje tego niezależnie w przypadku 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.

Delegowanie powiadomień w Usługach Google Play

Wiadomości o wysokim priorytecie, które spełniają określone kryteria, są przekierowywane przez usługi Google Play, a nie mają obniżony priorytet. 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żytkowników na urządzeniach z Androidem.

Pamiętaj, że wiadomości z powiadomieniami pośredniczącymi wprowadzają zmiany w sposobie raportowania danych analitycznych dotyczących otrzymanych wiadomości:

  • Aby dane analityczne dotyczące powiadomień pośredniczących mogły być raportowane, aplikacja musi używać pakietu FCM SDK w wersji 24.0.0 lub nowszej.
  • Możesz zauważyć opóźnienia lub spadek liczby otrzymanych wiadomości w porównaniu z liczbą wiadomości przed wprowadzeniem powiadomień przez serwer pośredniczący. Dzieje się tak, ponieważ dane analityczne dotyczące powiadomień pośredniczących są raportowane dopiero po uruchomieniu aplikacji. Mogą też nie zostać nigdzie odnotowane, jeśli powiadomienie nie powoduje otwarcia aplikacji.

Przekazywanie powiadomień w ten sposób jest domyślnym zachowaniem w przypadku aplikacji korzystających z Androida Q+ i Usług Google Play w wersji 19054000 lub nowszej. Wiadomości wysyłane przez interfejs API HTTP w wersji 1 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.

Chociaż zdecydowanie zalecamy pozostawienie włączonej funkcji delegowania ze względu na korzyści dla baterii i pamięci urządzenia, możesz zrezygnować z tej funkcji 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 podstawie 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 podstawie wiadomości: w obiekcie AndroidNotification żądania wysyłania ustaw klucz proxy na DENY.

Pomiar odsunięcia wiadomości na dalszy plan w Androidzie

  • Pojedyncze wiadomości. Podczas dostarczania wiadomości możesz określić, czy została ona pozbawiona priorytetu, porównując priorytet dostarczonej wiadomości zwracany przez metodę getPriority() z jej pierwotnym priorytetem zwracanym przez metodę getOriginalPriority().

  • Wszystkie wiadomości. Interfejs FCM Aggregate Delivery Data API może podać, jaki odsetek wszystkich wiadomości wysyłanych na urządzenia z Androidem jest odsyłany do kolejki. Niektóre wiadomości mogą nie być uwzględniane w raportach z danymi zbiorczymi, ale ogólnie powinny one zapewniać globalny widok współczynników depriorytetyzacji wiadomości. Więcej informacji i przykładowy kod do wysyłania zapytań do interfejsu API znajdziesz w artykule o zbiorczym danych o dostawie. Możesz go też otworzyć w eksploratorze interfejsów API.

  • Powiadomienia w zastępstwie Powiadomienia przekazywane przez serwer proxy nie będą uwzględniane w bieżących danych o dostarczaniu powiadomień w FCM ani GA, więc możesz zauważyć spadek tych danych o do 15%. Aby tworzyć raporty dotyczące wiadomości przesyłanych przez serwer proxy, użyj interfejsu FCM Aggregate Delivery Data API. ProxyNotificationInsightPercents zawiera informacje o odsetek pomyślnie przekierowanych powiadomień oraz szczegóły dotyczące wiadomości, których nie udało się przekierować.

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

  • Upewnij się, że w instancji aplikacji są włączone powiadomienia. Jeśli użytkownik wyłączył uprawnienia do wysyłania powiadomień w Twojej aplikacji, żadne powiadomienia nie zostaną opublikowane, a Twoje wiadomości zostaną zdepriorytetyzowane. Przed wysłaniem wiadomości o wysokim priorytecie do instancji aplikacji sprawdź, czy powiadomienia są włączone.

  • Podczas przetwarzania powiadomienia unikaj wykonywania dodatkowych połączeń sieciowych. Ponieważ niewielka część użytkowników aplikacji mobilnych na Androida korzysta z sieci o wysokiej latencji, nie otwieraj połączenia z serwerami przed wyświetleniem powiadomienia. Nawiązywanie połączenia z serwerem przed końcem dozwolonego czasu przetwarzania może być ryzykowne dla użytkowników w sieciach o wysokiej latencji.

    Zamiast tego dodaj treść powiadomienia do wiadomości FCM i wyświetl ją natychmiast. Jeśli na urządzeniu z Androidem potrzebujesz synchronizacji dodatkowych treści w aplikacji, możesz zaplanować zadanie za pomocą WorkManagera, aby wykonać je w tle.