J'ai créé une adresse E-Commerce de l'application IOS avec backend en nodejs (AWS Lambda). Lorsqu'un utilisateur signedIn/LoggedIn, l'application souscrit un SNS Sujet que j'ai créé pour envoyer des notifications et des magasins de la pousser jeton et appareil ARN en DB. Maintenant, je veux envoyer des notifications push à tous les utilisateurs qui ont souscrit que SNS Sujet, lorsque nous avons ajouté un nouvel élément à la boutique. Actuellement, pour envoyer une notification je suis aller chercher tous les utilisateurs de la DB et une boucle par les utilisateurs pour obtenir leur poussée jeton et d'envoyer des notifications aux utilisateurs un par un, ce qui est très coûteux, et de l'API a pris trop de temps.
Maintenant, je veux faire est de frapper le SNS sujet de Lambda et de passer le corps de la notification à ce sujet et que SNS sujet enverra une notification à tous les utilisateurs qui ont souscrit le Sujet. J'ai cherché mais ne trouve pas de solution.
Le code que j'ai fait pour envoyer une notification est
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);
});
}));
Mais pour cela, je dois récupérer tous les utilisateurs de DB obtenir leur point de terminaison ARN et ensuite envoyer une notification par itération.
Je veux l'appeler topic SNS passer le corps de la notification et du SNS enverra une notification à chaque utilisateur qui a souscrit que SNS sujet.
Je le fais parce que je veux économiser sur le coût de récupérer tous les utilisateurs de DB et ensuite envoyer une notification