Enviar notificação SNS para todos os Utilizadores que subscreveram o tema a partir de Lambda

0

Pergunta

Eu criei um E-Commerce de aplicativos IOS com back-end em nodejs (AWS Lambda). Quando um usuário signedIn/LoggedIn, o app subscreva um SNS Tópico que eu criei para enviar notificações de e armazena o push e o token de dispositivo de ARN em DB. Agora quero enviar uma notificação de envio para todos os usuários que tenham se inscrito que SNS Tópico, quando adicionamos um novo item para a loja. Atualmente, para enviar a notificação estou buscando todos os usuários do banco de dados e o ciclo entre os usuários para obter sua empurrar token e enviar uma notificação aos usuários um por um, o que é muito dispendioso processo, e a API demorou muito tempo.

Agora eu quero fazer é acertar o tópico do SNS a partir de Lambda e passar no corpo da notificação, para que o tema e o SNS tópico irá enviar uma notificação para todos os utilizadores que subscreveram o Tópico. Eu tenho procurado, mas não pode encontrar qualquer solução.

O código de eu ter feito enviar uma notificação é

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

Mas para isso eu tenho que buscar a cada usuário do banco de dados a obter o seu ponto de extremidade de ARN e, em seguida, enviar a notificação por iteração.

Eu quero chamar tópico do SNS passar o corpo de notificação e o SNS vai enviar uma notificação para cada utilizador que tenha subscrito que SNS tópico.

Eu estou fazendo isso porque eu quero salvar o custo para a obtenção de todos os usuários do banco de dados e, em seguida, enviar uma notificação

1

Melhor resposta

0

Isto é como você pode atingir esse fluxo. Eu acho que você já tem algumas partes deste implementado.

  1. Crie um tópico que será usado para o ventilador a notificação para todos os seus usuários: https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html

  2. Criar um aplicativo de plataforma(s), para diferentes plataformas seu aplicativo é usado em: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html

  3. Quando um usuário se inscreve para o seu aplicativo, criar uma plataforma de ponto de extremidade para o aplicativo correspondente para o usuário da plataforma: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html

    3.1. Se você quer ser capaz de direcionar este usuário diretamente, também armazenar este ARN em algum lugar para que direta publica (como você está fazendo agora).

  4. Agora também criar uma assinatura para o tópico criado no passo 1 para o ponto de extremidade de ARN: https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html

  5. Publicar o tópico criado durante a etapa 1: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html

SNS automaticamente o ventilador da mensagem para todos os assinantes (todos os usuários), de modo que cada um deles irá receber uma notificação sem você iterar sobre cada usuário.

2021-11-24 23:11:24

Em outros idiomas

Esta página está em outros idiomas

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