Cómo enviar mensajes ascendentes en iOS

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 enviarla al servidor de apps y agrega información adicional acerca del dispositivo y la app emisores.

Envía mensajes ascendentes desde una app cliente de iOS

Para enviar mensajes ascendentes al servidor, una app cliente de iOS redacta un mensaje, se conecta a FCM y llama a sendMessage.

Para conectarte, asigna a shouldEstablishDirectChannel el valor YES en AppDelegate. FCM administra la conexión, la cierra cuando la app pasa a segundo plano y vuelve a abrirla cuando la app está en primer plano.

Configura la llamada a sendMessage como se muestra a continuación:

Objective-C

[[FIRMessaging messaging] sendMessage:message
                                   to:receiver
                        withMessageID:messageID
                           timeToLive:ttl];

Swift

Messaging.messaging().sendMessage(message,
                                     to: to,
                                     withMessageID: messageId,
                                     timeToLive: ttl)

donde:

  • to es la dirección del servidor de la app receptora, con el formato SENDER_ID@gcm.googleapis.com.

  • withMessageID es un identificador de mensajes único. Todas las devoluciones de llamadas del receptor de mensajes se identifican en la base de este ID de mensaje.

  • message es un diccionario de claves y valores como strings. Cualquier par clave-valor que no sea una string se ignora.

  • timeToLive es el tiempo de vida. Si FCM no puede entregar el mensaje antes de que se cumpla el plazo, enviará una notificación de vuelta al cliente.

La biblioteca cliente de FCM guarda en caché el mensaje en la app cliente y lo envía cuando el cliente tiene una conexión de servidor activa. Cuando recibe el mensaje, el servidor de conexiones de FCM lo envía al servidor de apps.

Administra las devoluciones de llamada de los mensajes ascendentes?

Para administrar las devoluciones de llamadas ascendentes, agrega observadores que escuchen para detectar sendDataMessageFailure y sendDataMessageSuccess y, luego, recuperar la información de error de los selectores. En este ejemplo, FIRMessagingSendErrorNotification es el selector que se usa para administrar las devoluciones de llamada:

- (void)sendDataMessageFailure:(NSNotification *)notification {
  NSString *messageID = (NSString *)message.object;
}
- (void)sendDataMessageSuccess:(NSNotification *)notification {
  NSString *messageID = (NSString *)message.object;
  NSDictionary *userInfo = message.userInfo; // contains error info etc
}

Para optimizar el uso de la red, FCM agrupa en paquetes las respuestas a sendDataMessageFailure y sendDataMessageSuccess, por lo que la confirmación podría no ser 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.