Firebase Cloud Messaging (FCM) ofrece una amplia variedad de opciones de mensajería y capacidades. La información de esta página tiene por objetivo ayudarte a comprender los diferentes tipos de mensajes de FCM y lo que puedes hacer con ellos.
Mensajes de notificación con carga útil de datos opcional
Puedes enviar mensajes de notificación que contengan una carga útil opcional de pares clave-valor personalizados, ya sea de forma programática o a través de Firebase console. En el Compositor de Notifications, usa los campos Datos personalizados en Opciones avanzadas.
El comportamiento de la app cuando recibe mensajes que incluyen cargas de notificaciones y de datos depende de si la app se encuentra en segundo plano o en primer plano; en otras palabras, si está activa o no cuando recibe los mensajes.
- Cuando está en segundo plano, la app recibe la carga de notificaciones en la bandeja de notificaciones y solo maneja la carga de datos cuando el usuario presiona la notificación.
- Cuando está en primer plano, la app recibe un objeto de mensaje con ambas cargas disponibles.
El siguiente mensaje con formato JSON contiene las claves notification
y data
:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification":{ "title":"Portugal vs. Denmark", "body":"great match!" }, "data" : { "Nick" : "Mario", "Room" : "PortugalVSDenmark" } } }
Opciones de entrega
FCM proporciona un conjunto específico de opciones de entrega para los mensajes enviados a
dispositivos Android y habilita opciones similares en
plataformas de Apple y la Web. Por ejemplo, el comportamiento de los mensajes "contraíbles" es compatible con
Android a través de collapse_key
de FCM, con Apple a través de
apns-collapse-id
y con JavaScript/Web a través de Topic
. Para obtener detalles, consulta las descripciones de esta sección y la documentación de referencia relacionada.
Configuración de la prioridad de un mensaje
Tienes dos opciones para asignar una prioridad de entrega a los mensajes descendentes: prioridad normal y alta. Aunque el comportamiento difiere levemente entre las plataformas, la entrega de mensajes con prioridad normal y alta funciona de la siguiente manera:
Prioridad normal. Los mensajes con prioridad normal se entregan de inmediato cuando la app está en primer plano. En el caso de las apps en segundo plano, es posible que se retrase la entrega. Para los mensajes menos urgentes, como las notificaciones de correos electrónicos nuevos, la sincronización de IU o la sincronización de datos de app en segundo plano, selecciona la prioridad de entrega normal.
Prioridad alta. FCM intenta entregar los mensajes de alta prioridad de inmediato, incluso si el dispositivo está en modo Descanso. Los mensajes con prioridad alta son para el contenido visible para los usuarios y sensible al tiempo.
A continuación, se muestra un ejemplo de un mensaje con prioridad normal enviado a través del protocolo de HTTP v1 de FCM para notificar a un suscriptor de una revista que existe contenido nuevo disponible para descargar:
{ "message":{ "topic":"subscriber-updates", "notification":{ "body" : "This week's edition is now available.", "title" : "NewsMagazine.com", }, "data" : { "volume" : "3.21.15", "contents" : "http://www.news-magazine.com/world-week/21659772" }, "android":{ "priority":"normal" }, "apns":{ "headers":{ "apns-priority":"5" } }, "webpush": { "headers": { "Urgency": "high" } } } }
Para obtener más detalles sobre la configuración de prioridad de los mensajes en diferentes plataformas, revisa los siguientes artículos:
- Documentación de APNS
- Configura y administra la prioridad de los mensajes (Android)
- Urgencia de los mensajes push web
Casos de uso de importancia vital
Las APIs de FCM no están diseñadas para alertas de emergencia ni otras actividades de alto riesgo en las que el uso o un fallo en las APIs podría provocar la muerte, lesiones personales o daños ambientales (como la operación de plantas nucleares, el control de tráfico aéreo o y los sistemas de soporte vital). Cualquier uso está expresamente prohibido en virtud de la Sección 4. a. 7 de las Condiciones del Servicio. Solo tú eres responsable de garantizar que la app cumpla con las Condiciones y de cualquier daño que se derive del incumplimiento. Google proporciona las APIs "tal como están", y se reserva el derecho de descontinuar las APIs o cualquier parte, función o acceso a ellos, por cualquier motivo y en cualquier momento sin responsabilidad ni ninguna otra obligación hacia ti o tus usuarios.
Configuración de la duración de un mensaje
Por lo general, FCM entrega los mensajes apenas se envían. Sin embargo, esto no siempre es posible. Por ejemplo, si la plataforma es Android, el dispositivo puede estar apagado, sin conexión o no disponible. O bien, FCM puede retrasar los mensajes de manera intencional para evitar que una app consuma recursos en exceso y perjudique la duración de la batería.
Cuando esto sucede, FCM almacena el mensaje y lo entrega tan pronto como sea factible. Esto es correcto en la mayoría de los casos. Sin embargo, para algunas apps, enviar un mensaje tarde es lo mismo que no entregarlo. Por ejemplo, si el mensaje es una notificación de llamada entrante o chat de video, solo es relevante durante un breve período antes de que finalice la llamada. Por otra parte, si el mensaje es una invitación a un evento, es inútil recibirlo una vez finalizado el evento.
En Android y Web/JavaScript, puedes especificar la duración máxima de un mensaje. El valor debe ser una duración de entre 0 y 2,419,200 segundos (28 días). Esto indicará el período máximo durante el cual FCM almacenará y tratará de entregar el mensaje. Las solicitudes que no contienen este campo reciben de forma predeterminada el período máximo de cuatro semanas.
A continuación, se muestran algunos usos posibles para esta función:
- Llamadas entrantes de chat de video
- Invitaciones a eventos vencidas
- Eventos del calendario
Otra ventaja de especificar la duración de un mensaje es que
FCM no aplica la regulación de mensajes contraíbles a los mensajes con un
valor de tiempo de actividad de 0 segundos.
FCM proporciona el mejor esfuerzo para administrar los mensajes que se deben
enviar "ahora o nunca". Ten en cuenta que un
valor time_to_live
de
0 significa que los mensajes que no se pueden entregar de inmediato se descartan. Sin embargo, dado que estos mensajes nunca se almacenan, esto proporciona la mejor latencia para enviar mensajes de notificación.
A continuación, se muestra un ejemplo de una solicitud que incluye el TTL:
{ "message":{ "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", "data":{ "Nick" : "Mario", "body" : "great match!", "Room" : "PortugalVSDenmark" }, "apns":{ "headers":{ "apns-expiration":"1604750400" } }, "android":{ "ttl":"4500s" }, "webpush":{ "headers":{ "TTL":"4500" } } } }
Duración de un mensaje
Cuando un servidor de apps publica un mensaje en FCM y recibe un ID de mensaje de vuelta, no significa que el mensaje ya se entregó al dispositivo. Más bien, significa que se aceptó para la entrega. Lo que sucede con el mensaje después de que se acepta depende de muchos factores.
En el mejor de los casos, si el dispositivo está conectado a FCM, la pantalla está encendida y no existen restricciones de regulación, el mensaje se entrega de inmediato.
Si el dispositivo está conectado, pero en modo Descanso, FCM almacena un mensaje con
prioridad baja hasta que el dispositivo sale del modo Descanso. Ahí
es cuando la marca collapse_key
cumple una función: Si ya existe
un mensaje con la misma clave de contracción (y el mismo token de registro) almacenado
y a la espera de
ser entregado, el mensaje antiguo se descarta y el mensaje nuevo ocupa su lugar
(es decir, el mensaje nuevo contrae el mensaje antiguo). Sin embargo, si no se configura la clave de contracción, tanto el mensaje nuevo como el antiguo se almacenan para su futuro envío.
Si el dispositivo no está conectado a FCM, el mensaje se almacena hasta
que se establece una conexión (una vez más, se respetan las reglas de las claves de contracción). Cuando
se establece una conexión, FCM entrega todos los mensajes pendientes al
dispositivo. Si el dispositivo nunca se vuelve a conectar
(por ejemplo, si se restableció la configuración de fábrica), el tiempo de espera del mensaje finalmente se agota y
se descarta del almacenamiento de FCM. El tiempo de espera predeterminado es de cuatro semanas,
a menos que se configure la marca time_to_live
.
Para obtener más información útil sobre la entrega de un mensaje, revisa lo siguiente:
Para obtener más información sobre la entrega de mensajes en plataformas de Android o Apple, consulta el panel de informes de FCM, que registra la cantidad de mensajes que se enviaron y abrieron en dispositivos Apple y Android, junto con los datos de "impresiones" (las notificaciones que ven los usuarios) en las apps para Android.
En el caso de los dispositivos Android que tienen habilitado el canal de mensajería directa, si el dispositivo no se conectó a FCM durante más de un mes, FCM acepta el mensaje de todas formas, pero lo descarta de inmediato. Si el dispositivo se conecta en un plazo de cuatro semanas desde el último mensaje de datos que le enviaste, tu cliente recibe la devolución de llamada onDeletedMessages(). Entonces, la app puede manejar la situación de manera adecuada, por lo general a través de una solicitud de sincronización completa desde el servidor de apps.
Por último, si FCM intenta entregar un mensaje al dispositivo y
la app se desinstaló, FCM descarta el mensaje de inmediato y
anula la validez del token de registro. Los intentos posteriores de enviar un mensaje a ese
dispositivo darán como resultado un error NotRegistered
.
Credenciales
Según las funciones de FCM que implementes, es posible que necesites las siguientes credenciales de tu proyecto de Firebase:
ID del proyecto | Un identificador único para tu proyecto de Firebase, que se usa en las solicitudes al extremo HTTP v1 de FCM. Este valor está disponible en el panel Configuración de Firebase console. |
Token de registro | Una string de token único que identifica a cada instancia de la app cliente. El token de registro es obligatorio para la mensajería a dispositivos individuales y a grupos de dispositivos. Ten en cuenta que los tokens de registro se deben mantener en secreto. |
ID del remitente | Un valor numérico único que se genera cuando creas tu proyecto de Firebase disponible en la pestaña Cloud Messaging del panel Configuración de Firebase console. El ID de remitente se usa para identificar cada remitente que puede enviar mensajes a la app cliente. |
Token de acceso | Un token de OAuth 2.0 de corta duración que autoriza las solicitudes a la API de HTTP v1. Este token se asocia a una cuenta de servicio que pertenece a tu proyecto de Firebase. Para crear y rotar tokens de acceso, sigue los pasos que se describen en Autoriza solicitudes de envío. |