Отправить уведомление SNS всем пользователям, подписавшимся на эту тему из Lambda

0

Вопрос

Я создал приложение для 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.

Я делаю это, потому что хочу сэкономить на выборке всех пользователей из базы данных, а затем отправить уведомление

1

Лучший ответ

0

Вот как вы могли бы достичь этого потока. Я думаю, что у вас уже есть некоторые части этого плана.

  1. Создайте тему, которая будет использоваться для распространения уведомления на всех ваших пользователей: https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html

  2. Создайте приложение(приложения) платформы для различных платформ, на которых используется ваше приложение: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html

  3. Когда пользователь регистрируется в вашем приложении, создайте конечную точку платформы для приложения, соответствующую платформе пользователя: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html

    3.1. Если вы хотите иметь возможность напрямую ориентироваться на этого пользователя, также сохраните этот ARN где-нибудь для прямых публикаций (как вы делаете сейчас).

  4. Теперь также создайте подписку на тему, созданную на шаге 1, для конечной точки ARN: https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html

  5. Опубликуйте в теме, созданной на этапе 1: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html

SNS автоматически разнесет сообщение всем подписчикам (всем вашим пользователям), поэтому каждый из них получит уведомление без повторения каждого пользователя.

2021-11-24 23:11:24

На других языках

Эта страница на других языках

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