为啥苹果推送通知服务有时会给我错误 500?

Posted

技术标签:

【中文标题】为啥苹果推送通知服务有时会给我错误 500?【英文标题】:Why apple push notification service sometimes gives me error 500?为什么苹果推送通知服务有时会给我错误 500? 【发布时间】:2016-11-04 17:55:55 【问题描述】:

我有一个 node.js 项目,用于应用程序的后端,我必须向 androidios 发送推送通知,问题是,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。它通常通过重新启动节点服务器来修复自己,但这可以t 发生在生产中。我能做些什么来解决这个问题吗?是 APNS 问题还是我正在做的事情?

编辑:我正在使用这个 npm 包https://www.npmjs.com/package/apn

【问题讨论】:

有同样的问题 也许你已经修好了? 它一直在发生,我似乎无法找到导致它的原因。因为那个项目有点死了,我从来没有修复它,我稍后再检查一下,看看我能找到什么,如果你找到了,我将永远感激不尽。 另外,我只是意识到我没有说我使用的是什么 NPM 包。我用的是npmjs.com/package/apn,你们用的是同一个包吗? 【参考方案1】:

我是Pushy 的主要作者,这是一个 Java 推送通知库。我无法权威地谈论您正在使用的库的具体细节,但可以对 APNs 大体上充满信心地发表评论。

这听起来像是一个上游错误;在任何情况下,APNs 服务器都不应发送 InternalServerError 而不是更具体的内容(例如,“过期的身份验证令牌”或“消息过多”); InternalServerError 绝对表明苹果方面出了问题。我强烈推荐file a bug report with Apple;我不认为这是您自己或apn 包的作者可以解决的问题。

【讨论】:

好像是这样,这是不久前的事了,从那以后我就停止了那个项目。但是现在我在一个正在进行的项目中使用这个代码,我会看看这是否会再次发生并收集数据来通知苹果。谢谢你的建议:)

以上是关于为啥苹果推送通知服务有时会给我错误 500?的主要内容,如果未能解决你的问题,请参考以下文章

14 - 苹果远程推送原理

苹果的推送通知服务可靠吗?

使用 pubnub 设置推送通知

苹果推送通知错误

苹果推送通知服务

为啥我收到此警告“缺少推送通知权利”