FCM con AWS SNS


94

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

1.Does AWSapoyan FCM? SNStrabajar con GCM. Pero Google recomienda usar FCM en lugar de GCM. No encontré AWSapoyo FCM.

¿ AWSAlmacenan mensajes (o datos) en sus bases de datos incluso después de enviar notificaciones automáticas?

3. Intenté poner la clave api de FCM en la plataforma de aplicaciones SNS, muestra parámetros no válidos ¿por qué?


SNS aún no es compatible con FCM, utiliza una versión obsoleta de GCM. ¿De dónde obtiene la clave API?
Arthur Thompson

1
Lo que intenté fue, intenté poner la clave api de FCM en SNS y no funcionó, después de leer el documento en AWS (SNS) mencionaron poner la clave del servidor. Probé que funcionó bien. Puedo enviar notificaciones push a través de SNS para FCM. No sé la razón exacta por la que funcionó. ¿Estás seguro de que SNS no es compatible con FCM actualmente?
Naroju

Es correcto que se requiere la clave del servidor para enviar mensajes GCM (ahora FCM). En el lado del cliente (dispositivo móvil), GCM y FCM son generalmente iguales, por lo que ambos recibirán mensajes de la manera esperada. Sin embargo, hay algunas características de FCM que no funcionarán, por ejemplo: mensajes de temas.
Arthur Thompson

¿Es posible utilizar temas sns con fmc? gracias por una respuesta tan impresionante
Juan Jose Tugores

¿Cuál es el beneficio de usar SNS en primer lugar? ¿No debería ser suficiente FCM?
Khaled Osman

Respuestas:


187

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 envía datacargas útiles al dispositivo Android, no se procesarán a menos que implemente un servicio del lado del cliente que se extienda FirebaseMessagingService. El generador de mensajes JSON predeterminado en la consola de AWS envía datamensajes, que su aplicación ignorará a menos que se implemente el servicio mencionado anteriormente. Para evitar esto para las pruebas iniciales, puede proporcionar una notificationcarga útil personalizada que recibirá su dispositivo (siempre que su aplicación no esté en primer plano)

Hay instrucciones de migración de 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 , seleccione Google Cloud Messaging (GCM) como la plataforma de notificaciones push y proporcione su clave de API de servidor en el campo de 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 extender FirebaseInstanceIDServicey anular el onTokenRefreshmétodo para ver esto dentro de su aplicación de Android. Una vez que haya hecho esto , desinstale y reinstale su aplicación y su token debería 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. Introduzca un mensaje de prueba y haga clic en el JSON Generar botón
  9. Ahora viene la "parte de los atrapé".

El mensaje generado por SNS tendrá la forma:

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

Como mencionamos anteriormente, las datacargas útiles 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 notificationcarga ú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 usar la datacarga útil, por lo que debe tener eso en cuenta y generar una carga útil adecuada para su caso de uso.


2
Brillante respuesta, gracias. Vale la pena señalar que el json tiene cierta profundidad en lo que respecta a las opciones de configuración (consulte developers.google.com/cloud-messaging/concept-options) , aunque no he probado ninguna funcionalidad específica de FCM.
Tom

datamessages funciona bien usando sns incluso si la aplicación cliente no implementa FCM sino GCM. En mi aplicación, no he actualizado a FCM en el lado del cliente, pero FCM usando SNS también funciona bien para los datamensajes. ¿No debería funcionar?
Sash_KP

2
SNS usa GCM, por lo que si está utilizando el cliente de GCM, debería comportarse de manera normal (hasta el momento en que Google decida retirar GCM). Esta pregunta tiene más que ver con el soporte de FCM en AWS (que es compatible a través de la compatibilidad con versiones anteriores en el lado de la API de Google)
Nathan Dunn

¿Es posible utilizar temas sns con fmc? gracias por una respuesta tan impresionante
Juan Jose Tugores

Bienvenido: sí, puede suscribir de forma individual puntos de enlace de inserción móvil (es decir, GCM-> FCM) a un tema de SNS de forma normal; sin embargo, esto generaría una gran cantidad de mensajes dentro de AWS. Si está utilizando el lado del cliente de FCM, otra alternativa es utilizar Temas de FCM o Segmentos de usuario que solo viajarán a través de los servidores de Google
Nathan Dunn

14

Ahora puede ir a su consola de base de fuego ( https://console.firebase.google.com/ ), seleccionar su proyecto, hacer clic en el ícono de ajustes y elegir la configuración del proyecto, luego hacer clic en la pestaña de mensajería en la nube ...

Verá la clave de servidor heredada, que es la clave de 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ú aún lo clasifica en GCM.

Aquí hay una imagen para su referencia:

ingrese la descripción de la imagen aquí

Tenga en cuenta que puede eliminar "accidentalmente" sus claves de servidor, pero la clave de servidor heredada 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;)


5

Intenté usar una solución con carga útil de notificación en lugar de datos, pero no recibí notificaciones automáticas en el dispositivo móvil. Encontré este tutorial https://youtu.be/iBTFLu30dSg con subtítulos en inglés de 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.


5

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)
    {
    }
}

¿Dónde está el token FCM?
JPM

¿Cómo puedo enviar una URL de imagen en la carga útil
Tarek Noaman

3

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\" } }"
}

¿Cómo puedo enviar una URL de imagen en la carga útil
Tarek Noaman

0

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);
}    


0

Para responder a las preguntas:

  1. AWS SNS es compatible con 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.