Wenn Ihr App-Server das XMPP Connection Server-Protokoll implementiert, kann er Upstream-Nachrichten vom Gerät eines Nutzers an die Cloud empfangen. Um eine Upstream-Nachricht zu initiieren, sendet die Client-App eine Anfrage mit den folgenden Angaben:
- Die Adresse des empfangenden App-Servers im Format
SENDER_ID@fcm.googleapis.com
. - Eine Nachrichten-ID, die für jede Absender-ID eindeutig sein muss.
- Die Nachrichtendaten, die die Schlüssel/Wert-Paare der Nutzlast der Nachricht enthalten.
Wenn FCM diese Daten empfängt, erstellt es eine XMPP-Strophe, die an den App-Server gesendet wird. Dabei werden einige zusätzliche Informationen zum sendenden Gerät und zur App hinzugefügt.
Upstream-Nachricht von einer Unity-Client-App senden
Um Nachrichten an den Server zu senden, verfasst eine Unity-Client-App eine Nachricht und ruft Send
auf, wie hier gezeigt:
Firebase.Messaging.Message message;
message.To = SENDER_ID + "@fcm.googleapis.com";
message.MessageId = get_unique_message_id();
message.Data("my_message", "Hello World");
message.Data("my_action", "SAY HELLO");
message.TimeToLive = kTimetoLive;
Firebase.Messaging.FirebaseMessaging.Send(message);
Dabei gilt:
message.To
ist die Adresse des empfangenden App-Servers im FormatSENDER_ID@fcm.googleapis.com
.message.MessageId
ist eine eindeutige Nachrichten-ID. Alle Rückrufe für den Nachrichtenempfänger werden anhand dieser Nachrichten-ID identifiziert.message.Data
ist eine Zuordnung von Schlüsseln und Werten als Strings.Mit
message.TimeToLive
wird angegeben, wie lange (in Sekunden) die Nachricht im FCM-Speicher aufbewahrt werden soll, wenn das Gerät offline ist. Wenn FCM die Nachricht nicht vor Ablauf dieser Frist zuzustellen kann, wird eine Benachrichtigung an den Client zurückgesendet.
Die FCM-Clientbibliothek speichert die Nachricht in der Client-App im Cache und sendet sie, wenn der Client eine aktive Serververbindung hat. Wenn FCM die Nachricht empfängt, sendet sie sie an den App-Server.
XMPP-Nachrichten auf dem App-Server empfangen
Wenn FCM einen Upstream-Messaging-Aufruf von einer Client-App erhält, generiert er die erforderliche XMPP-Strophe zum Senden der Upstream-Nachricht.
FCM fügt die Felder category
und from
hinzu und sendet dann eine Zeile wie die folgende an den App-Server:
<message id=""> <gcm xmlns="google:mobile:data"> { "category":"com.example.yourapp", // to know which app sent it "data": { "hello":"world", }, "message_id":"m-123", "from":"REGID" } </gcm> </message>
ACK-Nachricht senden
Als Antwort auf eine solche Upstream-Nachricht muss der App-Server dieselbe Verbindung verwenden, um eine ACK-Nachricht mit der eindeutigen Nachrichten-ID zu senden. Wenn FCM keine Bestätigung erhält, versucht er möglicherweise noch einmal, die Nachricht an den App-Server zu senden.
<message id=""> <gcm xmlns="google:mobile:data"> { "to":"REGID", "message_id":"m-123" "message_type":"ack" } </gcm> </message>
Weitere Informationen zur Syntax von Upstream-Nachrichten findest du in der XMPP-Verbindungsserverreferenz.