Se il server dell'app implementa il protocollo XMPP Connection Server, può ricevere messaggi in upstream dal dispositivo di un utente al cloud. Per avviare un messaggio upstream, l'app client invia una richiesta contenente quanto segue:
- L'indirizzo del server dell'app di ricezione nel formato
SENDER_ID@fcm.googleapis.com
. - Un ID messaggio che deve essere univoco per ogni ID mittente.
- I dati del messaggio che comprendono le coppie chiave-valore del payload del messaggio.
Quando riceve questi dati, FCM crea una stanza XMPP da inviare al server dell'app, aggiungendo alcune informazioni aggiuntive sul dispositivo e sull'app di invio.
Inviare un messaggio in upstream da un'app client Unity
Per inviare messaggi in upstream al server, un'app client Unity compone un messaggio e chiama Send
come mostrato:
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);
dove:
message.To
è l'indirizzo del server app di destinazione nel formatoSENDER_ID@fcm.googleapis.com
.message.MessageId
è un identificatore univoco del messaggio. Tutti i callback del destinatario del messaggio vengono identificati in base a questo ID messaggio.message.Data
è una mappa di chiavi e valori sotto forma di stringhe.message.TimeToLive
specifica per quanto tempo (in secondi) il messaggio deve essere conservato nello spazio di archiviazione FCM se il dispositivo è offline. Se FCM non riesce a consegnare il messaggio prima del raggiungimento di questa scadenza, invia nuovamente una notifica al cliente.
La libreria client FCM memorizza nella cache il messaggio nell'app client e lo invia quando il client ha una connessione al server attiva. Al ricevimento del messaggio, FCM lo invia al server dell'app.
Ricevere messaggi XMPP sul server dell'app
Quando FCM riceve una chiamata di messaggistica upstream da un'app client, genera la stanza XMPP necessaria per l'invio del messaggio upstream.
FCM aggiunge i campi category
e from
, quindi invia al server dell'app una stanza come la seguente:
<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>
Invio di un messaggio ACK
In risposta a un messaggio upstream come quello riportato sopra, il server dell'app deve utilizzare la stessa connessione per inviare un messaggio di ACK contenente l'ID messaggio univoco. Se FCM non riceve un ACK, potrebbe riprovare a inviare il messaggio al server dell'app.
<message id=""> <gcm xmlns="google:mobile:data"> { "to":"REGID", "message_id":"m-123" "message_type":"ack" } </gcm> </message>
Per ulteriori informazioni sulla sintassi dei messaggi a monte, consulta il riferimento al server di connessione XMPP.