Uso de cargas útiles de Google Firebase Cloud Messaging (FCM) v1 en Amazon SNS - Amazon Simple Notification Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de cargas útiles de Google Firebase Cloud Messaging (FCM) v1 en Amazon SNS

Amazon SNS admite el uso de la API HTTP v1 de FCM para enviar notificaciones a destinos de Android, iOS y Webpush. En este tema se proporcionan ejemplos de la estructura de carga útil al publicar notificaciones push móviles mediante la CLI o la API de Amazon SNS.

Puedes incluir los siguientes tipos de mensajes en tu carga útil al enviar una notificación de FCM:

  • Mensaje de datos: tu aplicación cliente gestiona un mensaje de datos y contiene pares clave-valor personalizados. Al crear un mensaje de datos, debes incluir la data clave con un objeto JSON como valor y, a continuación, introducir los pares clave-valor personalizados.

  • Mensaje de notificación o mensaje de visualización: un mensaje de notificación contiene un conjunto predefinido de claves gestionadas por el SDK de FCM. Estas claves varían en función del tipo de dispositivo en el que realices la entrega. Para obtener más información sobre las claves de notificación específicas de la plataforma, consulta lo siguiente:

Para obtener más información sobre los tipos de mensajes de FCM, consulta la sección Tipos de mensajes en la documentación de Firebase de Google.

Uso de la estructura de carga útil de FCM v1 para enviar mensajes

Si vas a crear una aplicación de FCM por primera vez o deseas aprovechar las funciones de FCM v1, puedes optar por enviar una carga útil con formato de FCM v1. Para ello, debes incluir la clave de nivel superior. fcmV1Message Para obtener más información sobre la creación de cargas útiles de FCM v1, consulta la documentación de Firebase de Google sobre migración de las API antiguas de FCM a HTTP v1 y Personalización de un mensaje en todas las plataformas.

Ejemplo de carga útil de FCM v1 enviada a Amazon SNS:

nota

El valor GCM clave utilizado en el siguiente ejemplo debe codificarse como una cadena al publicar una notificación mediante 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\", } } } } }" }

Al enviar una carga útil de JSON, asegúrese de incluir el message-structure atributo en su solicitud y configúrelo en. json

Ejemplo 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 obtener más información sobre el envío de cargas útiles con formato FCM v1, consulta lo siguiente en la documentación de Firebase de Google:

Uso de la estructura de carga útil heredada para enviar mensajes a la API de FCM v1

Al migrar a FCM v1, no tienes que cambiar la estructura de carga que utilizabas para tus credenciales antiguas. Amazon SNS transforma la carga útil en la nueva estructura de carga útil de FCM v1 y la envía a Google.

Formato de carga útil del mensaje 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\"}}" }

Mensaje enviado a 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" } } }

Riesgos potenciales

  • La asignación desde la versión anterior a la versión 1 no es compatible con el servicio de notificaciones push de Apple (APNS) headers ni con las fcm_options teclas. Si quieres usar estos campos, envía una carga útil de FCM v1.

  • En algunos casos, la versión 1 de FCM requiere los encabezados de los mensajes para enviar notificaciones silenciosas a tus dispositivos APNs. Si actualmente envías notificaciones silenciosas a tus dispositivos APNs, no funcionarán con el enfoque tradicional. En su lugar, te recomendamos que utilices la carga útil de FCM v1 para evitar problemas inesperados. Para ver una lista de los encabezados de los APN y para qué se utilizan, consulta Cómo comunicarse con los APN en la Guía para desarrolladores de Apple.

  • Si utilizas el atributo TTL Amazon SNS al enviar la notificación, solo se actualizará en el android campo. Si quieres establecer el atributo TTL APNS, usa la carga útil v1 de FCM.

  • Las webpush claves androidapns, y se mapearán y rellenarán con todas las claves relevantes proporcionadas. Por ejemplo, si indicas una clave compartida entre las tres plataformas, el mapeo de FCM v1 rellenará las tres plataformas con el título que title proporcionaste.

  • Algunas claves compartidas entre plataformas esperan tipos de valores diferentes. Por ejemplo, la badge clave que se pasa apns espera un valor entero, mientras que la badge clave que se pasa webpush espera un valor de cadena. En los casos en los que proporciones la badge clave, la asignación v1 de FCM solo rellenará la clave para la que proporcionaste un valor válido.

Eventos de fallo en la entrega de FCM

La siguiente tabla proporciona el tipo de error de Amazon SNS que corresponde a los códigos de error o estado recibidos de Google para las solicitudes de notificación de FCM v1. Todos los códigos de error observados recibidos de la API v1 de FCM están disponibles CloudWatch cuando configuras el registro del estado de entrega de tu aplicación.

Código de error/estado de FCM Tipo de error de Amazon SNS Mensaje de error Causa y mitigación

UNREGISTERED

InvalidPlatformToken

El token de plataforma asociado al punto final no es válido.

El token de dispositivo adjunto a su punto final está obsoleto o no es válido. Amazon SNS ha desactivado su punto de conexión. Actualice el punto de conexión de Amazon SNS al token de dispositivo más reciente.

INVALID_ARGUMENT

InvalidNotification

El cuerpo de la notificación no es válido.

Es posible que el token del dispositivo o la carga útil del mensaje no sean válidos. Comprueba que la carga útil de tus mensajes sea válida. Si la carga útil del mensaje es válida, actualice el punto final de Amazon SNS al token de dispositivo más reciente.

SENDER_ID_MISMATCH

InvalidPlatformToken

El token de plataforma asociado al punto final no es válido.

La aplicación de plataforma asociada al token del dispositivo no tiene permiso para enviar al token del dispositivo. Comprueba que estás utilizando las credenciales de FCM correctas en tu aplicación de plataforma Amazon SNS.

UNAVAILABLE

DependencyUnavailable

La dependencia no está disponible.

FCM no ha podido procesar la solicitud a tiempo. Fallaron todos los reintentos ejecutados por Amazon SNS. Puede almacenar estos mensajes en una cola de mensajes sin salida (DLQ) y volver a publicarlos más adelante.

INTERNAL

UnexpectedFailure

Fallo inesperado; ponte en contacto con Amazon. Frase de error [error interno].

El servidor de FCM detectó un error al intentar procesar tu solicitud. Fallaron todos los reintentos ejecutados por Amazon SNS. Puede almacenar estos mensajes en una cola de mensajes sin salida (DLQ) y volver a publicarlos más adelante.

THIRD_PARTY_AUTH_ERROR

InvalidCredentials

Las credenciales de la aplicación de plataforma no son válidas.

No se ha podido enviar un mensaje dirigido a un dispositivo iOS o a un dispositivo Webpush. Compruebe que sus credenciales de desarrollo y producción sean válidas.

QUOTA_EXCEEDED

Throttled

Solicitud restringida por [gcm].

Se ha superado una cuota de velocidad de mensajes, una cuota de velocidad de mensajes de dispositivos o una cuota de velocidad de mensajes por temas. Para obtener información sobre cómo resolver este problema, consulta ErrorCodela documentación de Firebase de Google.

PERMISSION_DENIED

InvalidNotification

El cuerpo de la notificación no es válido.

En el caso de una PERMISSION_DENIED excepción, la persona que llama (tu aplicación de FCM) no tiene permiso para ejecutar la operación especificada en la carga útil. Ve a tu consola de FCM y verifica que tus credenciales tengan habilitadas las acciones de API necesarias.