Android-Nachrichtenpriorität festlegen und verwalten

Sie haben zwei Möglichkeiten, Downstream-Nachrichten unter Android eine Auslieferungspriorität zuzuweisen: normale und hohe Priorität. Die Zustellung von Nachrichten mit normaler und hoher Priorität funktioniert so:

  • Normale Priorität: Dies ist die Standardpriorität für Daten- und Benachrichtigungsnachrichten. Nachrichten mit normaler Priorität werden sofort zugestellt, wenn sich das Gerät nicht im Ruhemodus befindet. Wenn sich das Gerät im Stromsparmodus befindet, kann die Zustellung verzögert werden, um den Akku zu schonen, bis das Gerät den Stromsparmodus verlässt. Für weniger zeitkritische Nachrichten, z. B. Benachrichtigungen über neue E-Mails, die Synchronisierung der Benutzeroberfläche oder die Synchronisierung von App-Daten im Hintergrund, wähle die normale Zustellungspriorität aus.

  • Hohe Priorität.FCM versucht, Nachrichten mit hoher Priorität sofort zuzustellen. Dabei kann FCM ein Gerät im Ruhemodus bei Bedarf aktivieren und eine begrenzte Verarbeitung ausführen (einschließlich sehr eingeschränktem Netzwerkzugriff). Nachrichten mit hoher Priorität sollten im Allgemeinen zu einer Nutzerinteraktion mit Ihrer App oder ihren Benachrichtigungen führen.

Entscheidung zwischen Nachrichten mit hoher und normaler Priorität

Nachrichten mit normaler Priorität eignen sich für allgemeine Updates. Wählen Sie „Hoch“ aus, wenn Sie eine sofortige Zustellung für dringende Angelegenheiten oder Aktionen benötigen. Da die Zustellzeit für Nachrichten mit normaler Priorität durch den Stromsparmodus beeinträchtigt werden kann, solltest du die meisten deiner für Nutzer sichtbaren Benachrichtigungen auf hohe Priorität setzen, damit sie umgehend zugestellt werden. Beispielsweise sollten Benachrichtigungen wie Chatnachrichten, Probleme mit einem Konto oder Updates zur Essenslieferung auf hohe Priorität gesetzt werden.

Nachrichtenverarbeitung für Nachrichten mit hoher und normaler Priorität

Sowohl für Nachrichten mit hoher als auch mit normaler Priorität, die auf einem Android-Gerät empfangen werden, stehen im onMessageReceived-Handler mehrere Sekunden zur Verarbeitung der Nachrichtennutzlast zur Verfügung. Für Nachrichten mit hoher Priorität wird etwas mehr Zeit eingeräumt als für Nachrichten mit normaler Priorität. Diese Zeit sollte nur so lang sein, dass eine Benachrichtigung sofort gerendert werden kann. Wenn Sie zusätzliche Aufgaben ausführen müssen, z. B. ein Bild aus dem Gerätespeicher laden oder Ihre Server aufrufen, um zusätzliche Inhalte zu erfassen, müssen Sie zusätzliche Schritte ausführen.

Die Methode onMessageReceived wird in einem separaten Arbeitsthread aufgerufen. Als Best Practice sollten Sie die Nachrichtennutzlast verarbeiten und sofort eine Benachrichtigung in der Methode onMessageReceived anzeigen. Sie sollten keine zusätzlichen asynchronen Netzwerkaufrufe ausführen oder die Nutzlast in einem separaten Thread innerhalb der Methode onMessageReceived verarbeiten. Andernfalls kann es passieren, dass sich Ihre Anwendung außerhalb eines gültigen Prozesslebenszyklus befindet, bevor die Nutzlast vollständig verarbeitet wurde. In diesem Fall kann es vorkommen, dass bestimmte gesendete FCM-Nachrichten zu verzögerten oder fehlenden Benachrichtigungen führen.

