Я создал приложение для IOS для электронной коммерции с бэкэндом в nodejs (AWS Lambda). Когда пользователь входит в систему/входит в систему, приложение подписывается на тему SNS, которую я создал для отправки уведомлений, и сохраняет токен push и идентификатор устройства в базе данных. Теперь я хочу отправить push-уведомление всем пользователям, которые подписались на эту тему SNS, когда мы добавили новый товар в магазин. В настоящее время для отправки уведомления я выбираю всех пользователей из базы данных и перебираю пользователей, чтобы получить их push-токен и отправлять уведомления пользователям по одному, что является очень дорогостоящим процессом, а API занял слишком много времени.
Теперь я хочу перейти к теме SNS из Лямбды и передать основную часть уведомления в эту тему, и эта тема SNS отправит уведомление всем пользователям, подписавшимся на эту тему. Я искал его, но не могу найти никакого решения.
Код, который я сделал для отправки уведомления, выглядит так
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);
});
}));
Но для этого я должен извлечь каждого пользователя из базы данных, получить его конечную точку ARN, а затем отправить уведомление итерацией.
Я хочу позвонить в тему SNS, передать текст уведомления, и SNS отправит уведомление каждому пользователю, подписавшемуся на эту тему SNS.
Я делаю это, потому что хочу сэкономить на выборке всех пользователей из базы данных, а затем отправить уведомление