0

我有一个服务器端 java 应用程序,它将批量推送消息发送到苹果服务器。最近我收到多个SSLSocketException: Connection closed by remote host OR SSLSocketException: Broken pipe expcetions。

我知道如果我发送无效令牌,苹果会强制关闭连接。我也有一个反馈循环,但失败的令牌永远不会出现在反馈循环中,因为它们甚至不被苹果接受。

有什么算法或方法可以知道,为什么设备令牌是“无效的”?

4

1 回答 1

2

为什么设备令牌无效?

假设您从 Apple 获得了所有设备令牌并且没有创建虚拟令牌,那么无效令牌的最可能原因是同时具有生产令牌和沙盒令牌的数据库。

如何查找哪些令牌无效:

您应该使用增强的 APN 格式,在其中指定消息 ID。在您向 Apple 发送每条消息后,您应该在将超时设置为足够大的值后尝试从套接字读取。Apple 将针对指定消息 ID 的无效令牌向您发送错误响应。这将让您找到无效的令牌并将它们从您的数据库中删除。请注意,您应该只使用此方法(在每条消息后长时间读取响应)来清理您的数据库。在您的数据库从无效令牌中清除后,您不想使用它,因为它会使通知传递非常缓慢。

于 2013-02-12T23:05:01.527 回答