Usando cargas do Google Firebase Cloud Messaging (FCM) v1 no Amazon SNS - Amazon Simple Notification Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando cargas do Google Firebase Cloud Messaging (FCM) v1 no Amazon SNS

O Amazon SNS oferece suporte ao uso da API HTTP v1 do FCM para enviar notificações para destinos Android, iOS e Webpush. Este tópico fornece exemplos da estrutura de carga útil ao publicar notificações push móveis usando a CLI ou a API do Amazon SNS.

Você pode incluir os seguintes tipos de mensagem em sua carga ao enviar uma notificação do FCM:

  • Mensagem de dados — Uma mensagem de dados é gerenciada pelo seu aplicativo cliente e contém pares de valores-chave personalizados. Ao criar uma mensagem de dados, você deve incluir a data chave com um objeto JSON como valor e, em seguida, inserir seus pares de valores-chave personalizados.

  • Mensagem de notificação ou mensagem de exibição — uma mensagem de notificação contém um conjunto predefinido de chaves gerenciadas pelo SDK do FCM. Essas chaves variam de acordo com o tipo de dispositivo para o qual você está entregando. Para obter mais informações sobre as chaves de notificação específicas da plataforma, consulte o seguinte:

Para obter mais informações sobre os tipos de mensagens do FCM, consulte Tipos de mensagens na documentação do Firebase do Google.

Usando a estrutura de carga útil do FCM v1 para enviar mensagens

Se você estiver criando um aplicativo FCM pela primeira vez ou quiser aproveitar os recursos do FCM v1, você pode optar por enviar uma carga no formato FCM v1. Para fazer isso, você deve incluir a chave fcmV1Message de nível superior. Para obter mais informações sobre a criação de cargas do FCM v1, consulte Migração de APIs legadas do FCM para HTTP v1 e Personalização de uma mensagem em várias plataformas na documentação do Firebase do Google.

Exemplo de carga útil do FCM v1 enviada para o Amazon SNS:

nota

O valor da GCM chave usado no exemplo a seguir deve ser codificado como uma string ao publicar uma notificação usando o Amazon SNS.

{ "GCM": "{ \"fcmV1Message\": { \"validate_only\" : false, \"message\" : { \"notification\": { \"title\": \"string\", \"body\": \"string\" }, \"data\": { \"dataGen\": \"priority message\", }, \"android\": { \"priority\": \"high\", \"notification\": { \"body_loc_args\": [ \"string\" ], \"title_loc_args\": [ \"string\" ], \"sound\": \"string\", \"title_loc_key\": \"string\", \"title\": \"string\", \"body\": \"string\", \"click_action\": \"clicky_clacky\", \"body_loc_key\": \"string\" }, \"data\": { \"dataAndroid\": \"priority message\", }, \"ttl\": \"10023.32s\" }, \"apns\": { \"payload\": { \"aps\": { \"alert\": { \"subtitle\": \"string\", \"title-loc-args\": [ \"string\" ], \"title-loc-key\": \"string\", \"loc-args\": [ \"string\" ], \"loc-key\": \"string\", \"title\": \"string\", \"body\": \"string\" }, \"category\": \"Click\", \"content-available\": 0, \"sound\": \"string\", \"badge\": 5 } } }, \"webpush\": { \"notification\": { \"badge\": \"5\", \"title\": \"string\", \"body\": \"string\" }, \"data\": { \"dataWeb\": \"priority message\", } } } } }" }

Ao enviar uma carga JSON, não se esqueça de incluir o message-structure atributo em sua solicitação e configurá-lo como. json

Exemplo de CLI:

aws sns publish --topic $TOPIC_ARN --message '{"GCM": "{\"fcmV1Message\": {\"message\":{\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"android\":{\"priority\":\"high\",\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"data\":{\"customAndroidDataKey\":\"custom key value\"},\"ttl\":\"0s\"},\"apns\":{\"payload\":{\"aps\":{\"alert\":{\"title\":\"string\", \"body\":\"string\"},\"content-available\":1,\"badge\":5}}},\"webpush\":{\"notification\":{\"badge\":\"URL\",\"body\":\"Test\"},\"data\":{\"customWebpushDataKey\":\"priority message\"}},\"data\":{\"customGeneralDataKey\":\"priority message\"}}}}", "default": "{\"notification\": {\"title\": \"test\"}"}' --region $REGION --message-structure json

Para obter mais informações sobre o envio de cargas no formato FCM v1, consulte o seguinte na documentação do Firebase do Google:

Usando a estrutura de carga útil legada para enviar mensagens para a API FCM v1

Ao migrar para o FCM v1, você não precisa alterar a estrutura de carga que estava usando para suas credenciais legadas. O Amazon SNS transforma sua carga na nova estrutura de carga útil do FCM v1 e envia para o Google.

Formato da carga útil da mensagem de entrada:

{ "GCM": "{\"notification\": {\"title\": \"string\", \"body\": \"string\", \"android_channel_id\": \"string\", \"body_loc_args\": [\"string\"], \"body_loc_key\": \"string\", \"click_action\": \"string\", \"color\": \"string\", \"icon\": \"string\", \"sound\": \"string\", \"tag\": \"string\", \"title_loc_args\": [\"string\"], \"title_loc_key\": \"string\"}, \"data\": {\"message\": \"priority message\"}}" }

Mensagem enviada ao Google:

