我有一个node.js项目,我用于应用程序的后端,我必须向android和ios发送推送通知,问题是,APNS有时会给我一个错误500试图发送通知。
通常的回复如下:
{ sent: [],
failed: [ { device: '<device_id>',
status: '500',
response: { reason: 'InternalServerError' } } ]
我读到如果你一次发送太多,APNS可以拒绝连接,问题是我通常不会发送那么多,比如每秒最多1个通知。
我使用node-apn,这里是发送通知的代码。
function sendIosNotification(deviceTokens,body,data,musico) {
var notification = new apn.Notification();
if (musico) {
notification.topic = "<name_goes_here>.musico";
} else {
notification.topic = "<name_goes_here>.cliente";
}
notification.alert = body;
notification.badge = 1;
notification.sound = "dong.aiff";
notification.payload = data;
apnProvider.send(notification, deviceTokens)
.then( (response) => {
console.log(response);
console.log(response.failed);
});
}
它工作,我把它安装在测试服务器上,但是当我,例如,让它过夜时,第二天它只给我500个错误。它通常通过重新启动节点服务器来修复自己,但这在生产中不会发生。我能做点什么来弥补吗?这是APNS问题还是我正在做的事情?
编辑:我正在使用这个npm包https://www.npmjs.com/package/apn
我是Pushy的主要作者,这是一个Java推送通知库。我不能权威地谈论你正在使用的库的细节,但可以自信地评论一般的apn。
这听起来像是上游的bug;在任何情况下,APNs服务器都不应该发送InternalServerError
而不是更具体的东西(例如,"过期的身份验证令牌"或"消息太多");InternalServerError
无疑表明苹果这边出了问题。我强烈建议你向苹果提交bug报告;我不认为这个问题可以由你或apn
包的作者来解决。