Stworzyłem aplikację dla systemu IOS dla e-commerce z бэкэндом w nodejs (AWS Lambda). Gdy użytkownik loguje się do systemu/loguje się do systemu, aplikacja jest podpisana na temat SNS, którą stworzyłem do wysyłania powiadomień, i utrzymuje token push i identyfikator urządzenia w baziedanych. Teraz chcę wysłać zgłoszenie do wszystkich użytkowników, którzy zarejestrowali się na ten temat SNS, gdy dodaliśmy nowy produkt do sklepu. Obecnie do wysyłania powiadomienia ja wybieram się do wszystkich użytkowników z bazy danych i uporządkować użytkowników, aby uzyskać ich push-token i wysyłać powiadomienia do użytkowników pojedynczo, co jest bardzo kosztowne, a API zajął zbyt wiele czasu.
Chcę teraz przejść do tematu SNS z Lambda i przekazać większość powiadomienia na ten temat, i ten motyw SNS wyśle powiadomienie do wszystkich użytkowników, którzy na ten temat. Szukałem go, ale nie mogę znaleźć żadnego rozwiązania.
Kod, który zrobiłem dla wysłania powiadomienia, wygląda tak
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);
});
}));
Ale do tego muszę wyjąć każdego użytkownika z bazy danych, zobacz jego punkt końcowy ARN, a następnie wysłać powiadomienie iteracji.
Chcę zadzwonić do tematu SNS, wyślij tekst powiadomienia, i SNS wyśle powiadomienie każdemu użytkownikowi, подписавшемуся na ten temat SNS.
Robię to, bo chcę zaoszczędzić na próbce wszystkich użytkowników z bazy danych, a następnie wysłać zgłoszenie