APN设备令牌在一段时间后停止接收任何apns

时间:2012-05-24 12:17:10

标签: push-notification apple-push-notifications

我有应用程序定期从我的服务器接收APN。它在启动时调用registerForRemoteNotificationTypes,然后定期重新获取它(在工作时)。它正确接收设备令牌并将其发送到后台服务器供以后使用。

但是有一个问题:
- 启动应用程序后,它会正确地通过应用程序启动时iphone生成的设备令牌接收从我的服务器发送的所有apn。
- 但是当应用程序停留在后台(没有任何重启)8-12小时后,它就会停止接收任何内容
- 通过检查应用程序/服务器日志,我看到该应用程序通过registerForRemoteNotificationTypes定期正确地重新获取新令牌,正确接收它从一开始就具有的完全相同的令牌,后台服务器继续使用它来发送apns并将它们发送到苹果而没有任何错误通过插座
- 但是消息根本不再显示在设备上,根本没有调用didReceiveRemoteNotification
- 手动退出应用程序并重新启动它有助于--registerForRemoteNotificationTypes返回另一个令牌,这非常有效 - 服务器使用它来发送apns,设备会立即接收它们,如预期的那样。

所以看起来iphone只在应用程序启动时重新分配苹果服务器的令牌,然后硬拷贝它。但令牌仍然有类似ttl时期的东西。

有没有办法强制iphone每次应用程序要求时返回新的,实际的设备令牌?如何强制iphone重新检查苹果服务器上的设备令牌,以确保它真的好运和健康?

请帮忙!


UPD:设法缩小了问题范围 - 使用沙盒apn环境的问题应用程序(因为我们正在开发它) - 我将APN发送程序更改为扩展协议,现在看到一段时间后aplle沙盒服务器开始回复错误8 - 无效令牌。同时设备从registerForRemoteNotification 接收相同的旧令牌。所以iOS上刷新令牌肯定存在问题

1 个答案:

答案 0 :(得分:2)

从沙盒环境切换到生产环境后,问题就消失了。 因此沙箱和生产门之间存在差异:沙箱环境中的设备令牌ttl比生产中的设备令牌ttl短得多。但是,手机本身的设备令牌对于两种环境都是相同的。因此,使用沙箱环境会导致此问题 - 电话返回无效(已在服务器上无效)应用程序的设备令牌