使用NodeJS的SNS推送通知

时间:2019-09-10 04:26:36

标签: javascript node.js amazon-web-services amazon-sns

我已经阅读了node-push-notification-sns-transport的文档,并且已经在我的代码中实现了它,这第一次完全可以正常工作,但是第二次它向我展示了platform already configured,那么我不得不减少执行然后重建并重新运行,然后就可以正常工作了。我要去哪里错了?

sns = (req, res) => {
    push.addTransport(new SnsTransport({
        aws: {
            accessKeyId: cache.get('AMAZON_ACCESS_KEY'),
            secretAccessKey: cache.get('AMAZON_SECRET_KEY'),
            region: cache.get('AMAZON_REGION'),
            apiVersions: {
                sns: '2010-03-31'
            }
        },
        platformAppArn: 'arn:aws:sns:us-xxx-1:XXXXXX:app/GCM/Test'
    }));
    // Send a push notification via SNS.
    push.send('sns', 'device_token', {
        alert: 'how is it going?'
    }, (err, data) => {

        if (err) {
            res.send(err, req);
        } else {
            res.send(data);
        }


    });
}

2 个答案:

答案 0 :(得分:2)

您是否使用Express框架?我看到(req, res) => {语法非常熟悉。

如果这是真的,则只需一次通过AWS SNS配置推送通知。只需将您的传输配置为使用处理程序功能,请确保仅运行一次。

push.addTransport(new SnsTransport({
  aws: {
    accessKeyId: cache.get('AMAZON_ACCESS_KEY'),
    secretAccessKey: cache.get('AMAZON_SECRET_KEY'),
    region: cache.get('AMAZON_REGION'),
    apiVersions: {
      sns: '2010-03-31'
    }
  },
  platformAppArn: 'arn:aws:sns:us-xxx-1:XXXXXX:app/GCM/Test'
}));

sns = (req, res) => {
  // Send a push notification via SNS.
  push.send('sns', 'device_token', {
    alert: 'how is it going?'
  }, (err, data) => {

    if (err) {
      res.send(err, req);
    } else {
      res.send(data);
    }
  });
}

答案 1 :(得分:1)

尝试像这样在send方法中设置选项:

push.send('sns', 'DEVICE_TOKEN', { alert: 'how is it going?' }, { isEndpoint: true } ,(err, data) => {
  console.log(err);
  console.log(data);
});

此外,从上面的addTransport方法中删除平台App ARN。