Práticas recomendadas de gerenciamento do token de registro do FCM

Se você usa as APIs do FCM para criar solicitações de envio de maneira programática, poderá perceber que, com o tempo, você está desperdiçando recursos enviando mensagens para dispositivos inativos com tokens de registro desatualizados. Essa situação pode afetar os dados de entrega de mensagens informados no Console do Firebase ou os dados exportados para o BigQuery, aparecendo como uma queda drástica (mas não válida) nas taxas de entrega. Veja neste guia algumas medidas que você pode tomar para ajudar a garantir uma segmentação de mensagens eficiente e relatórios de entrega válidos.

Práticas recomendadas

Há algumas práticas fundamentais que devem ser seguidas em qualquer aplicativo que use as APIs do FCM para criar solicitações de envio de maneira programática. As principais práticas recomendadas são:

  • Armazenar tokens de registro no servidor. Um papel importante para o servidor é controlar o token de cada cliente e manter uma lista atualizada de tokens ativos. Recomendamos implementar um carimbo de data/hora do token no código e nos servidores, além de atualizar esse carimbo em intervalos regulares.
  • Remover tokens armazenados que ficam desatualizados. Além de remover os tokens em casos óbvios de respostas de token inválidas, provavelmente será necessário monitorar outros sinais de que o token está desatualizado. Veja neste guia algumas das opções para conseguir fazer isso.

Recuperar e armazenar tokens de registro

Na primeira inicialização do aplicativo, o SDK do FCM gera um token de registro para a instância do aplicativo do cliente. Esse é o token que você precisa incluir nas solicitações de envio segmentadas da API ou adicionar a assinaturas de tópicos para segmentar tópicos.

Conforme observado nos guias de configuração do cliente, o aplicativo precisa recuperar esse token na primeira inicialização e salvá-lo no servidor do aplicativo junto com um carimbo de data/hora. Esse carimbo de data/hora precisa ser implementado pelo código e pelos servidores, já que não é fornecido pelos SDKs do FCM.

Além disso, é importante salvar o token no servidor e atualizar o carimbo de data/hora sempre que ele for alterado, como quando:

  • o app é restaurado em um novo dispositivo;
  • o usuário desinstala/reinstala o app;
  • o usuário limpa os dados do app.

Detectar respostas de token inválidas no back-end do FCM

Não se esqueça de detectar respostas de token inválidas no FCM e responder excluindo do sistema quaisquer tokens de registro inválidos. Com a API HTTP v1, essas mensagens de erro podem indicar que a solicitação de envio segmenta tokens desatualizados ou inválidos:

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

Consulte ErrorCodes para mais informações.

Se você receber uma dessas respostas para um token de destino, poderá excluir o registro desse token com segurança, porque ele nunca será válido novamente. No entanto, lembre-se de que ainda haverá casos em que um token realmente será inválido, mas não haverá indicação dele. Por exemplo, às vezes o back-end do FCM não consegue verificar se um dispositivo está off-line permanentemente.

Como garantir a atualização do token de registro

Determinar se um token está atualizado ou desatualizado nem sempre é simples. Para abranger todos os casos, você precisa adotar um limite para considerar que os tokens estão desatualizados. Recomendamos um limite de dois meses. Qualquer token com mais de dois meses provavelmente será um dispositivo inativo. Um dispositivo ativo teria atualizado o token.

Atualizar tokens regularmente

Recomendamos que você recupere e atualize periodicamente todos os tokens de registro no servidor. Para isso:

  • Adicione uma lógica de aplicativo no aplicativo cliente para recuperar o token atual usando a chamada de API apropriada, como token(completion): nas plataformas Apple ou getToken() no Android. Depois, envie o token atual para o servidor do aplicativo para armazenamento (com carimbo de data/hora). Isso poderia ser um job mensal configurado para cobrir todos os clientes/tokens.
  • Adicione uma lógica de servidor para atualizar o carimbo de data/hora do token em intervalos regulares, mesmo que ele não tenha sido alterado.

Seja qual for o padrão de tempo seguido, não se esqueça de atualizar os tokens periodicamente. Uma frequência de atualização de uma vez por mês provavelmente estabelece um bom equilíbrio entre o impacto na bateria e a detecção de tokens de registro inativos. Ao fazer essa atualização, você também garante que qualquer dispositivo que fique inativo atualizará o registro quando ele ficar ativo novamente. Não há benefícios em fazer a atualização mais de uma vez na semana.

Cancelar a assinatura de tokens desatualizados nos tópicos

Gerenciar assinaturas de tópicos para remover tokens de registro desatualizados é outro ponto a ser considerado. Isso envolve duas etapas:

  1. O aplicativo precisa assinar novamente os tópicos uma vez por mês e/ou sempre que o token de registro mudar. Isso forma uma solução de autocorreção, em que as assinaturas reaparecem automaticamente quando um aplicativo é ativado novamente.
  2. Se uma instância do aplicativo ficar inativa por dois meses (ou sua própria janela de inatividade), cancele a inscrição nos tópicos usando o SDK Admin do Firebase para excluir o mapeamento do token/tópico do back-end do FCM.

A vantagem dessas duas etapas é que os fanouts ocorrerão mais rapidamente porque há menos tokens desatualizados para distribuir, e as instâncias dos aplicativos desatualizados assinarão novamente automaticamente quando estiverem ativas.

Como avaliar o sucesso da entrega

Geralmente, recomendamos segmentar mensagens com base em ações observadas ou capturadas de instâncias de aplicativos usadas ativamente. Isso é especialmente importante se você costuma enviar mensagens para tópicos com um grande número de inscritos. Se parte deles estiver inativa, o impacto nas estatísticas da entrega poderá ser significativo ao longo do tempo.

Antes de segmentar mensagens para um token, considere:

  • O Google Analytics, os dados capturados no BigQuery ou outros sinais de rastreamento indicam que o token está ativo?
  • As tentativas de entrega anteriores falharam de forma consistente durante um período?
  • O token de registro foi atualizado nos servidores nos últimos dois meses?
  • Em dispositivos Android, a API FCM Data informa uma alta porcentagem de falhas na entrega de mensagens devido a droppedDeviceInactive?

Para mais informações sobre a entrega, consulte Noções básicas sobre a entrega de mensagens.