gcm_defaultsenderid gcm fcm change android amazon-web-services google-cloud-messaging amazon-sns firebase-cloud-messaging

android - change - gcm a fcm



FCM con AWS SNS (8)

Estoy usando recursos de AWS para mi proyecto de Android, estoy planeando agregar un servicio de notificación push para mi proyecto con AWS SNS . Hay algunas preguntas que me molestan mucho. No encontré ninguna pregunta al respecto, excepto una o dos pero con explicaciones poco claras.

1. ¿ AWS admite FCM ? SNS trabaja con GCM . Pero Google recomienda usar FCM en lugar de GCM . No encontré AWS compatible con FCM .

¿ AWS almacena mensajes (o datos) en sus bases de datos incluso después de enviar notificaciones push?

3.Traté de poner la clave de API FCM en la plataforma de aplicación SNS, ¿muestra parámetros no válidos por qué?


Ahora puede ir a su consola de Firebase ( https://console.firebase.google.com/ ) seleccione su proyecto, haga clic en el ícono de ajustes y elija la configuración del proyecto, luego haga clic en la pestaña de mensajes en la nube ...

Verá la clave de servidor heredada que es la clave API de GCM y tendrá la opción de generar nuevas claves de servidor que son las versiones de FCM

SNS aceptará ambas versiones, pero su opción de menú sigue clasificándola en GCM

Aquí hay una imagen para su referencia:

Tenga en cuenta que puede eliminar "accidentalmente" las claves del servidor, pero la clave del servidor heredado no se puede eliminar. Además, si hace clic en el botón Agregar clave de servidor, obtendrá una nueva clave de servidor DEBAJO de la primera, ¡SIN ADVERTENCIA! ... Buen trabajo Google;)



FCM es compatible con versiones anteriores de GCM. Los pasos para configurar FCM en AWS son idénticos al procedimiento de configuración de GCM y (al menos por el momento) FCM funciona de forma transparente con GCM y SNS con respecto a la configuración del lado del servidor.

Sin embargo , si está enviando cargas de data al dispositivo Android, no se procesarán a menos que implemente un servicio del lado del cliente que extienda FirebaseMessagingService . El generador de mensajes JSON predeterminado en la consola de AWS envía mensajes de data , que su aplicación ignorará a menos que se implemente el servicio mencionado anteriormente. Para evitar esto para las pruebas iniciales, puede proporcionar una carga de notification personalizada que recibirá su dispositivo (siempre que su aplicación no esté en primer plano)

Hay instrucciones de migración GCM-FCM proporcionadas por Google, sin embargo, los cambios que debe realizar son predominantemente del lado de la aplicación.

Los pasos que debe seguir para probar GCM / FCM en su aplicación con SNS son:

  1. Cree una aplicación de plataforma en SNS , seleccionando Google Cloud Messaging (GCM) como la plataforma de notificaciones push y proporcionando su clave de API del servidor en el campo Clave de API .
  2. Seleccione la aplicación de plataforma y haga clic en el botón Crear punto final de plataforma .
  3. Proporcione el InstanceID ( Token de dispositivo ) generado por su aplicación. Debe ampliar el servicio FirebaseInstanceIDService y onTokenRefresh método onTokenRefresh para ver esto dentro de su aplicación de Android. Una vez que haya hecho esto , desinstale y vuelva a instalar su aplicación y su token debe imprimirse en la consola de depuración en Android Studio en el primer arranque.
  4. Haga clic en el botón Agregar punto final .
  5. Haga clic en el enlace ARN para su aplicación de plataforma.
  6. Seleccione el Punto final recién creado para su dispositivo y haga clic en el botón Publicar en punto final .
  7. Seleccione el formato de mensaje JSON y haga clic en el botón generador de mensajes JSON .
  8. Ingrese un mensaje de prueba y haga clic en el botón Generar JSON
  9. Ahora viene la "parte gotcha".

El mensaje generado por SNS tendrá la forma:

{ "GCM": "{ /"data/": { /"message/": /"test message/" } }" }

Como mencionamos anteriormente, data cargas de data se ignorarán si no se ha implementado ningún servicio para recibirlas. Nos gustaría probar sin escribir demasiado código, por lo que deberíamos enviar una notification carga útil. Para hacer esto, simplemente cambie el mensaje JSON para leer:

{ "GCM": "{ /"notification/": { /"text/": /"test message/" } }" }

Una vez que haya hecho esto, asegúrese de que su aplicación no se esté ejecutando en el dispositivo y presione el botón Publicar mensaje . Ahora debería ver una notificación emergente en su dispositivo.

Por supuesto, puede hacer todo esto mediante programación a través de la API de Amazon SNS, sin embargo, todos los ejemplos parecen utilizar la carga útil de data por lo que debe tener esto en cuenta y generar una carga útil adecuada para su caso de uso.


Me tomó un tiempo descubrir cómo enviar la notificación con la carga útil correcta (publicar en el tema). Así que lo pondré aquí.

private void PublishToTopic(string topicArn) { AmazonSimpleNotificationServiceClient snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest1); PublishRequest publishRequest = new PublishRequest(); publishRequest.TopicArn = topicArn; publishRequest.MessageStructure = "json"; string payload = "///"data///":{///"text///":///"Test ///"}"; publishRequest.Message = "{/"default/": /"default/",/"GCM/":/"{" + payload + "}/"}"; PublishResponse publishResult = snsClient.Publish(publishRequest); }


Para responder las preguntas:

  1. AWS SNS admite FCM.
  2. No AWS no almacena mensajes después de enviar notificaciones push.

Para obtener un tutorial detallado sobre cómo configurar FCM con SNS, lea este artículo.


Solo una nota adicional a la respuesta de Nathan Dunn: para agregar sonido use el siguiente mensaje JSON

{ "GCM": "{ /"notification/": { /"text/": /"test message/",/"sound/":/"default/" } }" }


Traté de usar una solución con carga de notificación en lugar de datos, pero no recibí notificaciones push en el dispositivo móvil. Encontré este tutorial https://youtu.be/iBTFLu30dSg con subtítulos en inglés sobre cómo usar FCM con AWS SNS paso a paso y un ejemplo de cómo enviar notificaciones push desde la consola de AWS e implementarlo en php con aws php sdk. Me ayudó mucho.


Una nota adicional más a la gran respuesta de Nathan Dunn. Cómo enviar datos con la notificación de SNS a Firebase.

Necesitamos agregar datos al Json (dentro de la notificación):

{ "default": “any value", "GCM": "{ /"notification/": { /"body/": /”message body/”, /”title/”: /”message title /”, /"sound/":/"default/" } , /"data/" : {/”key/" : /”value/", /”key2/" : /”value/” } }” }

En su implementación de FirebaseMessagingService (ejemplo de Xamarin)

public override void OnMessageReceived(RemoteMessage message) { try { var body = message?.GetNotification()?.Body; var title = message?.GetNotification()?.Title; var tag = message?.GetNotification()?.Tag; var sound = message?.GetNotification()?.Sound; var data = message?.Data foreach (string key in data.Keys) { // get your data values here } } catch (Exception e) { } }