Dieses Dokument enthält eine Referenz für die XMPP-Syntax, die zum Übertragen von Nachrichten zwischen Ihrem Anwendungsserver, Clientanwendungen und Firebase Cloud Messaging (FCM) verwendet wird. Ihr App-Server muss eine Verbindung zu diesen Endpunkten herstellen:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
Die verfügbaren Parameter und Optionen fallen in die folgenden Kategorien:
- Syntax von Downstream-Nachrichten
- Antwortcodes für Downstream-Nachrichtenfehler
- Syntax von Upstream-Nachrichten
- FCM-Kontrollnachrichten
Nachgelagerte Nachrichtensyntax
In diesem Abschnitt wird die Syntax für das Senden von Downstream-Nachrichten beschrieben.
Downstream-XMPP-Nachrichten (JSON)
In der folgenden Tabelle sind die Ziele, Optionen und Nutzlasten für XMPP-JSON-Nachrichten aufgeführt.
Parameter | Nutzung | Beschreibung | |
---|---|---|---|
Ziel | |||
to |
Optional, String |
Dieser Parameter gibt den Empfänger einer Nachricht an.
Der Wert kann das Registrierungstoken eines Geräts, der Benachrichtigungsschlüssel einer Gerätegruppe oder ein einzelnes Thema sein (mit dem Präfix |
|
condition |
Optionaler String | Dieser Parameter gibt einen logischen Ausdruck für Bedingungen an, der das Nachrichtenziel bestimmt. Unterstützte Bedingung: Thema, das als „meinThema“ in Themen formatiert ist. Bei diesem Wert wird die Groß- und Kleinschreibung nicht berücksichtigt. Unterstützte Operatoren: |
|
Optionen | |||
message_id |
Erforderlich, String | Mit diesem Parameter wird eine Nachricht in einer XMPP-Verbindung eindeutig identifiziert. |
|
collapse_key |
Optional, String | Mit diesem Parameter wird eine Gruppe von Nachrichten (z. B. mit Es gibt keine Garantie dafür, in welcher Reihenfolge Nachrichten gesendet werden. Hinweis: Es sind jeweils maximal vier verschiedene Minimierungsschaltflächen zulässig. Das bedeutet, dass FCM gleichzeitig vier verschiedene Nachrichten pro Client-App speichern kann. Wenn Sie diese Anzahl überschreiten, kann nicht garantiert werden, welche vier Minimierungsschlüssel FCM beibehält. |
|
priority |
Optional, String | Legt die Priorität der Nachricht fest. Gültige Werte sind „normal“ und „hoch“. Auf Apple-Plattformen entsprechen diese den APN-Prioritäten 5 und 10. Standardmäßig werden Benachrichtigungen mit hoher Priorität und Datennachrichten mit normaler Priorität gesendet. Bei der normalen Priorität wird der Akkuverbrauch der Client-App optimiert. Diese Priorität sollte verwendet werden, es sei denn, eine sofortige Zustellung ist erforderlich. Bei Nachrichten mit normaler Priorität kann die App die Nachricht mit einer nicht näher bezeichneten Verzögerung erhalten. Wenn eine Nachricht mit hoher Priorität gesendet wird, wird sie sofort gesendet und die App kann eine Benachrichtigung anzeigen. |
|
content_available |
Optional, boolescher Wert | Verwenden Sie dieses Feld auf Apple-Plattformen, um |
|
mutable_content |
Optional, boolescher JSON-Wert | Verwenden Sie dieses Feld auf Apple-Plattformen, um |
|
time_to_live |
Optional, Zahl | Mit diesem Parameter wird angegeben, wie lange (in Sekunden) die Nachricht im FCM-Speicher aufbewahrt werden soll, wenn das Gerät offline ist. Die maximale Gültigkeitsdauer beträgt 4 Wochen und der Standardwert 4 Wochen. Weitere Informationen finden Sie unter Lebensdauer einer Nachricht festlegen. |
|
dry_run |
Optional, boolescher Wert | Wenn dieser Parameter auf Der Standardwert ist |
|
Nutzlast | |||
data |
Optional, Objekt | Mit diesem Parameter werden die Schlüssel/Wert-Paare der Nutzlast der Nachricht angegeben. Beispiel: Wenn die Nachricht auf Apple-Plattformen über APNs zugestellt wird, entspricht sie den benutzerdefinierten Datenfeldern. Wenn es von FCM bereitgestellt wird, wird es in Unter Android führt dies zu einem Intent-Extra namens Der Schlüssel darf kein reserviertes Wort sein („from“, „message_type“ oder ein Wort, das mit „google“ oder „gcm“ beginnt). Verwenden Sie keines der in dieser Tabelle definierten Wörter (z. B. Werte in Stringtypen werden empfohlen. Sie müssen Werte in Objekten oder anderen Datentypen, die keine Strings sind (z. B. Ganzzahlen oder Boolesche Werte), in Strings konvertieren. |
|
notification |
Optional, Objekt | Dieser Parameter gibt die vordefinierten, für den Nutzer sichtbaren Schlüssel/Wert-Paare der Benachrichtigungsnutzlast an. Weitere Informationen finden Sie unter „Unterstützung für Benachrichtigungsnutzlast“. Weitere Informationen zu den Optionen für Benachrichtigungs- und Datennachrichten finden Sie unter Nachrichtentypen. Wenn eine Benachrichtigungsnutzlast angegeben ist oder die Option content_available für eine Nachricht an ein Apple-Gerät auf true gesetzt ist, wird die Nachricht über APNs gesendet. Andernfalls wird sie über FCM gesendet.
|
Unterstützung für Benachrichtigungsnutzlasten
In den folgenden Tabellen sind die vordefinierten Schlüssel aufgeführt, die zum Erstellen von Benachrichtigungen für Apple-Plattformen und Android verfügbar sind.
Parameter | Nutzung | Beschreibung |
---|---|---|
title |
Optional, String |
Der Titel der Benachrichtigung. Dieses Feld ist auf Smartphones und Tablets nicht sichtbar. |
body |
Optional, String |
Der Textkörper der Benachrichtigung. |
sound |
Optional, String |
Der Ton, der abgespielt wird, wenn das Gerät die Benachrichtigung erhält.
String, der Sounddateien im Haupt-Bundle der Clientanwendung oder im Ordner |
badge |
Optional, String |
Der Wert des Logos auf dem App-Symbol auf dem Startbildschirm. Wird keine Angabe gemacht, ändert sich das Kennzeichen nicht.
Wenn Sie |
click_action |
Optional, String |
Die Aktion, die mit einem Nutzerklick auf die Benachrichtigung verknüpft ist.
Entspricht |
subtitle |
Optionaler String |
Der Untertitel der Benachrichtigung. |
body_loc_key |
Optional, String |
Der Schlüssel für den Textkörper in den Stringressourcen der App, mit dem der Textkörper in die aktuelle Lokalisierung des Nutzers übersetzt wird.
Entspricht Weitere Informationen finden Sie unter Payload-Schlüsselreferenz und Inhalte von Remote-Benachrichtigungen lokalisieren. |
body_loc_args |
Optional, JSON-Array als String |
Variable Stringwerte, die anstelle der Formatanweisungen in
Entspricht Weitere Informationen finden Sie unter Payload-Schlüsselreferenz und Inhalte von Remote-Benachrichtigungen lokalisieren. |
title_loc_key |
Optional, String |
Der Schlüssel für den Titelstring in den Stringressourcen der App, mit dem der Titeltext in die aktuelle Lokalisierung des Nutzers übersetzt wird.
Entspricht Weitere Informationen finden Sie unter Payload-Schlüsselreferenz und Inhalte von Remote-Benachrichtigungen lokalisieren. |
title_loc_args |
Optional, JSON-Array als String |
Variable Stringwerte, die anstelle der Formatspezifizierer in
Entspricht Weitere Informationen finden Sie unter Payload-Schlüsselreferenz und Inhalte von Remote-Benachrichtigungen lokalisieren. |
Parameter | Nutzung | Beschreibung |
---|---|---|
title |
Optional, String |
Der Titel der Benachrichtigung. |
body |
Optional, String |
Der Textkörper der Benachrichtigung. |
android_channel_id |
Optional, String |
Die Kanal-ID der Benachrichtigung (neu in Android O). Die App muss einen Kanal mit dieser Kanal-ID erstellen, bevor eine Benachrichtigung mit dieser Kanal-ID empfangen wird. Wenn du diese Kanal-ID nicht in der Anfrage sendest oder die angegebene Kanal-ID noch nicht von der App erstellt wurde, verwendet FCM die im App-Manifest angegebene Kanal-ID. |
icon |
Optional, String |
Das Symbol der Benachrichtigung.
Das Benachrichtigungssymbol wird für die Zeichnen-Ressource |
sound |
Optional, String |
Der Ton, der abgespielt wird, wenn das Gerät die Benachrichtigung erhält.
Unterstützt |
tag |
Optional, String |
Mit dieser Kennung werden vorhandene Benachrichtigungen in der Benachrichtigungsleiste ersetzt. Wenn nicht angegeben, wird für jede Anfrage eine neue Benachrichtigung erstellt. Wenn Sie ein Tag angeben und bereits eine Benachrichtigung mit demselben Tag angezeigt wird, ersetzt die neue Benachrichtigung die vorhandene im Benachrichtigungs-Schieberegler. |
color |
Optional, String |
Die Symbolfarbe der Benachrichtigung im |
click_action |
Optional, String |
Die Aktion, die mit einem Nutzerklick auf die Benachrichtigung verknüpft ist. Wenn angegeben, wird eine Aktivität mit einem übereinstimmenden Intent-Filter gestartet, wenn ein Nutzer auf die Benachrichtigung klickt. |
body_loc_key |
Optional, String |
Der Schlüssel für den Textkörper in den Stringressourcen der App, mit dem der Textkörper in die aktuelle Lokalisierung des Nutzers übersetzt wird. Weitere Informationen finden Sie unter Stringressourcen. |
body_loc_args |
Optional, JSON-Array als String |
Variable Stringwerte, die anstelle der Formatspezifizierer in Weitere Informationen finden Sie unter Formatierung und Stil. |
title_loc_key |
Optionaler String |
Der Schlüssel für den Titelstring in den Stringressourcen der App, der zum Lokalisieren des Titeltexts für die aktuelle Lokalisierung des Nutzers verwendet werden soll. Weitere Informationen finden Sie unter Stringressourcen. |
title_loc_args |
Optional, JSON-Array als String |
Variable Stringwerte, die anstelle der Formatspezifizierer in Weitere Informationen finden Sie unter Formatierung und Stil. |
Parameter | Nutzung | Beschreibung |
---|---|---|
title |
Optional, String |
Der Titel der Benachrichtigung. |
body |
Optional, String |
Der Textkörper der Benachrichtigung. |
icon |
Optional, String |
Die URL für das Symbol der Benachrichtigung. |
click_action |
Optional, String |
Die Aktion, die mit einem Nutzerklick auf die Benachrichtigung verknüpft ist. Für alle URL-Werte ist HTTPS erforderlich. |
Antwort auf eine XMPP-Nachricht interpretieren
In der folgenden Tabelle sind die Felder aufgeführt, die in einer nachgelagerten XMPP-Nachrichtenantwort angezeigt werden.
Parameter | Nutzung | Beschreibung |
---|---|---|
from |
Erforderlich, String | Dieser Parameter gibt an, wer diese Antwort gesendet hat. Der Wert ist das Registrierungstoken der Clientanwendung. |
message_id |
Erforderlich, String | Dieser Parameter identifiziert eine Nachricht in einer XMPP-Verbindung eindeutig. Der Wert ist ein String, der die zugehörige Nachricht eindeutig identifiziert. |
message_type |
Erforderlich, String | Dieser Parameter gibt eine Wenn der Wert auf |
error |
Optional, String | Dieser Parameter gibt einen Fehler in Bezug auf die nachgelagerte Meldung an. Er wird festgelegt, wenn message_type nack ist. Weitere Informationen finden Sie in Tabelle 4. |
error_description |
Optional, String | Dieser Parameter enthält beschreibende Informationen zum Fehler. Er wird festgelegt, wenn message_type auf nack gesetzt ist. |
Fehlerantwortcodes für Downstream-Nachrichten
In der folgenden Tabelle sind die Fehlerantwortcodes für Downstream-Nachrichten aufgeführt.
Fehler | XMPP-Code | Empfohlene Maßnahmen |
---|---|---|
Fehlendes Registrierungstoken | INVALID_JSON |
Prüfe, ob die Anfrage ein Registrierungstoken enthält (in registration_id in einer Nur-Text-Nachricht oder im Feld to oder registration_ids in JSON). |
Ungültige APNs-Registrierung | INVALID_JSON |
Prüfen Sie bei iOS-Registrierungen, ob die Registrierungsanfrage vom Client ein gültiges APNs-Token und eine gültige Anwendungs-ID enthält. |
Ungültiges Registrierungstoken | BAD_REGISTRATION |
Prüfe das Format des Registrierungstokens, das du an den Server übergibst. Es muss mit dem Registrierungstoken übereinstimmen, das die Clientanwendung bei der Registrierung bei FCM erhält. Fügen Sie keine zusätzlichen Zeichen hinzu. |
Nicht registriertes Gerät | DEVICE_UNREGISTERED |
Ein vorhandenes Registrierungstoken kann in einer Reihe von Fällen ungültig werden, z. B.:
|
Nicht übereinstimmender Absender | SENDER_ID_MISMATCH |
Ein Registrierungstoken ist an eine bestimmte Gruppe von Absendern gebunden. Wenn eine Client-App für FCM registriert wird, muss sie angeben, welche Absender Nachrichten senden dürfen. Sie sollten eine dieser Absender-IDs verwenden, wenn Sie Nachrichten an die Client-App senden. Wenn Sie zu einem anderen Absender wechseln, funktionieren die vorhandenen Registrierungstokens nicht. |
Ungültiges JSON-Format | INVALID_JSON |
Prüfen Sie, ob die JSON-Nachricht richtig formatiert ist und gültige Felder enthält. Achten Sie beispielsweise darauf, dass der richtige Datentyp übergeben wird. |
Nachricht zu groß | INVALID_JSON |
Achten Sie darauf, dass die Gesamtgröße der in einer Nachricht enthaltenen Nutzlastdaten die FCM-Limits nicht überschreitet: 4.096 Byte für die meisten Nachrichten oder 2.048 Byte bei Nachrichten zu Themen. Das gilt sowohl für die Schlüssel als auch für die Werte. |
Ungültiger Datenschlüssel | INVALID_JSON |
Achten Sie darauf, dass die Nutzlastdaten keinen Schlüssel (z. B. from , gcm oder einen anderen Wert mit dem Präfix google ) enthalten, der intern von FCM verwendet wird. Einige Wörter (z. B. collapse_key ) werden auch von FCM verwendet, sind aber in der Nutzlast zulässig. In diesem Fall wird der Nutzlastwert vom Wert FCM überschrieben. |
Ungültige Gültigkeitsdauer | INVALID_JSON |
Prüfen Sie, ob der in time_to_live verwendete Wert eine Ganzzahl ist, die eine Dauer in Sekunden zwischen 0 und 2.419.200 (4 Wochen) darstellt. |
Ungültige ACK-Nachricht | BAD_ACK |
Prüfen Sie, ob die ack -Nachricht richtig formatiert ist, bevor Sie es noch einmal versuchen. Weitere Informationen finden Sie in Tabelle 6. |
Zeitlimit | SERVICE_UNAVAILABLE |
Der Server konnte die Anfrage nicht rechtzeitig verarbeiten. Wiederholen Sie dieselbe Anfrage. Beachten Sie dabei Folgendes:
Hinweis: Absender, die Probleme verursachen, laufen Gefahr, auf die Sperrliste gesetzt zu werden. |
Interner Serverfehler | INTERNAL_SERVER_
|
Beim Verarbeiten der Anfrage ist ein Fehler aufgetreten. Sie können dieselbe Anfrage nach den unter „Zeitüberschreitung“ aufgeführten Anforderungen wiederholen (siehe Zeile oben). |
Gerätenachrichtenrate überschritten | DEVICE_MESSAGE_RATE |
Die Anzahl der Nachrichten an ein bestimmtes Gerät ist zu hoch. Senden Sie weniger Nachrichten an dieses Gerät und versuchen Sie nicht sofort noch einmal, Nachrichten an dieses Gerät zu senden. |
Nachrichtenrate für Themen überschritten | TOPICS_MESSAGE_RATE |
Die Anzahl der Nachrichten an Abonnenten eines bestimmten Themas ist zu hoch. Reduzieren Sie die Anzahl der für dieses Thema gesendeten Nachrichten und versuchen Sie es nicht sofort noch einmal. |
Verbindungsausgleich | CONNECTION_DRAINING |
Die Nachricht konnte nicht verarbeitet werden, da die Verbindung per Drain beendet wird. Das liegt daran, dass FCM regelmäßig eine Verbindung schließen muss, um das Load Balancing durchzuführen. Senden Sie die Nachricht noch einmal über eine andere XMPP-Verbindung. |
Ungültige APNs-Anmeldedaten | INVALID_APNS_CREDENTIAL |
Eine an ein iOS-Gerät gerichtete Nachricht konnte nicht gesendet werden, weil der erforderliche APNs-Authentifizierungsschlüssel nicht hochgeladen wurde oder abgelaufen ist. Prüfen Sie die Gültigkeit Ihrer Entwicklungs- und Produktionsanmeldedaten. |
Authentifizierung fehlgeschlagen | AUTHENTICATION_FAILED |
Authentifizierung bei externen Push-Diensten fehlgeschlagen. Prüfen Sie, ob Sie die richtigen Web-Push-Zertifikate verwenden. |
Syntax für Upstream-Nachrichten
Eine Upstream-Nachricht ist eine Nachricht, die die Client-App an den App-Server sendet. Derzeit unterstützt nur XMPP Upstream-Messaging. Weitere Informationen zum Senden von Nachrichten von Clientanwendungen finden Sie in der Dokumentation zu Ihrer Plattform.
Interpretieren einer vorgelagerten XMPP-Nachricht
In der folgenden Tabelle sind die Felder in der XMPP-Strophe beschrieben, die von FCM als Antwort auf Upstream-Nachrichtenanfragen von Client-Apps generiert wird.
Parameter | Nutzung | Beschreibung |
---|---|---|
from |
Erforderlich, String | Mit diesem Parameter wird angegeben, wer die Nachricht gesendet hat. Der Wert ist das Registrierungstoken der Client-App. |
category |
Erforderlich, String | Dieser Parameter gibt den Namen des Anwendungspakets der Clientanwendung an, von der die Nachricht gesendet wurde. |
message_id |
Erforderlich, String | Dieser Parameter gibt die eindeutige ID der Nachricht an. |
data |
Optional, String | Dieser Parameter gibt die Schlüssel/Wert-Paare der Nachrichtennutzlast an. |
ACK-Nachricht senden
In der folgenden Tabelle wird die ACK-Antwort beschrieben, die der App-Server als Reaktion auf eine Upstream-Nachricht, die der App-Server empfangen hat, an FCM senden soll.
Parameter | Nutzung | Beschreibung |
---|---|---|
to |
Erforderlich, String | Mit diesem Parameter wird der Empfänger einer Antwortnachricht angegeben. Der Wert muss ein Registrierungstoken der Client-App sein, die die vorgelagerte Nachricht gesendet hat. |
message_id |
Erforderlich, String | Dieser Parameter gibt an, für welche Nachricht die Antwort bestimmt ist. Der Wert muss der Wert message_id aus der entsprechenden vorgelagerten Nachricht sein. |
message_type |
Erforderlich, String | Dieser Parameter gibt eine ack -Nachricht von einem App-Server an CCS an.
Für vorgelagerte Nachrichten sollte der Wert immer auf ack festgelegt werden. |
FCM Servernachrichten (XMPP)
Dies ist eine Nachricht, die von FCM an einen App-Server gesendet wurde. Im Folgenden sind die Haupttypen von Nachrichten aufgeführt, die FCM an den App-Server sendet:
- Kontrolle: Diese von CCS generierten Nachrichten geben an, dass eine Aktion vom Anwendungsserver erforderlich ist.
In der folgenden Tabelle werden die Felder beschrieben, die in den Nachrichten enthalten sind, die CCS an einen App-Server sendet.
Parameter | Nutzung | Beschreibung |
---|---|---|
Gemeinsames Feld | ||
message_type |
Erforderlich, String | Dieser Parameter gibt den Typ der Nachricht an: „control“. Wenn er auf |
control_type |
Optional, String | Dieser Parameter gibt den Typ der Kontrollnachricht an, die von FCM gesendet wird. Derzeit wird nur |