Sie haben zwei Optionen zum Zuweisen der Zustellungspriorität für Downstream-Nachrichten unter Android: normale und hohe Priorität. So funktioniert die Zustellung von Nachrichten mit normaler und hoher Priorität:
Normale Priorität: Dies ist die Standardpriorität für Daten- und Benachrichtigungsnachrichten. Nachrichten mit normaler Priorität werden sofort zugestellt, wenn das Gerät nicht im Ruhemodus ist. Wenn sich das Gerät im Inaktivmodus befindet, kann die Zustellung verzögert werden, um den Akku zu schonen, bis das Gerät den Inaktivmodus verlässt. Für weniger zeitkritische Nachrichten wie Benachrichtigungen über neue E‑Mails, die Synchronisierung der Benutzeroberfläche oder die Synchronisierung von App-Daten im Hintergrund sollten Sie die normale Zustellungspriorität auswählen.
Hohe Priorität: FCM versucht, Nachrichten mit hoher Priorität sofort zuzustellen.Dazu kann FCM ein inaktives Gerät bei Bedarf aktivieren und eine begrenzte Verarbeitung durchführen (einschließlich sehr eingeschränkten Netzwerkzugriffs). Mitteilungen mit hoher Priorität sollten in der Regel zu Nutzerinteraktionen mit Ihrer App oder ihren Benachrichtigungen führen.
Zwischen Nachrichten mit hoher und normaler Priorität wählen
Nachrichten mit normaler Priorität eignen sich für allgemeine Updates. Wählen Sie „Hohe Priorität“ aus, wenn Sie sicherstellen müssen, dass dringende Angelegenheiten oder Aktionen sofort zugestellt werden. Da sich der Doze-Modus auf die Zustellzeit von Nachrichten mit normaler Priorität auswirken kann, sollten Sie die meisten Ihrer für Nutzer sichtbaren Benachrichtigungen auf „Hohe Priorität“ festlegen, damit sie rechtzeitig zugestellt werden. Benachrichtigungen wie Chatnachrichten, Probleme mit einem Konto oder Aktualisierungen bei der Essenslieferung sollten beispielsweise auf „Hohe Priorität“ festgelegt 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 mehrere Sekunden zur Verfügung, um die Nutzlast der Nachricht im onMessageReceived
-Handler zu verarbeiten. Für Nachrichten mit hoher Priorität wird etwas mehr Zeit zugewiesen 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 abzurufen, sind zusätzliche Schritte erforderlich.
Die Methode onMessageReceived
wird in einem separaten Worker-Thread aufgerufen. Als Best Practice sollten Sie die Nutzlast der Nachricht verarbeiten und sofort in der Methode onMessageReceived
eine Benachrichtigung anzeigen. Sie sollten keine zusätzlichen asynchronen Netzwerkaufrufe ausführen oder die Nutzlast in einem separaten Thread innerhalb der onMessageReceived
-Methode 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 ein imageUrl
abzurufen, das in der Nutzlast Ihrer Nachricht enthalten ist, müssen Sie ein Konstrukt wie WorkManager
oder einen Vordergrunddienst verwenden, um den Anwendungslebenszyklus zu verlängern. Die folgende Anleitung sollte verwendet werden, wenn Sie die Methode onMessageReceived
überschreiben, um zu prüfen, ob Ihre Benachrichtigungen vollständig verarbeitet werden.
- Bei Benachrichtigungen mit hoher Priorität:Starten Sie einen beschleunigten Job mit dem Android-
WorkManager
, um zu prüfen, ob Ihre Benachrichtigung mit hoher Priorität eine Priorisierung der Verarbeitungszeit erhält und die Benachrichtigung vollständig gerendert wird. Gute Nachrichten: Wenn Sie sich Sorgen machen, dass Sie aufgrund der FCM-Verarbeitung mit hoher Priorität Kontingente für beschleunigte Jobs aufbrauchen, müssen Sie sich keine Sorgen machen. Es gibt eine kurze Ausnahme für beschleunigte Jobs, die unmittelbar nach dem Versand einer FCM mit hoher PrioritätonMessageReceived
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 Bearbeitung Ihrer Benachrichtigung erforderlich ist, schließlich erledigt wird, ohne dass eine priorisierte Verarbeitung erfolgt und unnötige Probleme mit dem Akkuverbrauch entstehen.
Priorität für Nachrichten festlegen
Sie können Benachrichtigungen an Ihre Nutzer über Admin SDK, die FCM REST API und die Firebase-Konsole 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“ festlegen. Für Benachrichtigungen, die über die Konsole gesendet werden, wird das Festlegen von Android-spezifischen Benachrichtigungsfeldern 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 Doze-Modus testen
Damit Ihre Benachrichtigungen mit hoher Priorität korrekt empfangen und verarbeitet werden, wenn ein Nutzer sie erhält, folgen Sie dieser Anleitung, um Ihre Benachrichtigungen zu testen:
- Versetzen Sie Ihr Gerät in den Inaktivmodus. Folgen Sie dazu der Anleitung unter App mit dem Inaktivmodus testen.
- 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.
- Sobald Sie das FCM-Token haben, senden Sie Ihre Benachrichtigung mit hoher Priorität mit Ihrem FCM-Code zum Senden von Benachrichtigungen oder einem cURL-Befehl, der Konfigurationsparameter enthält, die mit Ihrer Benachrichtigung mit hoher Priorität übereinstimmen, an das Testgerät.
Herabstufung von FCM mit hoher Priorität unter Android
Nachrichten mit hoher Priorität unter Android sind für zeitkritische, für Nutzer sichtbare Inhalte vorgesehen und sollten zu nutzerorientierten Benachrichtigungen führen. Wenn FCM ein Muster erkennt, bei dem Nachrichten nicht zu nutzerorientierten Benachrichtigungen führen, werden Ihre Nachrichten möglicherweise auf normale Priorität herabgestuft oder zur Verarbeitung durch die Google Play-Dienste delegiert.
Bei FCM werden 7 Tage mit Nachrichtenverhalten berücksichtigt, um zu ermitteln, ob Nachrichten herabgestuft oder als Proxy gesendet 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 über Google Play-Dienste weitergeleitet, anstatt dass ihre Priorität herabgestuft wird. Das bedeutet, dass die Benachrichtigungen von Google Play-Diensten im Namen der App angezeigt werden, ohne dass die App gestartet werden muss. Dies geschieht, um die allgemeine Nutzerfreundlichkeit auf Android-Geräten zu verbessern.
Durch die Verwendung von Proxy-Benachrichtigungen ändert sich die Art und Weise, wie Analysen zu empfangenen Nachrichten gemeldet werden:
- Damit Analysen für weitergeleitete Benachrichtigungen gemeldet werden, muss in Ihrer App das FCM SDK ab Version 24.0.0 verwendet werden.
- Möglicherweise stellen Sie Verzögerungen oder einen Rückgang bei der Anzahl der empfangenen Nachrichten im Vergleich zur Zeit vor der Einführung von Proxy-Benachrichtigungen fest. Das liegt daran, dass Analysen für weitergeleitete Benachrichtigungen erst gemeldet werden, wenn Ihre App gestartet wird. Wenn die Benachrichtigung nicht dazu führt, dass die App geöffnet wird, werden sie möglicherweise gar nicht gemeldet.
Das Weiterleiten von Benachrichtigungen über einen Proxy ist das Standardverhalten für Apps, die Android Q+ und Google Play-Dienste Version 19054000 oder höher verwenden. Nachrichten, die über die HTTP v1 API gesendet werden, werden per Proxy weitergeleitet. Nachrichten, die über die Firebase-Konsole oder Legacy-APIs gesendet werden, werden nicht per Proxy weitergeleitet. Diese Funktion befindet sich derzeit in der Betaphase und kann sich noch ändern.
Wir empfehlen jedoch dringend, die Delegierung aktiviert zu lassen, da sie sich positiv auf den Akku und den Speicher des Geräts auswirkt. Sie können dieses Verhalten auf folgende Weise deaktivieren:
- Auf App-Ebene: Fügen Sie in Ihrem App-Manifest die Direktive
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
hinzu. - Pro App-Instanz: Legen Sie
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
im UI-Ablauf für Ihre App fest, je nach Anwendungsfall. - Pro Nachricht: Setzen Sie den Schlüssel
proxy
im ObjektAndroidNotification
für die Sendeanfrage aufDENY
.
Herabstufung von Nachrichten unter Android messen
Einzelne Nachrichten. Bei der Zustellung können Sie anhand des Vergleichs der zugestellten Priorität (getPriority()) mit der ursprünglichen Priorität (getOriginalPriority()) feststellen, ob eine einzelne Nachricht herabgestuft wurde.
Alle Nachrichten Mit der FCM Aggregate Delivery Data API lässt sich ermitteln, wie viel Prozent aller Ihrer Nachrichten an Android-Nutzer eine niedrigere Priorität haben. Einige Nachrichten werden möglicherweise aus den Berichten mit aggregierten Daten ausgelassen. Insgesamt sollten sie jedoch einen globalen Überblick über die Raten für die Herabstufung von Nachrichten geben. Weitere Informationen und Beispielcode zum Abfragen der API finden Sie in unserem Artikel zu aggregierten Zustellungsdaten. Sie können die API auch über den API Explorer aufrufen.
Weitergeleitete Benachrichtigungen: Proxied notifications won't be counted in current FCM or GA delivery metrics, so you may experience a drop of up to 15% in notification delivery metrics. Wenn Sie Berichte zu weitergeleiteten Nachrichten erstellen möchten, verwenden Sie die FCM Aggregate Delivery Data API.
ProxyNotificationInsightPercents
gibt den Prozentsatz der erfolgreich weitergeleiteten Benachrichtigungen sowie Details zu Nachrichten an, die nicht erfolgreich weitergeleitet werden können.
Fehlerbehebung bei Benachrichtigungsverzögerungen
Prüfen Sie, ob Benachrichtigungen für Ihre App-Instanz aktiviert sind. Wenn der Nutzer die Berechtigung für Benachrichtigungen für Ihre App deaktiviert hat, werden keine Ihrer Benachrichtigungen gesendet. Ihre Nachrichten werden dann weniger priorisiert. Sie sollten prüfen, ob Benachrichtigungen aktiviert sind, bevor Sie Nachrichten mit hoher Priorität an eine Anwendungsinstanz senden.
Vermeiden Sie zusätzliche Netzwerkaufrufe bei der Verarbeitung Ihrer Benachrichtigung. Da ein kleiner Teil der Android-Nutzer in Netzwerken mit hoher Latenz unterwegs ist, sollten Sie keine Verbindung zu Ihren Servern herstellen, bevor Sie eine Benachrichtigung anzeigen. Wenn Sie vor Ablauf der zulässigen Verarbeitungszeit eine Rückmeldung an den Server senden, kann dies für Nutzer in Netzwerken mit hoher Latenz riskant sein.
Stattdessen sollten Sie den Benachrichtigungsinhalt in die FCM-Nachricht einfügen und sofort anzeigen. Wenn Sie zusätzliche In-App-Inhalte auf Android synchronisieren müssen, können Sie mit WorkManager eine Aufgabe planen, die im Hintergrund ausgeführt wird.