{ "message": { "token": "***", "notification": { "title": "string", "body": "string" }, "android": { "priority": "high", "notification": { "body_loc_args": [ "string" ], "title_loc_args": [ "string" ], "color": "string", "sound": "string", "icon": "string", "tag": "string", "title_loc_key": "string", "title": "string", "body": "string", "click_action": "string", "channel_id": "string", "body_loc_key": "string" }, "data": { "message": "priority message" } }, "apns": { "payload": { "aps": { "alert": { "title-loc-args": [ "string" ], "title-loc-key": "string", "loc-args": [ "string" ], "loc-key": "string", "title": "string", "body": "string" }, "category": "string", "sound": "string" } } }, "webpush": { "notification": { "icon": "string", "tag": "string", "body": "string", "title": "string" }, "data": { "message": "priority message" } }, "data": { "message": "priority message" } } }

Riscos potenciais

  • O mapeamento legado para v1 não é compatível com o Apple Push Notification Service (APNS) headers nem com as fcm_options chaves. Se você quiser usar esses campos, envie uma carga útil do FCM v1.

  • Em alguns casos, os cabeçalhos das mensagens são exigidos pelo FCM v1 para enviar notificações silenciosas aos seus dispositivos APNs. Se você estiver enviando notificações silenciosas para seus dispositivos APNs, elas não funcionarão com a abordagem antiga. Em vez disso, recomendamos usar a carga útil do FCM v1 para evitar problemas inesperados. Para encontrar uma lista de cabeçalhos de APNs e para que eles são usados, consulte Comunicação com APNs no Guia do Desenvolvedor da Apple.

  • Se você estiver usando o atributo TTL Amazon SNS ao enviar sua notificação, ela só será atualizada no android campo. Se você quiser definir o atributo TTL APNS, use a carga útil do FCM v1.

  • As webpush teclas androidapns, e serão mapeadas e preenchidas com todas as chaves relevantes fornecidas. Por exemplo, se você fornecertitle, que é uma chave compartilhada entre as três plataformas, o mapeamento do FCM v1 preencherá as três plataformas com o título que você forneceu.

  • Algumas chaves compartilhadas entre plataformas esperam diferentes tipos de valor. Por exemplo, a badge chave passada para apns espera um valor inteiro, enquanto a badge chave passada para webpush espera um valor String. Nos casos em que você fornecer a badge chave, o mapeamento do FCM v1 preencherá somente a chave para a qual você forneceu um valor válido.

Eventos de falha na entrega do FCM

A tabela a seguir fornece o tipo de falha do Amazon SNS que corresponde aos códigos de erro/status recebidos do Google para solicitações de notificação do FCM v1. Todos os códigos de erro observados recebidos da API FCM v1 estão disponíveis CloudWatch quando você configura o registro do status de entrega do seu aplicativo.

Código de erro/status do FCM Tipo de falha do Amazon SNS Mensagem de falha Causa e mitigação

UNREGISTERED

InvalidPlatformToken

O token da plataforma associado ao endpoint não é válido.

O token do dispositivo anexado ao seu endpoint está obsoleto ou é inválido. O Amazon SNS desativou seu endpoint. Atualize o endpoint do Amazon SNS para o token de dispositivo mais novo.

INVALID_ARGUMENT

InvalidNotification

O corpo da notificação é inválido.

O token do dispositivo ou a carga útil da mensagem podem ser inválidos. Verifique se a carga útil da mensagem é válida. Se a carga útil da mensagem for válida, atualize o endpoint do Amazon SNS para o token de dispositivo mais novo.

SENDER_ID_MISMATCH

InvalidPlatformToken

O token da plataforma associado ao endpoint não é válido.

O aplicativo da plataforma associado ao token do dispositivo não tem permissão para enviar para o token do dispositivo. Verifique se você está usando as credenciais corretas do FCM em seu aplicativo da plataforma Amazon SNS.

UNAVAILABLE

DependencyUnavailable

A dependência não está disponível.

O FCM não conseguiu processar a solicitação a tempo. Todas as novas tentativas executadas pelo Amazon SNS falharam. Você pode armazenar essas mensagens em uma fila de cartas mortas (DLQ) e reconduzi-las posteriormente.

INTERNAL

UnexpectedFailure

Falha inesperada; entre em contato com a Amazon. Frase de falha [Erro interno].

O servidor FCM encontrou um erro ao tentar processar sua solicitação. Todas as novas tentativas executadas pelo Amazon SNS falharam. Você pode armazenar essas mensagens em uma fila de cartas mortas (DLQ) e reconduzi-las posteriormente.

THIRD_PARTY_AUTH_ERROR

InvalidCredentials

As credenciais do aplicativo da plataforma não são válidas.

Uma mensagem direcionada a um dispositivo iOS ou a um dispositivo Webpush não pôde ser enviada. Verifique se suas credenciais de desenvolvimento e produção são válidas.

QUOTA_EXCEEDED

Throttled

Solicitação limitada por [gcm].

Uma cota de taxa de mensagem, cota de taxa de mensagem de dispositivo ou cota de taxa de mensagem de tópico foi excedida. Para obter informações sobre como resolver esse problema, consulte ErrorCodea documentação do Firebase do Google.

PERMISSION_DENIED

InvalidNotification

O corpo da notificação é inválido.

No caso de uma PERMISSION_DENIED exceção, o chamador (seu aplicativo FCM) não tem permissão para executar a operação especificada na carga. Navegue até o console do FCM e verifique se suas credenciais têm as ações de API necessárias ativadas.