Envía mensajes ascendentes en Android

Si el servidor de apps implementa el protocolo del servidor de conexiones de XMPP, puede recibir mensajes ascendentes del dispositivo del usuario a la nube. Para iniciar un mensaje ascendente, la app cliente envía una solicitud que contiene lo siguiente:

  • La dirección del servidor de apps de destino en formato SENDER_ID@gcm.googleapis.com.
  • Un ID de mensaje que debe ser único para cada ID de remitente.
  • Los datos del mensaje, que incluyen los pares clave-valor de la carga útil del mensaje.

Cuando recibe estos datos, FCM crea una estrofa XMPP para enviar al servidor de apps y agrega información adicional acerca del dispositivo y la app emisores.

Cómo enviar un mensaje ascendente desde una app cliente de Android

Tu app para Android puede enviar un mensaje ascendente mediante el uso de FirebaseMessaging.send:

Java
Android

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

Kotlin
Android

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

Administra las devoluciones de llamada de los mensajes ascendentes?

Con FirebaseMessaging, puedes implementar las devoluciones de llamada onMessageSent y onSendError para verificar el estado de los mensajes ascendentes. Si se produce un error, onSendError muestra una SendException con un código de error. Por ejemplo, si el cliente intenta enviar más mensajes después de que se alcanza el límite de 20 mensajes, muestra SendException#ERROR_TOO_MANY_MESSAGES.

En casos en que el dispositivo esté sin conexión o que el servicio de FCM no esté disponible para reenviar mensajes ascendentes a tu servidor, las instancias de app cliente de Android pueden acumular un máximo de 20 mensajes pendientes. Si esos mensajes caducan antes de que FCM pueda enviarlos correctamente, onSendError muestra SendException#ERROR_TTL_EXCEEDED.

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

Recibe mensajes XMPP en el servidor de apps

Cuando FCM recibe una llamada de mensaje ascendente de una app cliente, genera la estrofa XMPP necesaria para enviar el mensaje ascendente. FCM agrega los campos category y from, y después envía una estrofa al servidor de apps como la que aparece a continuación:

<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ía un mensaje ACK

Como respuesta a un mensaje ascendente como el anterior, el servidor de apps debe usar la misma conexión para enviar un mensaje ACK que contenga un ID de mensaje único. Si FCM no recibe un ACK, es posible que intente enviar el mensaje al servidor de apps nuevamente.

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

Consulta la Referencia de servidores de conexión XMPP para obtener más información sobre la sintaxis de mensajes ascendentes.

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.