Prácticas recomendadas para la administración de tokens de registro de FCM

Si usas las API de FCM para crear solicitudes de envío de manera programática, es posible que, con el tiempo, desperdicies recursos mediante el envío de mensajes a dispositivos inactivos con tokens de registro inactivos. Esta situación puede afectar los datos de entrega de mensajes informados en Firebase console o los datos que se exportan a BigQuery, en los que aparecen como una disminución dramática (pero no válida) de las tasas de entrega. En esta guía, se analizan algunas medidas que puedes tomar para garantizar una segmentación por mensajes eficaz y generar informes de entrega válidos.

Prácticas recomendadas básicas

Hay algunas prácticas fundamentales que debes seguir en cualquier app que use las API de FCM para crear solicitudes de envío de manera programática. Las siguientes son las principales prácticas recomendadas:

  • Almacena tokens de registro en tu servidor. Una función importante del servidor es realizar un seguimiento del token de cada cliente y mantener una lista actualizada de los tokens activos. Recomendamos implementar una marca de tiempo de token en el código y los servidores, y actualizarla en intervalos regulares.
  • Quita los tokens almacenados que quedan inactivos. Además de quitar tokens en casos obvios de respuestas de token no válidas, es probable que necesites supervisar otros signos de que el token está inactivo. En esta guía, se analizan algunas de las opciones disponibles para lograrlo.

Recupera y almacena tokens 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. Este es el token que debes incluir en las solicitudes de envío orientadas de la API o agregar a suscripciones a temas para temas de orientación.

Como se indica en nuestras guías de configuración del cliente, tu app debería recuperar este token en el inicio y guardarlo en tu servidor de apps junto con una marca de tiempo. Tu código y tus servidores deben implementar esta marca de tiempo, ya que los SDK de FCM no la proporcionan.

Además, es importante guardar el token en el servidor y actualizar la marca de tiempo cada vez que cambia, por ejemplo:

  • La app se restablece en un dispositivo nuevo.
  • El usuario desinstala y vuelve a instalar la app.
  • El usuario borra los datos de la app.

Detecta respuestas de token no válidas del backend de FCM

Asegúrate de detectar las respuestas de token no válidas de FCM y borrar de tu sistema los tokens de registro que se identifiquen como no válidos. Con la API de HTTP v1, estos mensajes de error pueden indicar que tu solicitud de envío se orientó a tokens inactivos o no válidos:

  • UNREGISTERED (HTTP 404)
  • INVALID_ARGUMENT (HTTP 400)

Consulta ErrorCodes para obtener más información.

Si recibes cualquiera de estas respuestas para un token de destino, es seguro borrar tu registro de este token, ya que nunca será válido. Sin embargo, ten en cuenta que todavía hay casos en los que un token no es válido, pero no tiene ninguna indicación. Por ejemplo, a veces el backend de FCM no puede verificar si un dispositivo se quedó sin conexión de forma permanente o no.

Asegura la actualización del token de registro

Determinar si un token está activo o inactivo no siempre es sencillo. Para abarcar todos los casos, debes adoptar un umbral sobre el momento en que consideres los tokens inactivos. Nuestra recomendación es dos meses. Es probable que cualquier token de más de dos meses sea un dispositivo inactivo, de otra manera, un dispositivo activo habría actualizado el token.

Actualiza los tokens periódicamente

Te recomendamos que recuperes y actualices todos los tokens de registro de forma periódica en tu servidor. Para ello, debes hacer lo siguiente:

  • Agrega la lógica de la aplicación a tu app cliente para recuperar el token actual con la llamada a la API correspondiente (como token(completion): para plataformas de Apple o getToken() para Android) y, luego, envía el token actual al servidor de apps para su almacenamiento (con marca de tiempo). Este podría ser un trabajo mensual configurado para abarcar todos los clientes y tokens.
  • Agrega lógica del servidor para actualizar la marca de tiempo del token a intervalos regulares, sin importar si el token cambió o no.

Sin importar el patrón de sincronización que sigas, asegúrate de actualizar los tokens de forma periódica. Es probable que una frecuencia de actualización de una vez al mes genere un buen equilibrio entre el impacto de la batería en comparación con la detección de tokens de registro inactivos. Cuando haces, esta actualización, también te aseguras de que cualquier dispositivo que se encuentre inactivo actualizará su registro cuando se vuelva a activar. No hay ningún beneficio en realizar la actualización con mayor frecuencia que una semanal.

Anula la suscripción de tokens inactivos de temas

Otra forma de administrar las suscripciones a temas es quitar los tokens de registro inactivos. Este proceso consta de dos pasos:

  1. Tu app debe volver a suscribirse a los temas una vez al mes o cuando cambie el token de registro. Esto forma una solución autorreparable, en la que las suscripciones vuelven a aparecer automáticamente cuando vuelve a activarse una app.
  2. Si una instancia de la app permanece inactiva durante 2 meses (o tu propio período de inactividad), debes anular la suscripción a los temas con el SDK de Firebase Admin para borrar la asignación de token o tema del backend de FCM.

El beneficio de estos dos pasos es que tus distribuciones se realizarán más rápido, ya que habrá menos tokens inactivos para distribuir, y tus instancias de apps inactivas se volverán a suscribir automáticamente cuando vuelvan a estar activas.

Mide el éxito de entrega

En general, recomendamos orientar los mensajes según las acciones observadas o capturadas desde las instancias de la app que se usan activamente. Esto es especialmente importante si envías mensajes con regularidad a temas con una gran cantidad de suscriptores. Si una parte de esos suscriptores está realmente inactiva, el impacto en tus estadísticas de entrega puede ser significativo con el tiempo.

Antes de orientar mensajes a un token, considera lo siguiente:

  • ¿Indican Google Analytics, los datos capturados en BigQuery o cualquier otro indicador de seguimiento que el token está activo?
  • ¿Se produjo un error al intentar realizar los intentos de entrega anteriores de forma constante durante un período?
  • ¿El token de registro se actualizó en tus servidores en los últimos dos meses?
  • En los dispositivos Android, ¿la API de datos de FCM informa un alto porcentaje de fallas en la entrega de mensajes debido a droppedDeviceInactive?

Para obtener más información sobre la entrega, consulta Información sobre la entrega de mensajes.