Wenn Sie zusätzliche Zeit für die Verarbeitung Ihrer Nachricht benötigen, z. B. um eine in der Nachrichtennutzlast enthaltene imageUrl abzurufen, müssen Sie ein Konstrukt wie WorkManager oder einen Dienst im Vordergrund verwenden, um den Lebenszyklus der Anwendung zu verlängern. Beachten Sie die folgende Anleitung, wenn Sie die Methode onMessageReceived überschreiben, um zu prüfen, ob Ihre Benachrichtigungen vollständig verarbeitet wurden.

  • Für Benachrichtigungen mit hoher Priorität:Starten Sie einen Express-Job mit der Android-WorkManager, um zu prüfen, ob Ihre Benachrichtigung mit hoher Priorität priorisiert verarbeitet wird und das Rendern der Benachrichtigung abgeschlossen wird. Wenn Sie sich Sorgen machen, dass Sie aufgrund der FCM-Verarbeitung mit hoher Priorität die Kontingente für Express-Jobs ausschöpfen, können wir Sie beruhigen. Es gibt eine kurze Ausnahme für Express-Jobs, die unmittelbar nach dem Senden einer FCM-onMessageReceived mit hoher Priorität geplant werden.
  • Für Benachrichtigungen mit normaler Priorität: Starten Sie stattdessen einen regulären WorkRequest mit dem Android-WorkManager. So wird sichergestellt, dass die zusätzliche Arbeit, die für die Verarbeitung Ihrer Benachrichtigung erforderlich ist, schließlich verarbeitet wird, ohne dass eine priorisierte Verarbeitung verwendet wird und unnötige Probleme mit der Akkunutzung verursacht werden.

Priorität für Nachrichten festlegen

Sie können Benachrichtigungen an Ihre Nutzer über das Admin SDK, die FCM REST API und die Firebase Console senden. Wenn Sie die Prioritätseinstellung über die Admin SDK und die FCM REST API ändern möchten, müssen Sie die JSON-Nutzlast der Nachricht aktualisieren. Im folgenden Codebeispiel sehen Sie, wie Sie die Priorität auf „Hoch“ setzen. Bei Benachrichtigungen, die über die Console gesendet werden, wird das Festlegen Android-spezifischer Benachrichtigungsfelder nicht unterstützt.

 {
  "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"
          }
      }
  }
}

Benachrichtigungen mit hoher Priorität im Stromsparmodus testen

Damit Benachrichtigungen mit hoher Priorität korrekt empfangen und verarbeitet werden, wenn sie von einem Nutzer empfangen werden, folge dieser Anleitung, um deine Benachrichtigungen zu testen:

  1. Versetze dein Gerät in den Stromsparmodus. Eine Anleitung dazu findest du unter App mit Stromsparmodus testen.
  2. Greifen Sie über Ihre App auf dem Testgerät auf Ihr FCM-Registrierungstoken zu. Weitere Informationen zum Zugriff auf das Token finden Sie unter Testnachricht an eine Hintergrund-App senden.
  3. Sobald Sie das FCM-Token haben, senden Sie Ihre Benachrichtigung mit hoher Priorität an das Testgerät. Verwenden Sie dazu Ihren FCM-Benachrichtigungssendecode oder einen cURL-Befehl mit Konfigurationsparametern, die Ihrer Benachrichtigung mit hoher Priorität entsprechen.

Herabstufung der Priorität von FCM mit hoher Priorität auf Android-Geräten

Nachrichten mit hoher Priorität sind auf Android-Geräten für zeitkritische, für Nutzer sichtbare Inhalte gedacht und sollten zu Benachrichtigungen für Nutzer führen. Wenn FCM ein Muster erkennt, bei dem Nachrichten nicht zu für Nutzer sichtbaren Benachrichtigungen führen, werden Ihre Nachrichten möglicherweise auf normale Priorität herabgestuft oder zur Verarbeitung durch die Google Play-Dienste delegiert.

FCM verwendet das Nachrichtenverhalten der letzten 7 Tage, um zu bestimmen, ob Nachrichten depriorisiert oder über einen Proxy weitergeleitet werden sollen. Diese Entscheidung wird für jede Instanz Ihrer Anwendung unabhängig getroffen. Wenn Benachrichtigungen als Reaktion auf Nachrichten mit hoher Priorität so angezeigt werden, dass sie für den Nutzer sichtbar sind, sind Ihre zukünftigen Nachrichten mit hoher Priorität nicht betroffen.

Benachrichtigungsdelegierung mit Google Play-Diensten

Benachrichtigungen mit hoher Priorität, die bestimmte Kriterien erfüllen, werden von den Google Play-Diensten weitergeleitet, anstatt depriorisiert zu werden. Das bedeutet, dass die Benachrichtigungen von den Google Play-Diensten im Namen der App angezeigt werden, ohne dass die App gestartet werden muss. Dies soll die Nutzerfreundlichkeit auf Android-Geräten insgesamt verbessern.

Beachten Sie, dass sich durch die Verwendung von Proxy-Benachrichtigungen die Art und Weise ändert, wie Analysen zu empfangenen Nachrichten gemeldet werden:

  • Damit Analysen für weitergeleitete Benachrichtigungen erfasst werden können, muss Ihre App die FCM SDK-Version 24.0.0 oder höher verwenden.
  • Möglicherweise stellen Sie Verzögerungen oder einen Rückgang der Anzahl der empfangenen Nachrichten im Vergleich zur Anzahl vor der Einführung von Proxy-Benachrichtigungen fest. Das liegt daran, dass Analysen für weitergeleitete Benachrichtigungen erst erfasst werden, wenn Ihre App gestartet wird. Wenn die Benachrichtigung nicht dazu führt, dass die App geöffnet wird, werden möglicherweise gar keine Analysen erfasst.

