【问题标题】:APNS notifications sent correctly but not received after a while. Why?APNS 通知已正确发送,但一段时间后未收到。为什么?
【发布时间】:2012-12-11 17:36:40
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 你会发布你的修改吗?我有类似的问题,但我正在使用 nodejs :(
    • 我只是存储了一个带有上次连接时间的变量,每次发送通知时,我都会检查上次连接时间。如果超过 30 分钟,我会重新连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2016-02-11
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多