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

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

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

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

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

当我启动 worker 时,我收到了我应该收到的通知。

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

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

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

这个问题真的快把我逼疯了,因为通知对我们的服务来说真的很重要。因此,如果有人知道这里可能存在什么问题,那真的可以挽救生命!

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

最佳答案

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

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

关于php - APNS 通知已正确发送但一段时间后未收到。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13825507/

相关文章:

mysql - `device.id` 在生产中返回 `NULL`,但在开发中工作正常

php - 准备好的语句一次执行多个查询

php - 在 Zend Lucene 中将范围查询与多项查询相结合

php - 尝试使用查询从数据库中过滤数据。为什么这行不通?

android - 长轮询与 Apple 推送通知服务和 Android C2DM

node.js - 为什么苹果推送通知服务有时会给我错误 500?

php - Drupal 7 : Field input generated by wizard

objective-c - 快速排序按业务键排序数组?

objective-c - 按字典值返回对象的索引

objective-c - 使用 objective-c 中的类别私下扩展协议(protocol)