4

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

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

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

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

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

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

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

这个问题真的让我抓狂,因为通知对我们的服务非常重要。因此,如果有人知道这里可能存在什么问题,那真的可以挽救生命!

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

4

1 回答 1

0

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

我还是不明白为什么apns-php没有检测到连接关闭。但是我通过在 30 分钟不活动后每次发送通知时自动重新连接到 APNS 来解决它(我本可以选择 2 小时,但我只是想确保没有问题)。

于 2012-12-20T10:12:15.920 回答