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