1

我有一个使用 PushSharp 向 ios 设备发送推送通知的应用程序。它是一个 Windows 服务。我尝试使用大量无效设备令牌(我没有很多有效令牌)对其进行大规模测试。

问题是大部分代币都没有触发 PushBroker 的事件。一些令牌(非常少)会导致 OnNotificationFailed 方法被触发(当然还有消息“无效令牌”)。

在这种情况下,这可能是 apns 的一种已知行为,PushSharp 的行为不像我预期的那样。在我的逻辑中,我指望这些回应。

进行这样的测试是否合理?

我应该期待这样的行为吗?如果 PushBroker 不触发其事件,这意味着什么?

感谢您的任何建议或评论。

4

1 回答 1

1

虽然我没有查看 PushSharp 代码,但我实现了一个与 APNS 服务器通信的服务器,因此我可以为您提供这种行为的一些可能原因。

当 Apple 的 APNS 服务器遇到无效的设备令牌(或任何其他类型的无效数据,例如过长的有效负载)时,它会向套接字写入错误响应并关闭连接。

现在,如果您尝试发送 10 条通知,并且仅在第 10 条消息之后收到错误响应(OnNotificationFailed在您的情况下是通过),说明第 5 条消息失败,这意味着 Apple 从未处理过消息 6 到 10(因此,如果您OnNotificationFailed希望其中一些触发,这就是它没有发生的原因)。必须重新发送这些消息。我不知道 PushSharp 是否会自动处理此重新发送,或者您是否必须自己处理。

除了这种复杂性之外,在某些情况下(至少在我尝试使用无效令牌时)您(或在您的情况下为 PushSharp)可能无法读取来自 Apple 的错误响应,在这种情况下,您只会注意到发生了错误连接关闭(即尝试发送消息时会失败)。在这种情况下,您必须打开一个新套接字,但您不知道是哪条消息导致了失败以及应该重新发送哪些消息。

我建议您只使用有效的设备令牌,并尽最大努力使您的数据库没有无效令牌,因为处理由此类令牌引起的错误响应和连接关闭可能会很棘手。

于 2014-04-03T16:27:56.963 回答