【发布时间】:2021-02-19 15:49:25
【问题描述】:
当从 AWS Lambda 同时向 Apple Push Notifications 发布多条消息时,我发现 AWS SNS 的一个奇怪行为 - 每条发布的消息都会被订阅者接收两次。
我的代码如下
handler.js
const uuid = require('uuid')
const aws = require('aws-sdk');
const sns = new aws.SNS({ apiVersion: '2010-03-31' })
const messageSender = async (event, context, callback) => {
// sending 3 messages one after another
publishMessage("title1", "message1")
publishMessage("title2", "message2")
publishMessage("title3", "message3")
return []
}
const publishMessage = (title, message) => {
sns.publish({
Message: JSON.stringify({
"default": "default message",
"APNS_SANDBOX": JSON.stringify({
"aps": {
"alert": {
"title": title,
"body": message
},
"badge": 1,
"id": uuid.v4(),
"foo": "bar"
}
})
}),
MessageStructure: 'json',
TopicArn: process.env.TOPIC_ARN
}).promise()
console.log(`Message for topic is published: ${message}`)
}
但是,如果我只发布如下所示的一条消息,则只会收到一次确切的消息。
const messageSender = async (event, context, callback) => {
publishMessage("title1", "message1")
return []
}
任何想法为什么在发送多条消息时会收到两次相同的消息?
编辑
在玩了一段时间后,我发现了以下内容。
重复是由潜在的 Amazon SNS 错误(?)引起的。如果不发送 JSON 格式,重复错误就会消失。例如删除MessageStructure: 'json' 并将消息更改为仅字符串,如下所示。
sns.publish({
Message: "this is a sample message",
TopicArn: process.env.TOPIC_ARN
}).promise()
这是该问题的解决方法,但原始问题的根本原因仍然未知。
该解决方法有缺点,因为它无法使用 APN 属性自定义通知,例如向推送通知和徽章添加标题。
任何其他解决方法或知道修复的人?
【问题讨论】:
标签: node.js amazon-web-services aws-lambda apple-push-notifications amazon-sns