Inviare SNS di notifica a tutti gli Utenti che hanno sottoscritto l'argomento da Lambda

0

Domanda

Ho creato un E-Commerce app IOS con backend in nodejs (AWS Lambda). Quando un utente signingout/LoggedIn, l'app sottoscrive un SNS Argomento che ho creato per l'invio di notifiche e memorizza il push token e dispositivo di ARN in DB. Ora voglio inviare notifiche push a tutti gli utenti che hanno sottoscritto SSN Argomento, quando abbiamo aggiunto un nuovo elemento per il negozio. Attualmente, per inviare la notifica io sono il recupero di tutti gli utenti dal DB e loop attraverso la gli utenti a ottenere la loro spinta token e inviare notifiche agli utenti uno per uno, che è molto costoso processo, e l'API ha preso troppo tempo.

Ora, voglio fare è quello di colpire la SNS argomento da Lambda e passare il corpo di notifica a tale argomento e che SNS argomento invierà notifica a tutti gli utenti che hanno sottoscritto l'Argomento. Ho cercato, ma non riesce a trovare nessuna soluzione.

Il codice che ho fatto per inviare la notifica è

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);
        });
     }));

Ma per questo devo recuperare ogni utente dal DB ottenere i loro endpoint ARN e quindi inviare la notifica di iterazione.

Voglio chiamare SNS argomento di passare il corpo di notifica e SNS invierà una notifica per ogni utente che ha sottoscritto SSN argomento.

Sto facendo questo perché voglio risparmiare il costo per recuperare tutti gli utenti dal DB e poi inviare la notifica

1

Migliore risposta

0

Questo è come si può raggiungere tale flusso. Penso che si dispone già di alcune parti di questa implementato.

  1. Creare un argomento che verrà utilizzato per il ventaglio di notifica a tutti gli utenti: https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html

  2. Creare un'applicazione della piattaforma(s) per diverse piattaforme app è usato su: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html

  3. Quando un utente si iscrive per la tua app, creare una piattaforma di endpoint per l'applicazione corrispondente per l'utente della piattaforma: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html

    3.1. Se si vuole essere in grado di obiettivo di questo utente direttamente, anche memorizzare questo ARN da qualche parte diretta pubblica (come si sta facendo ora).

  4. Ora anche creare una sottoscrizione per l'argomento creato nel passaggio 1 per l'endpoint ARN: https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html

  5. Pubblica per l'argomento creata durante la fase 1: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html

SNS automaticamente fan un messaggio a tutti gli iscritti (tutti gli utenti), in modo che ognuno di loro riceverà una notifica, senza che si iterare su ogni utente.

2021-11-24 23:11:24

In altre lingue

Questa pagina è in altre lingue

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