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