Ale*_*ari 19 amazon-web-services node.js amazon-sns
I have a issue with publishing sns to a specific endpoint.
我的代码:
var AWS = require('aws-sdk');
AWS.config.loadFromPath('/web/config.json');
var sns = new AWS.SNS();
sns.publish({
// TopicArn:'arn:aws:sns:us-west-2:302467918846:MyTestTopik',
TargetArn: 'arn:aws:sns:us-west-2:302467918846:MyTestTopik:613ee49c-d4dc-4354-a7e6-c1d9d8277c56',
Message: "Success!!! ",
Subject: "TestSNS"
}, function(err, data) {
if (err) {
console.log("Error sending a message " + err);
} else {
console.log("Sent message: " + data.MessageId);
}
});
Run Code Online (Sandbox Code Playgroud)
当我使用时TopicArn,一切都很好.但是当我尝试向特定端点发送通知时,我会收到错误:
发送消息时出错InvalidParameter:参数无效:主题名称
我不知道它是什么样的参数,从哪里来.
guy*_*uya 15
类似的东西对我来说很好.我可以使用以下方式发布到特定端点:Apple推送通知服务沙箱(APNS_SANDBOX)
您可能还想尝试更新aws-sdk,当前版本是1.9.0.
这是我的代码,TargetArn是直接从SNS控制台复制的.我省略了一些数据,比如&
var sns = new AWS.SNS();
var params = {
TargetArn:'arn:aws:sns:us-west-2:302467918846:endpoint/APNS_SANDBOX/<APP_NAME>/<USER_TOKEN>'
Message:'Success!!! ',
Subject: 'TestSNS'
};
sns.publish(params, function(err,data){
if (err) {
console.log('Error sending a message', err);
} else {
console.log('Sent message:', data.MessageId);
}
});
Run Code Online (Sandbox Code Playgroud)
您的区域可能无效.检查主题的Region并相应地进行设置.例如,如果你是us-west-2,你可以做类似的事情
var sns = new aws.SNS({region:'us-west-2'});
Run Code Online (Sandbox Code Playgroud)
如果你不按摩有效载荷,这些都不会起作用.
var arn = 'ENDPOINT_ARN';
console.log("endpoint arn: " + arn);
var payload = {
default: message_object.message,
GCM: {
data: {
message: message_object.message
}
}
};
// The key to the whole thing is this
//
payload.GCM = JSON.stringify(payload.GCM);
payload = JSON.stringify(payload);
// Create the params structure
//
var params= {
TargetArn: arn,
Message: payload,
MessageStructure: 'json' // Super important too
};
sns.publish(params , function(error, data) {
if (error) {
console.log("ERROR: " + error.stack);
}
else {
console.log("data: " + JSON.stringify(data));
}
context.done(null, data);
});
Run Code Online (Sandbox Code Playgroud)
所以,事实证明你必须指定消息结构(是json).我尝试从AWS控制台发布到端点,只要我选择了JSON,它就能很好地工作.使用RAW什么都不做.
在我的脚本中,以前的帖子正在做的事情:
var params = {
TargetArn: arn,
Message:'Success!!! ',
Subject: 'TestSNS'
};
Run Code Online (Sandbox Code Playgroud)
即使CloudWatch成功登录,我也从未收到过消息.一旦我添加了MessageStructure数据并且我正确地格式化了有效负载,它就像一个魅力.
[default]参数没用,但是我把它放在那里以显示结构的外观.
如果你没有字符串化有效载荷.GCM部分,SNS将barf并说你的消息应该包含一个"GCM"元素.
唯一令人讨厌的是你需要知道端点是什么.我希望你不必根据端点格式化消息,这在某些方面确实击败了SNS的目的.
| 归档时间: |
|
| 查看次数: |
23589 次 |
| 最近记录: |