Você tem duas opções para atribuir a prioridade de entrega para mensagens downstream no Android: prioridade normal e alta. A entrega de mensagens de prioridade normal e alta funciona da seguinte forma:
Prioridade normal. Essa é a prioridade padrão para mensagens de dados e notificações. As mensagens com prioridade normal são entregues imediatamente quando o dispositivo não está em suspensão. Quando o dispositivo está no modo Soneca, a entrega pode ser adiada para economizar bateria até que esse modo seja alterado. Para mensagens menos afetadas pelo tempo, como enviar notificações de novos e-mails, manter a sincronização da sua IU ou sincronizar os dados do app em segundo plano, escolha a prioridade normal de entrega.
Alta prioridade. O FCM tenta enviar mensagens de prioridade alta imediatamente, permitindo que o FCM ative um dispositivo em suspensão quando necessário e execute tarefas de processamento limitadas (inclusive acesso muito limitado à rede) As mensagens de prioridade alta devem resultar geralmente na interação do usuário com o app ou as notificações dele.
Como decidir entre mensagens de prioridade alta e normal
Embora as mensagens de prioridade normal sejam adequadas para atualizações gerais, escolha a prioridade alta quando precisar garantir a entrega imediata de assuntos ou ações urgentes. Como o tempo de entrega de mensagens de prioridade normal pode ser afetado pelo modo de suspensão, definir a maioria das notificações visíveis do usuário como de alta prioridade garante que elas sejam entregues imediatamente. Por exemplo, notificações como mensagens de chat, problemas com uma conta ou atualizações de entrega de comida precisam ter prioridade alta.
Processamento de mensagens de prioridade alta e normal
Para mensagens de prioridade alta e normal recebidas em um dispositivo Android, são concedidos vários segundos para processar o payload da mensagem no
gerenciador onMessageReceived
, com um pouco mais de tempo alocado para mensagens de prioridade
alta do que para as de prioridade normal. Esse tempo deve ser longo o suficiente
para renderizar uma notificação imediatamente. Se você precisar fazer algum trabalho extra, como
carregar uma imagem do armazenamento do dispositivo ou chamar seus servidores para coletar
conteúdo adicional, será necessário seguir outras etapas.
O método onMessageReceived
é chamado em uma linha de execução de worker separada. Como prática recomendada, processe o payload da mensagem e mostre uma notificação imediatamente no método onMessageReceived
. Não faça
chamadas de rede assíncronas adicionais nem processe payloads em uma
thread separada no método onMessageReceived
. Isso pode fazer com que seu
aplicativo fique fora de um
ciclo de vida de processo válido
antes que o payload seja totalmente processado. Se isso acontecer, algumas mensagens do FCM
enviadas podem resultar em notificações atrasadas ou ausentes.
Se você precisar de mais tempo para processar a mensagem, por exemplo, para buscar
um imageUrl
contido no payload da mensagem, use uma
construção como WorkManager
ou um serviço em primeiro plano para estender o ciclo de vida
do aplicativo. Use as orientações a seguir ao
substituir o método onMessageReceived
para verificar se as notificações foram totalmente processadas.
- Para notificações de alta prioridade: inicie um
job priorizado
usando o
WorkManager
do Android para verificar se a notificação de alta prioridade recebe tempo de processamento prioritário e se a renderização da notificação é concluída. A boa notícia é que, se sua preocupação for esgotar as cotas de jobs acelerados como resultado do processamento de FCM de alta prioridade, não precisa esquentar a cabeça. Há uma breve isenção para jobs acelerados programados imediatamente após o envio de umonMessageReceived
do FCM de alta prioridade. - Para notificações de prioridade normal: inicie um
WorkRequest
regular usando oWorkManager
do Android. Isso vai verificar se o trabalho adicional necessário para processar sua notificação é feito de tempos em tempos, sem usar o processamento priorizado e causar problemas desnecessários de uso da bateria.
Como definir a prioridade das mensagens
É possível enviar notificações aos usuários usando o Admin SDK, a API REST FCM e o console Firebase. Para mudar a configuração de prioridade da Admin SDK e da API REST da FCM, é necessário atualizar o payload JSON da mensagem. Use o exemplo de código abaixo para saber como definir a prioridade como alta. Para notificações enviadas do console, não há suporte para definir campos de notificação específicos do Android.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
Testar as notificações de alta prioridade no modo Soneca
Para garantir que as notificações de alta prioridade sejam recebidas e processadas corretamente quando recebidas por um usuário, siga estas instruções para testar as notificações:
- Defina o dispositivo no modo Soneca usando as instruções em Testar seu app com a Soneca.
- Acesse o token de registro FCM do app no dispositivo de teste. Para mais informações sobre como acessar o token, consulte Enviar uma mensagem de teste para um app em segundo plano.
- Depois de ter o token FCM, envie a notificação de alta prioridade para o dispositivo de teste usando o código de envio de notificação FCM ou um comando cURL que tenha parâmetros de configuração correspondentes à notificação de alta prioridade.
Redução de prioridade de FCM de alta prioridade no Android
As mensagens de prioridade alta no Android são destinadas a conteúdo urgente e visível pelo usuário. Além disso, elas precisam gerar notificações voltadas para o usuário. Se FCM detecta um padrão no qual as mensagens não resultam em notificações voltadas para o usuário o Google Play Services pode reduzir a prioridade suas mensagens para normal ou delegá-las.
O FCM usa sete dias de comportamento da mensagem ao determinar se é necessário remover a prioridade ou usar o proxy. Essa decisão é feita individualmente para cada instância do aplicativo. Se, em resposta a mensagens de prioridade alta, as notificações forem exibidas de maneira visível para o usuário, suas futuras mensagens de prioridade alta não serão afetadas.
Delegação de notificações com o Google Play Services
As mensagens de notificação de alta prioridade que atendem a determinados critérios são usadas com proxy pelo Google Play Services em vez de serem priorizadas. Isso significa que as notificações são exibidas pelo Google Play Services em nome do app, sem a necessidade de iniciá-lo. Isso é feito para oferecer uma experiência do usuário geral melhor em dispositivos Android.
As mensagens de notificação com proxy introduzem mudanças na forma como as análises relacionadas às mensagens recebidas são informadas:
- Para que a análise de notificações com proxy seja informada, seu app deve usar o SDK do FCM versão 24.0.0 ou mais recente.
- Você pode notar atrasos ou quedas no número de mensagens recebidas em comparação com o número antes da introdução das notificações com proxy. Isso ocorre porque as análises para notificações com proxy são apenas relatadas quando o aplicativo é iniciado e podem não ser relatadas se o Notificações não abrir o app.
O proxy de mensagens de notificação dessa maneira é o comportamento padrão para apps que usam o Android Q em diante e o Google Play Services versão 19054000 ou mais recente. As mensagens enviadas pela API HTTP v1 são encaminhadas com proxy, mas as mensagens enviadas pelo Console do Firebase ou pelas APIs legadas não são encaminhadas com proxy. Esse recurso está atualmente na versão Beta e está sujeito a mudanças.
Embora recomendemos deixar a delegação ativada para aproveitar os benefícios para a bateria e a memória do dispositivo, você pode desativar esse comportamento de qualquer uma das seguintes maneiras:
- No nível do app: no manifesto do app, adicione a diretiva
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>
. - No nível da instância do app: para a instância do app, defina
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>
no fluxo da interface do app, dependendo do caso de uso específico. - Por mensagem: defina a chave
proxy
comoDENY
no objetoAndroidNotification
para a solicitação de envio.
Como avaliar a redução de prioridade da mensagem no Android
Mensagens individuais. Na entrega, é possível determinar se uma mensagem individual foi priorizada ou não, comparando a prioridade entregue do getPriority() com a prioridade original do getOriginalPriority()
Todas as mensagens. A API Aggregate Delivery Data do FCM pode informar qual porcentagem das suas mensagens para Android estão tendo a prioridade reduzida. Algumas mensagens podem ser omitidas dos relatórios de dados agregados, mas, no geral, fornecem uma visão global das taxas de redução de prioridade das mensagens. Consulte nosso artigo sobre dados de entrega agregados para mais informações e exemplos de código para consultar a API. Também é possível saber mais em API Explorer.
Notificações com proxy. As notificações com proxy não serão contabilizadas nas métricas atuais de exibição do FCM ou do GA. Por isso, pode haver uma queda de até 15% nas métricas de entrega de notificações. Para gerar relatórios sobre mensagens com proxy, use a API Aggregate Delivery Data do FCM. O
ProxyNotificationInsightPercents
informa a porcentagem de erros nas notificações com proxy, bem como detalhes sobre mensagens que não puderam ser enviadas com proxy.
Solução de problemas de atrasos de notificação
Verifique se a instância do app tem as notificações ativadas. Se o usuário tiver desativado a permissão de notificação do seu app, nenhuma das notificações será postada. Por isso, suas mensagens não serão priorizadas. Verifique se as notificações estão ativadas antes de enviar mensagens de prioridade alta para uma instância do aplicativo.
Evite fazer outras chamadas de rede ao processar a notificação. Como uma pequena parcela dos dispositivos móveis Android funciona em redes de alta latência, evite abrir uma conexão com seus servidores antes de exibir uma notificação. Retornar uma chamada ao servidor antes de o tempo de processamento permitido terminar pode ser arriscado para usuários em redes de alta latência.
Em vez disso, inclua o conteúdo da notificação na mensagem do FCM e exiba-o imediatamente. Para sincronizar conteúdo extra no aplicativo para Android, programe uma tarefa com o WorkManager (em inglês) para lidar com isso em segundo plano.