amazon-web-services - 使用 AWS Lambda 控制台使用 SNS 发送推送
问题描述
我在互联网上尝试了所有可能的解决方案,没有希望
我想要做的只是使用 aws lambda 函数(通过 aws 控制台)从假设 DynamoDB(不包括在问题中)获取用户 fcm 令牌,使用该令牌创建端点Arn,将推送发送到该特定设备
我测试了使用 SNS 控制台发送,并且推送成功到达设备,但我未能使用 Lambda 函数将其发送到设备,尽管它提供了成功状态和消息 ID
这是我使用的代码
// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set region
AWS.config.update({region: 'us-east-1'});
const sns = new AWS.SNS()
const sampleMessage = {
"GCM": {
"notification": {
"body": "Sample message for Android endpoints",
"title":"Title Test"
}
}
}
exports.handler = async (event) => {
const snsPayload = JSON.stringify(sampleMessage);
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
const params = {
PlatformApplicationArn: '<Platform Arn>',
Token: '<FCM Token>'
};
try {
const endpointData = await sns.createPlatformEndpoint(params).promise();
const paramsMessage = {
Message: snsPayload,
TargetArn: endpointData.EndpointArn
};
var publishTextPromise = await sns.publish(paramsMessage).promise();
response.MessageId = publishTextPromise.MessageId;
response.result = 'Success';
}
catch (e) {
console.log(e.stack)
response.result = 'Error'
}
return response;
};
解决方案
经过一些试验和错误后,我为自己的问题找到了解决方案
1- 有效负载的 GCM 部分应该是字符串而不是 json 2- 消息参数应该有一个属性,将有效负载的 mime 类型显式设置为 Json
考虑到所有这些
const GCM_data = {
'notification': {
'body': 'Hellow from lambda function',
'title': 'Notification Title'
}
}
const data = {
"GCM": JSON.stringify(GCM_data)
}
const snsPayload = JSON.stringify(data)
参数应该看起来像
const paramsMessage = {
Message: snsPayload,
TargetArn: endpointData.EndpointArn,
MessageStructure: 'json'
};
这将起作用:)
推荐阅读
- mysql - 在 MYSQL 中删除内连接
- html - 背景图像未显示在div中
- python - 替换文件错误:字符串索引必须是整数
- react-native - 将双引号添加到数组
- c++ - 与 Qt Creator 捆绑在一起的 clang-tidy [clang-diagnostic-error]
- html - 有没有办法仅在 bulma css 框架中更改移动设备的填充值?
- blender - 镜面材质无法正确显示反射
- svelte - 在 SvelteKit 中设置 SSG 和 Prerender
- spring - 以编程方式生成多个 bean
- influxdb - 通过线路协议写入 InfluxDB 优于 Json 协议的优势