Recibe mensajes en una app cliente de C++

Para recibir mensajes descendentes sencillos, en cada app cliente se deben implementar los métodos de la API de firebase::messaging::Listener.

Inicializa FCM

Debes inicializar FCM para acceder al token de registro o recibir mensajes.

Para inicializar FCM, llama a ::firebase::messaging::Initialize y proporciónale el objeto ::firebase::App, así como una implementación de la clase ::firebase::messaging::Listener.

MyListener my_listener_implementation;
::firebase::messaging::Initialize(app, &my_listener_implementation);

Accede al token de registro

Cuando se inicia tu app por primera vez, el SDK de FCM genera un token de registro para la instancia de la app cliente. Necesitarás acceder a este token si tu objetivo son los dispositivos individuales o si quieres crear grupos de dispositivos para FCM.

Puedes acceder al valor del token a través de la función virtual ::firebase::messaging::Listener::OnTokenReceived.

void OnTokenReceived(const char* token) {
  LogMessage("The registration token is `%s`", token);

  // TODO: If necessary send token to application server.
}

Recibe y maneja mensajes

Para recibir mensajes, la clase de tu objeto de escucha debe implementar la función virtual OnMessage.

Anula OnMessage

Cuando se anula el método ::firebase::messaging::Listener::OnMessage, puedes ejecutar acciones según el mensaje recibido y obtener los datos del mensaje:

void OnMessage(const ::firebase::messaging::Message& message) {
  LogMessage(TAG, "From: %s", message.from.c_str());
  LogMessage(TAG, "Message ID: %s", message.message_id.c_str());
}

Los mensajes pueden representar diferentes tipos de datos entrantes. Por lo general, los mensajes se envían a la app después de que el desarrollador los inicia. También se envían mensajes a tu app para representar eventos de mensajes enviados, de error de envío de mensajes y de mensajes borrados. Puedes reconocer estos eventos especiales si revisas el campo Message::message_type.

Mensajes borrados

Se envían a tu app cuando el servidor de FCM borra los mensajes pendientes. El Message::message_type será "deleted_messages". Los mensajes pueden borrarse en los siguientes casos:

  1. Hay demasiados mensajes almacenados en el servidor de FCM.

    Esto puede ocurrir cuando los servidores de una app envían varios mensajes no contraíbles a los servidores de FCM mientras el dispositivo está sin conexión.

  2. El dispositivo no se ha conectado en mucho tiempo y el servidor de apps envió recientemente (en las últimas 4 semanas) un mensaje a la app en ese dispositivo.

    Se recomienda que la app realice una sincronización completa con el servidor de apps después de recibir esta llamada.