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