多久检查一次APNS反馈?

9
检测无效标记,我应该多久检查一次反馈服务?
我使用APNS服务实现了广播系统。我打开连接,发送所有APNS消息,然后断开连接。然后在广播完成后立即打开反馈连接,并读取任何无效标记。
我确实会在反馈连接上收到无效的标记。但是,通常情况下,我的广播只会部分成功(有些设备接收,其他设备则没有),当我只保留已知良好的标记时,我的测试设备仍然能够稳定接收到消息。
我认为这意味着苹果在收到前几个无效标记后停止了广播。
那么我是不是没有正确监听反馈呢?

2
经过进一步调查,我发现在发送了一个苹果不喜欢的单个令牌(格式正确,与正常令牌无法区分)后,他们将我断开连接。 - Justin Francis
2个回答

3

最终,妥善处理这个问题的唯一方法是转换为苹果的新的“增强型通知格式”。该格式允许您为发送的每条消息提供一个ID,当苹果断开连接时,他们会发送错误和导致错误的消息的ID。

这使得客户端可以正确地重试已发送的消息,并且删除无效的令牌。


2
每次发送推送消息时,您都应该检查反馈响应并删除不活跃的设备。虽然现在看起来这不像是您的问题。
您的问题似乎是数据库中存在一些无效的令牌。如果您发送了无效的令牌,苹果将断开您的连接。发送不活动的令牌将没有任何效果,但是如果您发送了格式错误/无效的令牌,苹果将关闭您的套接字。
另一个问题可能是您的端缺少重试机制。您是否实现了任何例程,以便在推送期间连接与苹果断开时重新打开连接?您必须预测连接可能会失败,如果发生这种情况,您必须将其重新启动,并从停止的位置开始再次推送。
您应该寻找的内容包括:
- 确保您的数据库只存储有效的令牌 - 确保您有一个可用的重试机制 - 查看Notnoop,它是一个非常简单的Java API,可以为您处理很多事情

谢谢,所有令牌似乎都是有效的。它们都来自苹果设备,具有相同的有效格式。重试方案是不可能的,因为苹果没有关于何时断开我的套接字的反馈。因为关闭套接字可能需要100毫秒左右的时间,所以在那之前我可能已经发送了数百个通知。 - Justin Francis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接