Car*_*ter 16 amazon-web-services apple-push-notifications node.js amazon-sns
我正在寻找使用带有Amazon SNS和Apple APN推送通知的node.js的示例.我们使用亚马逊进行托管,之前我使用过SNS,非常简单.但是它们用于推送通知的示例是针对java的,并且没有Node的示例.这和他们一样令人困惑,我希望减少我的研究和时间.它不会那么难.我也想知道他们如何处理错误,以及沙盒和生产之间的差异.Apple在两种环境之间做出不同的反应,而不是像生产中那样在沙箱中失败.
Car*_*ter 20
它最终没有那么难,只是弄清楚文档是不愉快的.您需要在控制台中为SNS主题创建主要端点,这是迄今为止最简单的方法,包括加载证书.然后,您使用createPlatformEnpoint为每个设备ID创建端点.这将返回另一个SNS主题,特定于该设备,然后您可以使用该主题发送消息.
因此,以下工作将单个消息发送到单个客户端.如果你想集体发送一些东西,不确定你能做到这一点.还不确定你如何处理Apple的反馈,你应该检查失败的发送.
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
我还有一个Node.js包装器模块,它比AWS SDK更容易使用,因为我已经使用了文档.它支持iOS和Android推送服务(因为我已经测试/使用过),管理除Strings之外的消息格式并公开事件:https://npmjs.org/package/sns-mobile
我没有使用主题来管理端点,但不确定是否存在问题.您只需通过SNS控制台创建PlatformEndpoints.
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)
})