Neste documento, você encontra uma referência para a sintaxe XMPP usada para passar mensagens entre o servidor do app, os apps cliente e o Firebase Cloud Messaging (FCM). O servidor do app precisa se conectar a estes pontos de extremidade:
// Production fcm-xmpp.googleapis.com:5235 // Testing fcm-xmpp.googleapis.com:5236
Os parâmetros e as opções disponíveis enquadram-se nas seguintes categorias:
- sintaxe de mensagens downstream
- códigos de resposta de erro de mensagens downstream
- sintaxe de mensagens upstream
- mensagens de controle do FCM
Sintaxe de mensagens downstream
Nesta seção, você encontra a sintaxe para envio de mensagens dowstream.
Mensagens XMPP downstream (JSON)
Na tabela a seguir, estão listados os destinos, as opções e o payload para mensagens JSON XMPP.
Parâmetro | Uso | Descrição | |
---|---|---|---|
Destino | |||
to |
Opcional, string |
Este parâmetro especifica o destinatário de uma mensagem.
O valor pode ser o token de registro de um dispositivo, a chave de notificação de um grupo
de dispositivos ou um único tópico (prefixado com
|
|
condition |
Opcional, string | Este parâmetro especifica uma expressão lógica de condições que determina o destino da mensagem. Condição aceita: tópico, formatado como "'seuTópico' em tópicos". Esse valor não diferencia minúsculas de maiúsculas. Operadores compatíveis: |
|
Opções | |||
message_id |
Obrigatório, string | Com esse parâmetro, uma mensagem é identificada de modo exclusivo em uma conexão XMPP. |
|
collapse_key |
Opcional, string | Um parâmetro identifica um grupo de mensagens (p.ex., com
Não há garantia quanto à ordem de envio das mensagens. No máximo quatro chaves de recolhimento diferentes são permitidas a qualquer momento. Isso significa que o FCM pode armazenar simultaneamente quatro mensagens diferentes por app cliente. Se você exceder esse limite, não há garantia de qual das quatro chaves recolhidas será mantida pelo FCM. |
|
priority |
Opcional, string | Define a prioridade da mensagem. Os valores válidos são "normal" e "high" (alta). Nas plataformas Apple, eles correspondem às prioridades 5 e 10 de APNs. Por padrão, as mensagens de notificação são enviadas com prioridade alta e as mensagens de dados com prioridade normal. A prioridade normal otimiza o consumo de bateria do app cliente e deve ser sempre usada, exceto quando a entrega imediata é necessária. Mensagens com prioridade normal podem ser recebidas pelo app com atraso não especificado. Uma mensagem com prioridade alta é enviada imediatamente, e o app pode exibir uma notificação. |
|
content_available |
Opcional, booleano | Nas plataformas Apple, use este campo para representar |
|
mutable_content |
Opcional, JSON booleano | Nas plataformas Apple, use este campo para representar
|
|
time_to_live |
Opcional, número | Este parâmetro especifica por quanto tempo (em segundos) a mensagem deverá ser mantida no armazenamento do FCM se o dispositivo ficar off-line. A vida útil máxima permitida é quatro semanas. Esse também é o valor padrão. Para mais informações, consulte Como configurar a vida útil de uma mensagem. |
|
dry_run |
Opcional, booleano | Quando definido como O valor padrão é |
|
Payload | |||
data |
Opcional, objeto | Este parâmetro especifica os pares de chave-valor do payload da mensagem. Por exemplo, com Nas plataformas Apple, se a mensagem é entregue por APNs, ela é representada por campos de dados personalizados. Quando
ela é enviada pelo FCM,
ela é representada como um dicionário de chave-valor no No Android, isso resulta em um intent adicional chamado A chave não pode ser uma palavra reservada, por exemplo, "from", "message_type" ou qualquer palavra
que comece com "google" ou "gcm". Não use palavras definidas nesta tabela como, por exemplo, É recomendável usar valores do tipo string. É preciso converter os valores nos objetos ou outros tipos de dados sem string (por exemplo, números inteiros ou booleanos) para string. |
|
notification |
Opcional, objeto | Este parâmetro especifica os pares de chave-valor predefinidos do payload da
notificação, visíveis ao usuário. Consulte o suporte do payload para mais detalhes. Para ver mais informações
sobre a mensagem de notificação e opções de mensagens de dados, consulte
Tipos de mensagens. Se houver um payload de notificação ou a
opção content_available estiver definida como true em uma mensagem para um dispositivo da
Apple, a mensagem vai ser enviada por APNs. Caso contrário, vai ser enviada pelo
FCM.
|
Suporte ao payload de notificação
As tabelas a seguir listam as chaves predefinidas disponíveis para criar mensagens de notificação para as plataformas Apple e Android.
Parâmetro | Uso | Descrição |
---|---|---|
title |
Opcional, string |
O título da notificação. Este campo não está visível em smartphones e tablets. |
body |
Opcional, string |
O texto do corpo da notificação. |
sound |
Opcional, string |
O som a ser reproduzido quando o dispositivo recebe a notificação.
String que especifica arquivos de som no pacote principal do app cliente ou na pasta
|
badge |
Opcional, string |
O valor do indicador no ícone do app da tela inicial. Se não é especificado, o indicador não é alterado.
Se é definido como |
click_action |
Opcional, string |
A ação associada a um clique de usuário na notificação. Corresponde a |
subtitle |
Opcional, string |
A legenda da notificação. |
body_loc_key |
Opcional, string |
A chave da string de corpo nos recursos de string do app, a ser usada para identificar o texto do corpo na localização atual do usuário.
Corresponde a Para mais informações, consulte Referência da chave de payload e Como localizar o conteúdo de notificações remotas. |
body_loc_args |
Opcional, matriz JSON como string |
Valores de string variáveis a serem usados no lugar dos especificadores de formato em
Corresponde a Para mais informações, consulte Referência da chave de payload e Como localizar o conteúdo de notificações remotas. |
title_loc_key |
Opcional, string |
A chave da string de título nos recursos de string do app a ser usada para identificar o texto do título na localização atual do usuário.
Corresponde a Para mais informações, consulte Referência da chave de payload e Como localizar o conteúdo de notificações remotas. |
title_loc_args |
Opcional, matriz JSON como string |
Valores de string variáveis a serem usados no lugar de especificadores de formato em
Corresponde a Para mais informações, consulte Referência da chave de payload e Como localizar o conteúdo de notificações remotas. |
Parâmetro | Uso | Descrição |
---|---|---|
title |
Opcional, string |
O título da notificação. |
body |
Opcional, string |
O texto do corpo da notificação. |
android_channel_id |
Opcional, string |
O código do canal da notificação (novo no Android O). O app precisa criar um canal com este ID do canal antes que qualquer notificação com esse ID seja recebida. Se você não enviar esse ID do canal na solicitação ou se o ID do canal fornecido ainda não foi criado pelo app, o FCM usará o ID do canal especificado no manifesto do app. |
icon |
Opcional, string |
O ícone da notificação.
Define o ícone da notificação como |
sound |
Opcional, string |
O som a ser reproduzido quando o dispositivo recebe a notificação. Aceita |
tag |
Opcional, string |
Identificador usado para substituir notificações existentes na gaveta de notificações. Se não está especificado, cada solicitação cria uma nova notificação. Se está especificado e uma notificação com a mesma tag já está sendo mostrada, a nova notificação substitui a existente na gaveta das notificações. |
color |
Opcional, string |
A cor do ícone da notificação, expressa no formato |
click_action |
Opcional, string |
A ação associada a um clique de usuário na notificação. Se especificado, uma atividade com um filtro de intent correspondente é iniciada quando um usuário clica na notificação. |
body_loc_key |
Opcional, string |
A chave da string de corpo nos recursos de string do app, a ser usada para identificar o texto do corpo na localização atual do usuário. Consulte Recursos de string para mais informações. |
body_loc_args |
Opcional, matriz JSON como string |
Valores de string variáveis a serem usados no lugar dos especificadores de formato em
Consulte Como formatar e definir estilo para mais informações. |
title_loc_key |
Opcional, string |
A chave da string de título nos recursos de string do app a ser usada para identificar o texto do título na localização atual do usuário. Consulte Recursos de string para mais informações. |
title_loc_args |
Opcional, matriz JSON como string |
Valores de string variáveis a serem usados no lugar de especificadores de formato em
Consulte Como formatar e definir estilo para mais informações. |
Parâmetro | Uso | Descrição |
---|---|---|
title |
Opcional, string |
O título da notificação. |
body |
Opcional, string |
O texto do corpo da notificação. |
icon |
Opcional, string |
O URL a ser usado para o ícone da notificação. |
click_action |
Opcional, string |
A ação associada a um clique de usuário na notificação. Um HTTPS é obrigatório para todos os valores de URL. |
Interpretar a resposta de uma mensagem XMPP downstream
Na tabela a seguir estão listados os campos mostrados na resposta de uma mensagem XMPP downstream.
Parâmetro | Uso | Descrição |
---|---|---|
from |
Obrigatório, string | O remetente da mensagem é especificado nesse parâmetro. O valor é o token de registro do app cliente. |
message_id |
Obrigatório, string | Com esse parâmetro, uma mensagem é identificada de modo exclusivo em uma conexão XMPP. Esse valor é uma string. |
message_type |
Obrigatório, string | Este parâmetro especifica uma mensagem Quando o valor é definido como |
error |
Opcional, string | Um erro relacionado à mensagem downstream é especificado por esse parâmetro. É definido quando
message_type é nack . Consulte detalhes na tabela 4. |
error_description |
Opcional, string | Informações descritivas do erro são fornecidas por esse parâmetro. É definido
quando message_type é nack . |
Códigos de resposta de erro de mensagens downstream
Na tabela a seguir, estão listados os códigos de resposta de erro para mensagens downstream.
Erro | Código XMPP | Ação recomendada |
---|---|---|
Token de registro não encontrado | INVALID_JSON |
Verifique se a solicitação contém um token de registro (no
registration_id em uma mensagem de texto sem formatação ou no campo to
ou registration_ids no JSON). |
Registro inválido de APNs | INVALID_JSON |
Para registros do iOS, verifique se a solicitação de registro do cliente contém um token de APNs e um ID de aplicativo válidos. |
Token de registro inválido | BAD_REGISTRATION |
Verifique o formato do token de registro que você transmite ao servidor. Verifique se ele corresponde ao token de registro que o app cliente recebe ao se registrar no FCM. Não faça truncagem nem adicione caracteres adicionais. |
Dispositivo não registrado | DEVICE_UNREGISTERED |
Um token de registro existente pode deixar de ser válido em diversas situações, incluindo:
|
Remetente incompatível | SENDER_ID_MISMATCH |
Um token de registro é vinculado a um determinado grupo de remetentes. Quando um app cliente se registra no FCM, ele precisa especificar os remetentes autorizados para enviar mensagens. Use um desses IDs de remetente ao enviar mensagens ao app cliente. Quando você muda para outro remetente, os tokens de registro existentes não funcionam. |
JSON inválido | INVALID_JSON |
Verifique se a mensagem JSON está formatada corretamente e contém campos válidos. Por exemplo, verifique se o tipo de dados correto é transmitido. |
Mensagem grande demais | INVALID_JSON |
Verifique se o tamanho total dos dados de payload incluídos em uma mensagem não excede os limites do FCM: 4.096 bytes para a maioria das mensagens ou 2.048 bytes no caso de mensagens para tópicos. Isso inclui as chaves e os valores. |
Chave de dados inválida | INVALID_JSON |
Verifique se os dados do payload não têm uma chave usada internamente pelo FCM como from ,
gcm ou qualquer valor
com prefixo google . Observe que algumas palavras como collapse_key
também são usadas pelo FCM, mas são permitidas no payload. Nesse caso,
o valor do payload é modificado pelo valor do FCM. |
Vida útil inválida | INVALID_JSON |
Verifique se o valor usado no time_to_live é um número inteiro que representa uma
duração em segundos entre 0 e 2.419.200 (4 semanas). |
Mensagem ACK incorreta | BAD_ACK |
Verifique se a mensagem ack está devidamente formatada antes de tentar novamente. Consulte
detalhes na tabela 6. |
Tempo limite | SERVICE_UNAVAILABLE |
A solicitação não foi processada a tempo no servidor. Tente enviar a mesma solicitação novamente. Para isso, é necessário:
Observação: os remetentes que causam problemas podem ser incluídos na lista negra. |
Erro interno do servidor | INTERNAL_SERVER_
|
Ocorreu um erro no servidor ao tentar processar a solicitação. Tente realizar a mesma solicitação novamente seguindo os requisitos listados em "Tempo limite" (consulte a linha acima). |
Taxa de mensagens do dispositivo excedida | DEVICE_MESSAGE_RATE |
A taxa de mensagens para um determinado dispositivo é muito alta. Reduza o número de mensagens enviadas a esse dispositivo e não tente reenviar mensagens a esse dispositivo imediatamente. |
Taxa de mensagens de tópico excedida | TOPICS_MESSAGE_RATE |
A taxa de mensagens para assinantes de um determinado tópico está muito alta. Reduza o número de mensagens enviadas para esse tópico e não tente reenviar mensagens imediatamente. |
Diminuição de conexão | CONNECTION_DRAINING |
Não foi possível processar a mensagem porque a conexão está reduzida. Isso acontece porque o FCM precisa encerrar uma conexão para fazer o balanceamento de carga. Tente reenviar a mensagem por outra conexão XMPP. |
Credenciais inválidas de APNs | INVALID_APNS_CREDENTIAL |
Uma mensagem direcionada a um dispositivo iOS não foi enviada porque a chave de autenticação de APNs necessária não foi carregada ou expirou. Verifique a validade das credenciais de desenvolvimento e produção. |
Falha na autenticação | AUTHENTICATION_FAILED |
Falha ao autenticar com serviços push externos. Verifique se você está usando os certificados de push da Web corretos. |
Sintaxe da mensagem upstream
Uma mensagem upstream é aquela que o app cliente envia ao servidor do app. Atualmente, só o XMPP é compatível com esse tipo de mensagem. Consulte a documentação da sua plataforma para mais informações sobre o envio de mensagens com os apps cliente.
Interpretar uma mensagem XMPP upstream
Na tabela a seguir, são descritos os campos na estrofe XMPP gerados pelo FCM em resposta a solicitações de mensagens upstream dos apps cliente.
Parâmetro | Uso | Descrição |
---|---|---|
from |
Obrigatório, string | O remetente da mensagem é especificado nesse parâmetro. O valor é o token de registro do app cliente. |
category |
Obrigatório, string | O nome do pacote do app cliente que enviou a mensagem é especificado nesse parâmetro. |
message_id |
Obrigatório, string | O código exclusivo da mensagem é especificado nesse parâmetro. |
data |
Opcional, string | Os pares de chave/valor de payload da mensagem são especificados nesse parâmetro. |
Como enviar mensagens ACK
A tabela a seguir descreve a resposta ACK que o servidor do app deve enviar ao FCM em resposta a uma mensagem upstream recebida.
Parâmetro | Uso | Descrição |
---|---|---|
to |
Obrigatório, string | O destinatário de uma mensagem de resposta é especificado nesse parâmetro. O valor é, obrigatoriamente, um token de registro do app cliente que enviou a mensagem upstream. |
message_id |
Obrigatório, string | A resposta à mensagem específica é determinada nesse parâmetro. O valor precisa ser
o message_id da mensagem upstream correspondente. |
message_type |
Obrigatório, string | Uma mensagem ack de um servidor do app para o CCS é especificada nesse parâmetro.
Para mensagens upstream, defina-o sempre como ack . |
Mensagens do servidor FCM (XMPP)
Essa é uma mensagem enviada do FCM para um servidor do app. Os principais tipos de mensagens que o FCM envia ao servidor do app são:
- Controle: essas mensagens geradas pelo CCS indicam que uma ação do servidor do app é obrigatória.
Na tabela a seguir, são descritos os campos incluídos nas mensagens que o CCS envia para um servidor do app.
Parâmetro | Uso | Descrição |
---|---|---|
Campo comum | ||
message_type |
Obrigatório, string | Este parâmetro especifica o tipo da mensagem: control. Ele é definido como |
control_type |
Opcional, string | O tipo de mensagem de controle enviada a partir do FCM é especificado nesse parâmetro. Atualmente, somente |