Die Weiterleitung von Benachrichtigungen über einen Proxy ist das Standardverhalten für Apps, die Android Q oder höher und die Google Play-Dienste-Version 19054000 oder höher verwenden. Nachrichten, die über die HTTP v1 API gesendet werden, werden über einen Proxy weitergeleitet. Nachrichten, die über die Firebase Console oder Legacy-APIs gesendet werden, werden nicht über einen Proxy weitergeleitet. Diese Funktion befindet sich derzeit in der Betaphase und kann sich noch ändern.

Wir empfehlen dringend, die Delegierung aktiviert zu lassen, da sie sich positiv auf die Akkulaufzeit und den Arbeitsspeicher des Geräts auswirkt. Sie können dieses Verhalten jedoch auf eine der folgenden Arten deaktivieren:

  • Auf App-Ebene: Fügen Sie in Ihrem App-Manifest die Anweisung <meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/> hinzu.
  • Pro App-Instanz: Legen Sie für die App-Instanz im UI-Ablauf für Ihre App je nach Anwendungsfall fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> fest.
  • Pro Nachricht: Setzen Sie den Schlüssel proxy im Objekt AndroidNotification für die Sendeanfrage auf DENY.

Messung der Depriorisierung von Nachrichten auf Android-Geräten

  • Einzelne Nachrichten: Bei der Zustellung kannst du feststellen, ob eine einzelne Nachricht herabgestuft wurde, indem du die Auslieferungspriorität aus getPriority() mit der ursprünglichen Priorität aus getOriginalPriority() vergleichst.

  • Alle Nachrichten Die FCM Aggregate Delivery Data API kann melden, welcher Prozentsatz aller Ihrer Nachrichten an Android-Geräte depriorisiert wird. Einige Nachrichten werden möglicherweise nicht in den Berichten mit aggregierten Daten berücksichtigt. Insgesamt sollten sie jedoch einen globalen Überblick über die Depriorisierungsraten von Nachrichten bieten. Weitere Informationen und Beispielcode zum Abfragen der API finden Sie in unserem Artikel zu aggregierten Auslieferungsdaten. Sie können die API auch im API Explorer ausprobieren.

  • Proxied Notifications. Über einen Proxy gesendete Benachrichtigungen werden nicht in den aktuellen FCM- oder GA-Zustellungsmetriken berücksichtigt. Daher kann es zu einem Rückgang der Zustellungsmetriken für Benachrichtigungen um bis zu 15% kommen. Für Berichte zu weitergeleiteten Nachrichten verwenden Sie die FCM Aggregate Delivery Data API. ProxyNotificationInsightPercents meldet den Prozentsatz der erfolgreich weitergeleiteten Benachrichtigungen sowie Details zu Nachrichten, die nicht erfolgreich weitergeleitet werden können.

Fehlerbehebung bei verzögerten Benachrichtigungen

  • Achten Sie darauf, dass Benachrichtigungen für Ihre App-Instanz aktiviert sind. Wenn der Nutzer die Berechtigung zum Senden von Benachrichtigungen für Ihre App deaktiviert hat, werden keine Benachrichtigungen gepostet. Daher werden Ihre Nachrichten depriorisiert. Sie sollten prüfen, ob Benachrichtigungen aktiviert sind, bevor Sie Nachrichten mit hoher Priorität an eine Anwendungsinstanz senden.

  • Vermeiden Sie zusätzliche Netzwerkaufrufe, wenn Sie die Benachrichtigung verarbeiten. Da ein kleiner Teil der Android-Mobilgeräte in Netzwerken mit hoher Latenz betrieben wird, solltest du keine Verbindung zu deinen Servern herstellen, bevor eine Benachrichtigung angezeigt wird. Ein Rückruf an den Server vor dem Ende der zulässigen Verarbeitungszeit kann für Nutzer in Netzwerken mit hoher Latenz riskant sein.

    Fügen Sie stattdessen den Benachrichtigungsinhalt in die FCM-Nachricht ein und zeigen Sie ihn sofort an. Wenn Sie zusätzliche In-App-Inhalte auf Android-Geräten synchronisieren müssen, können Sie mit WorkManager eine Aufgabe planen, die im Hintergrund ausgeführt wird.