Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Envío de mensajes ascendentes en Android

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Si su servidor de aplicaciones implementa el protocolo del servidor de conexión XMPP , puede recibir mensajes ascendentes desde el dispositivo de un usuario a la nube. Para iniciar un mensaje ascendente, la aplicación cliente envía una solicitud que contiene lo siguiente:

  • La dirección del servidor de la aplicación receptora con el formato SENDER_ID@fcm.googleapis.com .
  • Un ID de mensaje que debe ser único para cada ID de remitente .
  • Los datos del mensaje que comprenden los pares clave-valor de la carga útil del mensaje.

Cuando recibe estos datos, FCM crea una estrofa XMPP para enviar al servidor de aplicaciones, agregando información adicional sobre el dispositivo y la aplicación de envío.

Enviar un mensaje ascendente desde una aplicación cliente de Android

Tu aplicación de Android puede enviar un mensaje ascendente mediante 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")
})

Manejar devoluciones de llamadas de mensajes ascendentes

Con FirebaseMessaging , puede implementar las devoluciones de llamada onMessageSent y onSendError para verificar el estado de los mensajes ascendentes. En casos de error, onSendError devuelve una SendException con un código de error. Por ejemplo, si el cliente intenta enviar más mensajes después de alcanzar el límite de 20 mensajes, devuelve SendException#ERROR_TOO_MANY_MESSAGES .

En los casos en que el dispositivo esté desconectado o el servicio FCM no esté disponible para reenviar mensajes ascendentes a su servidor, las instancias de la aplicación cliente de Android pueden acumular un máximo de 20 mensajes pendientes. Si dichos mensajes caducan antes de que FCM pueda enviarlos correctamente, onSendError devuelve SendException#ERROR_TTL_EXCEEDED .

Para optimizar el uso de la red, FCM procesa por lotes las respuestas a onMessageSent y onSendError , por lo que es posible que la confirmación no sea inmediata para cada mensaje.

Reciba mensajes XMPP en el servidor de aplicaciones

Cuando FCM recibe una llamada de mensajería ascendente desde una aplicación cliente, genera la estrofa XMPP necesaria para enviar el mensaje ascendente. FCM agrega la category from los campos, y luego envía una estrofa como la siguiente al servidor de aplicaciones:

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

Envío de un mensaje ACK

En respuesta a un mensaje ascendente como el anterior, el servidor de aplicaciones debe usar la misma conexión para enviar un mensaje ACK que contenga el ID de mensaje único. Si FCM no recibe un ACK, puede volver a intentar enviar el mensaje al servidor de la aplicación.

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

Consulte la Referencia del servidor de conexión XMPP para obtener más información sobre la sintaxis de mensajes ascendentes.