Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Invio di messaggi a monte su Android

Se il server delle applicazioni implementa il protocollo XMPP Connection Server , può ricevere messaggi a monte dal dispositivo di un utente al cloud. Per avviare un messaggio a monte, l'app client invia una richiesta contenente quanto segue:

  • L'indirizzo del server dell'app ricevente nel formato SENDER_ID@fcm.googleapis.com .
  • Un ID messaggio che dovrebbe essere univoco per ciascun 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.

Invia un messaggio a monte da un'app client Android

La tua app Android può inviare un messaggio a monte utilizzando FirebaseMessaging.send :

Giava

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@fcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action","SAY_HELLO")
        .build());

Kotlin + KTX

val fm = FirebaseMessaging.getInstance()
fm.send(RemoteMessage.Builder("$SENDER_ID@fcm.googleapis.com")
        .setMessageId(Integer.toString(messageId))
        .addData("my_message", "Hello World")
        .addData("my_action", "SAY_HELLO")
        .build())

Gestire i callback dei messaggi upstream

Con FirebaseMessaging , è possibile implementare i callback onMessageSent e onSendError per verificare lo stato dei messaggi upstream. In casi di errore, onSendError restituisce SendException con un codice di errore. Ad esempio, se il client tenta di inviare più messaggi dopo aver raggiunto il limite di 20 messaggi, restituisce SendException#ERROR_TOO_MANY_MESSAGES .

Nei casi in cui il dispositivo è offline o il servizio FCM non è disponibile per inoltrare messaggi a monte al server, le istanze delle app client Android possono accumulare un massimo di 20 messaggi in sospeso. Se tali messaggi scadono prima che FCM possa inviarli correttamente, onSendError restituisce SendException#ERROR_TTL_EXCEEDED .

Per ottimizzare l'utilizzo della rete, FCM onMessageSent batch le risposte a onMessageSent e onSendError , pertanto il riconoscimento potrebbe non essere immediato per ciascun messaggio.

Ricevi messaggi XMPP sul server delle 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 la category e from campi, quindi invia una stanza come la seguente al server delle app:

<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 sopra, l'app server deve utilizzare la stessa connessione per inviare un messaggio ACK contenente l'ID messaggio univoco. Se FCM non riceve un ACK, potrebbe riprovare a inviare il messaggio al server delle app.

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to":"REGID",
      "message_id":"m-123"
      "message_type":"ack"
  }
  </gcm>
</message>

Vedere la XMPP Connection Server Reference per ulteriori informazioni sulla sintassi del messaggio upstream.