[英]Published sns message from lambda function not received by device
我有一個非常簡單的 lambda 函數,它向主題發布消息,如下所示:
const AWS = require('aws-sdk');
const sns = new AWS.SNS()
const TOPIC_ARN = "arn:aws:sns:us-east-1:<topic ARN>";
const TARGET_ARN = "arn:aws:sns:us-east-1:<target ARN>";
exports.handler = async (event) => {
return sns.publish({
Message: JSON.stringify({
"default": "any value",
"GCM": "{ \"notification\": { \"body\": \"message body\", \"title\": \"message title \", \"sound\":\"default\" } , \"data\" : {\"key\" : \"value\", \"key2\" : \"value\" } }"
}),
TargetArn: TARGET_ARN,
// TopicArn: TOPIC_ARN, also tried this same result
})
.promise()
.then(() => ({statusCode: 204, body: ''}))
.catch(err => {
console.log(err);
return {statusCode: 500, body: 'sns-error'};
});
};
該函數執行沒有問題,我可以在我的雲監視日志中看到成功事件。
問題是設備永遠不會收到通知。
我知道 ARN 是正確的,因為我可以轉到 SNS 控制台並將相同的消息發布到設備並被接收。
我還可以在我的本地機器上啟動一個 nodejs 應用程序並將相同的消息發布到 ARN,它被接收,沒問題。
我還在平台應用程序上配置了交付狀態日志記錄,我可以從 lambda 函數中看到類似這樣的成功響應:
{
"notification": {
"messageMD5Sum": "<sting of numbers>",
"messageId": "<sting of numbers>",
"timestamp": "2021-07-23 15:35:02.167"
},
"delivery": {
"deliveryId": "<sting of text>",
"destination": "<ARN>",
"providerResponse": "{\"multicast_id\":<sting of numbers>,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:<sting of text>\"}]}",
"dwellTimeMs": 28,
"attempts": 1,
"token": <correct device token>,
"statusCode": 200
},
"status": "SUCCESS"
}
為什么 lambda 函數是設備未收到 SNS 通知的唯一方法?
解決方案
const AWS = require('aws-sdk');
const sns = new AWS.SNS()
const TOPIC_ARN = "arn:aws:sns:us-east-1:<topic ARN>";
const TARGET_ARN = "arn:aws:sns:us-east-1:<target ARN>";
exports.handler = async (event) => {
return sns.publish({
Message: JSON.stringify({
"default": "any value",
"GCM": "{ \"notification\": { \"body\": \"message body\", \"title\": \"message title \", \"sound\":\"default\" } , \"data\" : {\"key\" : \"value\", \"key2\" : \"value\" } }"
}),
MessageStructure: 'json', //this solved the problem
TargetArn: TARGET_ARN,
})
.promise()
.then(() => ({statusCode: 204, body: ''}))
.catch(err => {
console.log(err);
return {statusCode: 500, body: 'sns-error'};
});
};
添加MessageStructure: 'json'解決了這個問題。
感謝您的所有建議。
編輯原始問題以包括答案:
添加MessageStructure: 'json'解決了這個問題。
感謝您的所有建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.