1

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

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

所以看起来 iphone 只在应用程序启动时向苹果服务器重新请求令牌,然后对其进行硬缓存。但令牌仍然有类似 ttl 句点的东西。

每次应用程序要求它时,有什么方法可以强制 iphone 返回新的、实际的设备令牌?如何强制 iphone 重新检查苹果服务器上的设备令牌以确保它确实正常且健康?

请帮忙!


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

4

1 回答 1

3

从沙盒环境切换到生产环境后 - 问题消失了。所以沙盒和生产门之间存在区别:沙盒环境中的设备令牌 ttl 比生产中的要短得多。尽管如此,手机本身的设备令牌对于两种环境都是相同的。所以使用沙盒环境会导致这个问题 - 手机为应用程序返回无效(已经在服务器上无效)设备令牌

于 2012-06-08T08:13:55.613 回答