[英]Send SNS notification to all Users that subscribed the topic from Lambda
我在 nodejs (AWS Lambda)中創建了一個帶有后端的電子商務 IOS 應用程序。 當用戶登錄/登錄時,該應用程序訂閱了我創建的用於發送通知的SNS 主題,並將推送令牌和設備 ARN存儲在數據庫中。 現在,當我們向商店添加新商品時,我想向所有訂閱該 SNS 主題的用戶發送推送通知。 目前,為了發送通知,我正在從數據庫中獲取所有用戶並循環用戶以獲取他們的推送令牌並將通知一一發送給用戶,這是一個非常昂貴的過程,並且 API 花費了太多時間。
現在我想做的是從 Lambda 中點擊 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 主題的每個用戶發送通知。
我這樣做是因為我想節省從數據庫中獲取每個用戶然后發送通知的成本
這就是您實現該流程的方式。 我認為您已經實現了其中的某些部分。
創建一個將用於向所有用戶發送通知的主題:https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html
為使用您的應用程序的不同平台創建平台應用程序: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html
當用戶注冊您的應用程序時,為應用程序創建與用戶平台對應的平台端點: https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html
3.1。 如果您希望能夠直接定位此用戶,還可以將此 ARN 存儲在某個地方以供直接發布(就像您現在所做的那樣)。
現在還為端點 ARN 的步驟 1 中創建的主題創建訂閱: https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html
發布到在步驟 1 中創建的主題: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html
SNS 會自動將消息散播給所有訂閱者(您的所有用戶),因此他們每個人都會收到通知,而無需您遍歷每個用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.