APNS通知正确发送但一段时间后未收到。为什么?

时间:2012-12-11 17:36:41

标签: php objective-c apple-push-notifications apns-php

现在已经过了一周,我正在寻找我遇到的问题的答案,但我找不到任何东西,所以我将在这里提出这个问题!

我制作了一个可以向用户发送通知的iPhone应用程序。 所以,我有一个用PHP编码的通知服务器,它使用apns-php(http://code.google.com/p/apns-php/)

我的服务器可以随时发送通知,因此我有一个无限期运行的工作程序,每次收到要发送的通知(要发送的通知都在队列中)时,它会发送通知。为了尽可能最快,该工作者有10个可以发送通知的线程。

当我启动工作人员时,我会收到我想要收到的通知。

问题是,过了一段时间(我不知道是在经过特定时间或发送了特定数量的通知......还是别的东西!)后,我没有收到任何新的通知。当我查看apns-php的日志时,没有任何内容:所有消息似乎都被发送到APNS服务,没有错误(apns-php使用增强格式)。 一旦我重新启动工作人员,我再次收到通知(但只有一段时间)。

我在stackoverflow和Google上搜索过这个问题,到目前为止,我看到的唯一答案是:

  • 使用的证书/配置文件存在问题。我知道这不是问题,因为我在启动工作时收到通知
  • 我们的数据库中有一些开发设备令牌,这使APNS关闭连接。实际上,我们的数据库中可能存在一些开发设备令牌,但是当我查看apns-php代码时,如果连接已关闭,则会打开一个新连接。所以我不明白这会如何影响设备令牌之后发送的所有通知。

这个问题让我很生气,因为通知对我们的服务非常重要。所以,如果有人知道这里可能出现什么问题,那真的会节省生命!

PS:我没有发布任何代码,因为我没有具体的任何代码。我只是使用apns-php的send()函数来发送每个通知。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题的根源:如果2小时内打开的APNS连接没有活动,则连接超时,APNS关闭连接。

我仍然不明白为什么apns-php没有检测到连接已关闭。 但是我每次在30分钟不活动一段时间后发送通知时自动重新连接到APNS就解决了这个问题(我可以选择2个小时,但我只是想确保没有问题)。