我正在寻找与亚马逊SNS和苹果APN推送通知使用node.js的例子。我们使用Amazon进行托管,我以前也使用过SNS,这非常简单。但是他们有推送通知的例子是java的,没有Node的例子。和往常一样,这让他们感到困惑,我希望能缩短我的研究和时间。不会那么难的。我也想知道他们是如何处理错误的,以及沙箱和生产之间的区别。Apple在两种环境中的反应不同,不会像在生产环境中那样在沙箱中失败。
发布于 2014-02-08 00:51:35
这并不是很难,只是弄清楚文档是令人不快的。您需要在控制台中创建SNS主题的主端点,这是目前为止最简单的方法,包括加载证书。然后使用createPlatformEnpoint为每个设备id创建一个端点。这将返回另一个特定于该设备的SNS主题,然后您可以使用该主题来发送消息。
因此,下面的代码将向单个客户端发送一条消息。如果你想集体发送一些东西,你不确定你能做到。我也不确定你如何处理苹果的反馈,你应该检查失败的发送。
config = require("./config.js").config;
var token = "1234567898123456789";
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: config.AWSAccessKeyId, secretAccessKey: config.AWSSecretKey});
AWS.config.update({region: config.AWSRegion});
var sns = new AWS.SNS();
var params = {'PlatformApplicationArn':config["AWSTargetARN"],'Token':token};
var message = 'Test';
var subject = 'Stuff';
sns.createPlatformEndpoint(params,function(err,EndPointResult)
{
var client_arn = EndPointResult["EndpointArn"];
sns.publish({
TargetArn: client_arn,
Message: message,
Subject: subject},
function(err,data){
if (err)
{
console.log("Error sending a message "+err);
}
else
{
console.log("Sent message: "+data.MessageId);
}
});
});
发布于 2014-03-21 04:26:49
正如CargoMeister所指出的,这相当简单。
我写了一篇关于设置的博客文章在这里查看http://evanshortiss.com/development/mobile/2014/02/22/sns-push-notifications-using-nodejs.html
我还有一个Node.js包装器模块,它比AWS SDK更容易使用,因为我已经解决了文档问题。它支持iOS和安卓推送服务(因为这是我测试/使用的全部内容),管理字符串以外的消息格式,并公开事件:https://npmjs.org/package/sns-mobile
我没有使用主题来管理端点,但不确定这是一个问题。您只需先通过SNS控制台创建PlatformEndpoints即可。
发布于 2016-11-03 16:13:57
var AWS = require('aws-sdk');
var express = require('express');
var app = express();
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'add IdentityPoolId'
});
AWS.config.region = 'add region';
var sns = new AWS.SNS();
sns.createPlatformEndpoint({
PlatformApplicationArn: 'add platform application arn',
Token: 'add device token'
}, function (err, data) {
if (err) {
console.log("errorMessage" + err.stack);
return;
}
var endpointArn = data.EndpointArn;
var payload = {
default: 'Hello World',
APNS: {
aps: {
alert: 'Hello World',
sound: 'default',
badge: 1
}
}
};
// first have to stringify the inner APNS object...
payload.APNS = JSON.stringify(payload.APNS);
// then have to stringify the entire message payload
payload = JSON.stringify(payload);
console.log('sending push');
sns.publish({
Message: payload,
MessageStructure: 'json',
TargetArn: endpointArn
}, function (err, data) {
if (err) {
console.log(err.stack);
return;
}
console.log('push sent');
console.log(data);
});
});
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
https://stackoverflow.com/questions/21609121
复制相似问题