首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有人在亚马逊SNS和苹果推送通知中使用Node.js吗?

有人在亚马逊SNS和苹果推送通知中使用Node.js吗?
EN

Stack Overflow用户
提问于 2014-02-07 00:54:51
回答 3查看 12.1K关注 0票数 17

我正在寻找与亚马逊SNS和苹果APN推送通知使用node.js的例子。我们使用Amazon进行托管,我以前也使用过SNS,这非常简单。但是他们有推送通知的例子是java的,没有Node的例子。和往常一样,这让他们感到困惑,我希望能缩短我的研究和时间。不会那么难的。我也想知道他们是如何处理错误的,以及沙箱和生产之间的区别。Apple在两种环境中的反应不同,不会像在生产环境中那样在沙箱中失败。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-08 00:51:35

这并不是很难,只是弄清楚文档是令人不快的。您需要在控制台中创建SNS主题的主端点,这是目前为止最简单的方法,包括加载证书。然后使用createPlatformEnpoint为每个设备id创建一个端点。这将返回另一个特定于该设备的SNS主题,然后您可以使用该主题来发送消息。

因此,下面的代码将向单个客户端发送一条消息。如果你想集体发送一些东西,你不确定你能做到。我也不确定你如何处理苹果的反馈,你应该检查失败的发送。

代码语言:javascript
复制
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);

        }
    });
});
票数 20
EN

Stack Overflow用户

发布于 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即可。

票数 8
EN

Stack Overflow用户

发布于 2016-11-03 16:13:57

代码语言:javascript
复制
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)
})
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21609121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档