PushSharp - 多个无效令牌不调用响应委托

Posted

技术标签:

【中文标题】PushSharp - 多个无效令牌不调用响应委托【英文标题】:PushSharp - multiple invalid tokens don't invoke response delegates 【发布时间】:2014-04-03 12:48:30 【问题描述】:

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

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

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

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

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

感谢您提出的任何建议或意见。

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

谢谢。那么如何使用多个令牌测试我的服务? 我了解我无法真正测试带有无效令牌的服务,但我想测试该服务以发送大量推送通知。如果我为相同的有效 deviceToken 发送 10,000 条通知,我会收到所有请求的响应吗?我尝试使用具有有效注册 ID 的 GCM 执行类似的测试 - 对相同注册 ID 的 10,000 个请求。我没有收到所有请求的回复。如何在没有许多唯一令牌的情况下测试此服务以获取大量令牌? @gilp Apple 在没有错误时不会返回响应,因此如果您使用有效令牌,您将不会收到任何响应。在没有大量有效令牌的情况下测试大量通知的唯一方法是编写一个模拟 APNS 服务器的进程(即接受传入的 TLS 连接,然后根据 APNS 的二进制格式解析传入的数据)。这并不容易做到。另一种选择是测试发送多个通知的整个过程,但实际发送除外。这可能需要更改 PushSharp 源代码。

以上是关于PushSharp - 多个无效令牌不调用响应委托的主要内容,如果未能解决你的问题,请参考以下文章

org.scribe.exceptions.OAuthException:响应正文不正确。无法从中提取令牌和秘密:'无效的请求令牌'

使用 PushSharp 发送消息时我没有收到响应

API 无效的随机 Facebook iOS SDK 身份验证令牌

委托刷新令牌获取新JWT的基本策略

google gcm 没有使用 PushSharp 作为我的服务器发送消息

iOS 设备令牌的 Pushsharp 4.0.10.0 ApnsConfiguration 连接错误