我有一个服务器端java应用程序,它将批量推送消息发送到苹果服务器。最近我得到了多个 SSLSocketException:连接被远程主机关闭或 SSLSocketException:管道崩溃损坏。
据我所知,如果我发送无效令牌,苹果会强行关闭连接。我也有一个反馈循环,但失败的令牌永远不会出现在反馈循环中,因为它们甚至不被苹果接受。
是否有任何算法或方法可以知道,为什么设备令牌“无效”?
答案 0 :(得分:2)
为什么设备令牌无效?
假设您从Apple获得了所有设备令牌并且未创建虚拟令牌,则无效令牌的最可能原因是具有生产令牌和沙箱令牌的数据库。
如何查找哪些令牌无效:
您应该使用增强的APN格式,您可以在其中指定消息ID。在您发送给Apple的每条消息之后,您应该在将超时设置为足够大的值后尝试从套接字读取。 Apple将向您发送无效令牌的错误响应,这些令牌指定了消息ID。这将让您找到无效的令牌并将其从您的数据库中删除。 请注意,您应该只使用此方法(在每个具有长超时的消息之后读取响应)以清理数据库。数据库从无效令牌中清除后,您不想使用它,因为它会使通知传递速度非常慢。