【问题标题】:How often check APNS feedback?多久检查一次 APNS 反馈?
【发布时间】:2017-04-27 08:31:40
【问题描述】:

要检测无效令牌,我应该多久检查一次反馈服务?

我已经使用 APNS 服务实现了一个广播系统。我打开一个连接,发送所有 APNS 消息,然后断开连接。然后我在广播完成后立即打开反馈连接,并读取任何无效令牌。

我确实在反馈连接上获得了无效令牌。但是,通常我的广播只会部分成功(一些设备接收而其他设备不接收),并且当我删除除已知良好令牌之外的所有令牌时,我的测试设备始终会收到消息。

我认为这意味着 Apple 在收到前几个无效令牌后将停止广播。

所以我没有正确听取反馈吗?

【问题讨论】:

  • 经过进一步调查,我发现在发送了一个 Apple 不喜欢的 single 令牌(格式还可以,与普通令牌无法区分)后,他们就断开了我的连接。

标签: ios apple-push-notifications


【解决方案1】:

最后,正确处理此问题的唯一方法是改用 Apple 更新的“增强通知格式”。这种格式允许您为您发送的每条消息提供一个 ID,当 Apple 断开您的连接时,他们会向您发送错误和导致错误的消息的 ID。

这允许客户端正确地重试已经发送的消息,并丢弃无效的令牌

【讨论】:

    【解决方案2】:

    您应该在每次发送推送并删除非活动设备时检查反馈响应。不过,这看起来不像你现在的问题。

    您的问题看起来像您的数据库中有一些 invalid 令牌。如果您发送 invalid 令牌,Apple 将断开您的连接。发送非活动令牌将没有任何效果,但如果您发送格式错误/无效的令牌,Apple 将终止您的套接字。

    另一个问题可能是您缺少重试方案。您是否实施了任何例程来重新打开与 Apple 的连接,如果它在您推送时断开?你必须预测连接会失败,如果失败了,你必须把它放回去,从你停止的地方重新开始推送。

    你应该寻找的是:

    • 确保您的数据库中仅存有 VALID 令牌
    • 确保您有适当的重试方案
    • 看看Notnoop,它是一个非常简单的Java API,可以为你处理很多事情

    【讨论】:

    • 谢谢,不过,令牌似乎都有效。它们都来自 Apple 设备,具有相同的有效格式。重试方案是不可能的,因为 Apple 没有提供有关何时断开我的套接字的反馈。因为关闭套接字可能需要 100 毫秒左右,所以到那时我可能已经发送了数百个通知。
    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 2010-11-19
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多