Wyślij powiadomienie SNS wszystkich użytkowników, którzy na ten temat z Lambda

0

Pytanie

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

1

Najlepsza odpowiedź

0

Oto, jak można osiągnąć tego strumienia. Myślę, że masz już niektóre części tego planu.

  1. Utwórz temat, który będzie używany do dystrybucji powiadomienia wszystkich użytkowników: https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html

  2. Tworzenie aplikacji(aplikacji) platformy dla różnych platform, na których działa aplikacja: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html

  3. Gdy użytkownik zarejestruje się w aplikacji, należy utworzyć punkt końcowy platformy dla aplikacji, odpowiedni platformie użytkownika: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html

    3.1. Jeśli chcesz mieć możliwość bezpośredniego skupić się na tego użytkownika, również zapisać ten ARN gdzieś do bezpośredniej publikacji (jak teraz).

  4. Teraz także utwórz subskrypcję na temat, który został utworzony w kroku 1, do punktu końcowego ARN: https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html

  5. Opublikuj w temacie, utworzonego w kroku 1: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html

SNS automatycznie wysadzi wiadomość do wszystkich abonentów (wszystkich użytkowników), więc każdy z nich otrzyma powiadomienie bez powtarzania każdego użytkownika.

2021-11-24 23:11:24

W innych językach

Ta strona jest w innych językach

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