Establece 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, es posible que el dispositivo no esté disponible o que FCM retrase los mensajes de manera intencional para evitar que una app consuma recursos en exceso y perjudique la duración de la batería.

En estos casos, FCM almacena el mensaje y lo entrega lo antes posible. Si bien esto es correcto en la mayoría de los casos, hay algunas apps que requieren que las notificaciones se envíen sin demora. Por ejemplo, una notificación de una llamada entrante o una invitación a un evento.

En Android y Web 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. De forma predeterminada, las solicitudes que no contienen este campo duran un período máximo de cuatro semanas.

En iOS, puedes establecer el encabezado apns-expiration en el objeto ApnsConfig. Para obtener más detalles, consulta la documentación de Apple sobre el envío de solicitudes de notificación a APNs.

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. Ten en cuenta que un valor ttl 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. El momento en que se entrega el mensaje depende de muchos factores.

Si el dispositivo está conectado, pero en modo Descanso, FCM almacena un mensaje con prioridad baja hasta que el dispositivo sale del modo Descanso. Si se configura collapse_key y hay un mensaje existente con la misma clave de contracción y el mismo token de registro a la espera de ser entregado, se descarta el mensaje anterior y el mensaje nuevo ocupa su lugar. 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. Cuando se establece una conexión, FCM entrega todos los mensajes pendientes al dispositivo. Si el dispositivo nunca se vuelve a conectar, 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 ttl. Si la app se desinstaló cuando FCM intenta entregar un mensaje al dispositivo, 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.

En el caso de los dispositivos Android, si el dispositivo no se conecta 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().

Para obtener más información sobre la entrega de mensajes en plataformas de Apple o Android, puedes usar el panel de informes de FCM, en el que se registra la cantidad de mensajes que se enviaron y abrieron en dispositivos Apple y Android, junto con datos de impresiones para las apps para Android.