任何人在Amazon SNS和Apple推送通知中使用Node.js?

我正在寻找与Amazon SNS和Apple APN推送通知一起使用node.js的示例。 我们使用亚马逊作为我们的托pipe服务,之前我使用过SNS,这非常简单。 但是他们推送通知的例子是针对java的,Node没有例子。 像往常一样,他们感到困惑,我希望削减我的研究和时间。 这不可能是那么难。 我也想知道他们如何处理错误,以及沙箱和生产之间的差异。 苹果公司在这两种环境之间的反应是不一样的,而不是像在生产中一样在沙盒里失败。

结果不是那么难,只是弄清楚文档是不愉快的。 您需要在控制台中为SNS主题创build主要端点,这是最简单的方法,包括加载证书。 然后使用createPlatformEnpoint为每个设备ID创build一个端点。 这将返回另一个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); } }); }); 

CargoMeister指出,这是相当简单的。

我已经写了一篇关于让它安装的博客文章在这里检查它http://evanshortiss.com/development/mobile/2014/02/22/sns-push-notifications-using-nodejs.html

我也有一个比AWS SDK更易于使用的Node.js包装器模块,因为我已经处理了文档。 它支持iOS和Android推送服务(就像我testing/使用过的那样),pipe理string以外的消息格式并公开事件: https : //npmjs.org/package/sns-mobile

我没有使用主题来pipe理端点,但不确定是否是一个问题。 您只需通过SNS控制台创buildPlatformEndpoints。

 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) })