Catch up on everthing we announced at this year's Firebase Summit. Learn more

Envoi de messages en amont sur Android

Si votre serveur app met en œuvre la connexion XMPP serveur protocole, il peut recevoir des messages en amont de l'appareil d'un utilisateur dans le nuage. Pour lancer un message en amont, l'application cliente envoie une requête contenant les éléments suivants :

  • L'adresse du serveur d'applications de réception dans le format SENDER_ID@fcm.googleapis.com .
  • Un ID de message qui doit être unique pour chaque ID de l' expéditeur .
  • Les données du message comprenant les paires clé-valeur de la charge utile du message.

Lorsqu'il reçoit ces données, FCM crée une strophe XMPP à envoyer au serveur d'applications, en ajoutant des informations supplémentaires sur l'appareil et l'application expéditeurs.

Envoyer un message en amont depuis une application cliente Android

Votre application Android peut envoyer un message en amont à l' aide FirebaseMessaging.send :

Java

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 = Firebase.messaging
fm.send(remoteMessage("$SENDER_ID@fcm.googleapis.com") {
    setMessageId(messageId.toString())
    addData("my_message", "Hello World")
    addData("my_action", "SAY_HELLO")
})

Gérer les rappels de messages en amont

Avec FirebaseMessaging , vous pouvez mettre en œuvre les callbacks onMessageSent et onSendError pour vérifier l'état des messages en amont. En cas d'erreur, onSendError renvoie un SendException avec un code d'erreur. Par exemple, si les tentatives de client d'envoyer plus de messages après la limite de 20 messages est atteint, il retourne SendException#ERROR_TOO_MANY_MESSAGES .

Dans les cas où l'appareil est hors ligne ou que le service FCM n'est pas disponible pour transférer les messages en amont vers votre serveur, les instances d'application client Android peuvent accumuler un maximum de 20 messages en attente. Si ces messages viennent à échéance avant la FCM peut envoyer avec succès les, onSendError retourne SendException#ERROR_TTL_EXCEEDED .

Pour optimiser l' utilisation du réseau, lots FCM réponses à onMessageSent et onSendError , de sorte que la reconnaissance ne peut pas être immédiate pour chaque message.

Recevoir des messages XMPP sur le serveur d'applications

Lorsque FCM reçoit un appel de messagerie en amont d'une application cliente, il génère la strophe XMPP nécessaire pour envoyer le message en amont. La FCM ajoute la category et from champs, et envoie ensuite une section comme suit au serveur d'applications:

<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>

Envoi d'un message ACK

En réponse à un message en amont comme ci-dessus, le serveur d'applications doit utiliser la même connexion pour envoyer un message ACK contenant l'ID de message unique. Si FCM ne reçoit pas d'ACK, il peut réessayer d'envoyer le message au serveur d'applications.

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

Voir la connexion XMPP serveur de référence pour plus d' informations sur la syntaxe des messages en amont.