我已经为使用PHP的iPhone应用程序编写了推送通知(APNS,Apple推送通知服务)。一切都工作正常,而没有从设备中删除应用程序。我使用Apple的 Feedback Service 来获取已删除的设备。如果我收到设备,我会在我的数据库中将它们标记为 INACTIVE ,以便不再向这些设备发送推送通知。
问题是Apple很慢。如果您从设备中删除该应用程序,则会向Apple发送请求,并使用反馈服务收集设备。但Apple并未立即转发未激活的设备,因此我收到以下错误,因为我无法将推送通知发送到非活动设备:
PHP Warning: fwrite(): SSL: Broken pipe in apns.php on line 155
我的反馈服务脚本每5分钟运行一次,但Apple的更新每10-15分钟一次。如果我在10-15分钟内发送推送通知,则会出现上述错误,因为在数据库中设备仍标记为 ACTIVE ,而在Apple服务器上,设备标记为 INACTIVE 。
连接到反馈服务或推送服务没有问题,但我并不总是从反馈服务中获取设备。
电贺, TheFox
答案 0 :(得分:1)
来自Apple.com开发者论坛(https://devforums.apple.com/thread/114446)的回答:
您的服务器需要检测断开连接并在必要时重新连接。在涉及网络时,没有什么是“即时的”;总有一些延迟和代码需要考虑到这一点。 另外,请考虑使用增强型二进制接口,以便检查返回响应并了解连接被删除的原因。由于TCP保持活动状态,也可以删除连接,这超出了Apple的控制范围。
如果服务器检测到断开连接,我会将所有设备设置为 INACTIVE 。