Enviar notificación de SNS para todos los Usuarios que suscribieron el tema de Lambda

0

Pregunta

He creado un E-Commerce de la aplicación de IOS con backend en nodejs (AWS Lambda). Cuando un usuario signedIn/LoggedIn, la aplicación se suscribe un Tema de SNS que he creado para el envío de notificaciones y almacena el empuje token y el dispositivo de ARN en DB. Ahora quiero enviar notificaciones push a todos los usuarios que se han suscrito ese Tema de SNS, cuando se añadió un nuevo elemento a la tienda. En la actualidad, para enviar la notificación estoy yendo a buscar a todos los usuarios de DB y bucle a través de los usuarios para conseguir su inserción token y enviar una notificación a los usuarios uno por uno, lo cual es muy costoso proceso, y la API tomó demasiado tiempo.

Ahora quiero hacer es golpear el tema de SNS de Lambda y pasar el cuerpo de la notificación a ese tema y ese tema de SNS enviará una notificación a todos los usuarios que se hayan suscrito el Tema. He buscado pero no puede encontrar ninguna solución.

El código que he hecho para enviar la notificación es

await Promise.all(targetArns.map(async (item, index) => {
         const publishNotificationParams = { 
            "TargetArn": item,
            "Message": JSON.stringify({
              "default": JSON.stringify({
                  "category" : title,
                  "alert" : {
                    "title" : title,
                    "body" : 'New product is launced',
                    "data" : product
                  },
                  "badge" : 1,
                  "sound" : "chime.aiff"
                }),
                "APNS_SANDBOX": JSON.stringify(params),
                "APNS": JSON.stringify(params)
            }),
            "MessageStructure": "json"
        };
        var publishTextPromise = sns.publish(publishNotificationParams).promise();
       publishTextPromise.then(
        function(data) {
          console.log(`Message ${publishNotificationParams.Message} sent to the topic ${publishNotificationParams.TargetArn}`);
        }).catch(
          function(err) {
          console.error(err, err.stack);
        });
     }));

Pero para esto tengo que obtener cada usuario de la DB obtener su extremo de ARN y, a continuación, enviar una notificación por iteración.

Quiero llamar tema de SNS pasar el cuerpo de la notificación y el SNS enviará una notificación a cada usuario que ha suscrito el SNS tema.

Estoy haciendo esto porque quiero ahorrar el costo para recuperar todos los usuarios de DB y, a continuación, enviar la notificación

1

Mejor respuesta

0

Así es cómo se podría lograr que el flujo. Creo que ya se tienen algunas partes de esta práctica.

  1. Crear un tema que será utilizado para el ventilador de la notificación a todos los usuarios: https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html

  2. Crear la aplicación de la plataforma(s) para las diferentes plataformas de la aplicación se usa en: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html

  3. Cuando un usuario se registra para su aplicación, crear una plataforma de extremo para la aplicación correspondiente para el usuario de la plataforma: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html

    3.1. Si usted quiere ser capaz de dirigirse a este usuario directamente, además de almacenar este ARN en algún lugar de directa publica (como lo están haciendo ahora).

  4. Ahora también crear una suscripción para el tema creado en el paso 1, hasta el extremo de ARN: https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html

  5. Publicar en el tema creado en el paso 1: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html

SNS ventilador automáticamente el mensaje a todos los suscriptores (todos los usuarios), así que cada uno de ellos recibirá una notificación sin que se itera sobre cada usuario.

2021-11-24 23:11:24

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................