【问题标题】:SNS Push Notification with NodeJS使用 NodeJS 的 SNS 推送通知
【发布时间】:2019-09-10 14:27:55
【问题描述】:

我已经阅读了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);
        }


    });
}

【问题讨论】:

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


    【解决方案1】:

    您使用的是 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);
        }
      });
    }
    

    【讨论】:

    • 我已经硬编码了platformAppArn。有没有办法从 AWS 动态获取?
    • 我已将运输从处理程序中取出并抛出Error: cannot send to unsupported platform sns
    【解决方案2】:

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

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

    另外,从上面的 addTransport 方法中删除平台应用 ARN。

    【讨论】:

    • 我已经硬编码了platformAppArn。有没有办法从 AWS 动态获取?
    • 我已经从 addTransport 方法中删除了 platformAppArn 并抛出了 Invalid parameter: TargetArn Reason: An ARN must have at least 6 elements, not 2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多