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 ładunku 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 FCM REST API oraz konsoli Firebase. Aby zmienić ustawienie priorytetu z poziomu Admin SDK i interfejsu FCM REST API, musisz zaktualizować ładunek 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żenie priorytetu 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 otrzymywanych 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ń z użyciem serwera proxy. Dzieje się tak, ponieważ dane analityczne dotyczące powiadomień pośredniczących są raportowane dopiero po uruchomieniu aplikacji i mogą 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 tego rozwiązania 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"/>.
  • 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 oryginalnym 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 wgląd w wskaźniki 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.