Tipos de mensagens do Firebase Cloud Messaging

Com o FCM, você pode enviar dois tipos de mensagens aos apps cliente:

  • As mensagens de notificação, semelhantes às "mensagens de exibição", são processadas automaticamente pelo SDK do FCM.
  • Mensagens de dados, que são tratadas pelo app cliente.

As mensagens de notificação contêm um conjunto predefinido de chaves visíveis pelo usuário e podem conter um payload de dados opcional. As mensagens de dados, por outro lado, contêm somente pares de chave-valor personalizados definidos pelo usuário. O payload máximo para ambos os tipos de mensagem é de 4096 bytes, exceto ao enviar mensagens do console do Firebase, que impõe um limite de 1.000 caracteres.

Cenário de uso Como enviar
Mensagem de notificação O SDK do FCM exibe a mensagem para os dispositivos dos usuários finais em nome do app cliente, quando ele está em execução em segundo plano. Se o app estiver em execução em primeiro plano quando a notificação for recebida, o código do aplicativo vai determinar o comportamento.
  1. Em um ambiente confiável, como o Cloud Functions ou o servidor do app, use o Firebase Admin SDK ou a API HTTP v1. Defina a chave notification. Pode ter payload de dados opcional. Sempre recolhível.

    Confira alguns exemplos de notificações de exibição e envie payloads de solicitações.

  2. Use o Editor do Notificações: insira o texto da mensagem, o título etc. e envie. Adicione payload de dados opcional fornecendo dados personalizados.
Mensagem de dados O app cliente é responsável pelo processamento de mensagens de dados. As mensagens de dados têm apenas pares de chave-valor personalizados sem nomes de chave reservados (veja abaixo). Em um ambiente confiável, como o Cloud Functions ou o servidor do app, use o Firebase Admin SDK ou a API HTTP v1. Na solicitação de envio, defina a chave data.

Use mensagens de notificação quando quiser que o SDK do FCM faça a exibição de uma notificação automaticamente quando seu app estiver em execução em segundo plano. O FCM pode enviar uma mensagem de notificação com um payload de dados opcional. Nesses casos, o FCM mostra o payload de notificação, e o app cliente processa o payload de dados.

Use mensagens de dados quando quiser processar as mensagens com seu próprio código de app cliente.

Mensagens de notificação

É possível enviar mensagens de notificação usando o console Firebase, o Firebase Admin SDK ou a API HTTP v1 do FCM. O console do Firebase oferece testes A/B com base em análise para ajudar você a refinar e melhorar as mensagens de notificação.

Para enviar mensagens de notificação usando a API HTTP v1 Firebase Admin SDK ou FCM, defina a chave notification com o conjunto predefinido de opções chave-valor da mensagem de notificação. Use o exemplo a seguir para formatar uma mensagem de notificação em um app de mensagens instantâneas.

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

As mensagens de notificação são entregues na bandeja de notificação quando o app está em segundo plano. Para apps em primeiro plano, as mensagens são processadas por uma função de retorno de chamada.

Consulte a documentação de referência do objeto de notificação da API HTTP v1 do FCM para ver a lista completa de chaves predefinidas disponíveis para criar mensagens de notificação.

Mensagens de dados

Você decide como usar a carga útil do FCM data para implementar o esquema de criptografia de sua escolha. Não use palavras reservadas nos seus pares de chave-valor personalizados. As palavras reservadas incluem from, message_type ou qualquer palavra que comece com google., gcm. ou gcm.notification..

O exemplo a seguir mostra o uso do campo de dados de nível superior ou comum, que é interpretado por clientes em todas as plataformas que recebem a mensagem. Em cada plataforma, o app cliente recebe o payload de dados em uma função de callback.

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}