7

我们通过 Azure 通知中心(大部分)成功实现了向 iOS 和 Android 设备推送通知。

问题是某些 iOS 设备显然从未收到 Azure 通知中心发送的通知。

我们使用模板和标签将消息定向到适当的设备。标签是感兴趣的主题,而不是特定于用户的,因此我们希望将一个标签通知推送到订阅该标签的所有设备。

Android 设备似乎可以完美接收通知,但 iOS 设备并不一致。他们中的大多数人工作。一对夫妇没有。

我们很清楚推送通知是尽最大努力交付的,并且无法保证可靠性,但我们有限的测试表明,更多的设备始终无法接收推送通知,而不是看起来不合理(大约十几个设备的两次以上失败)。

这是设置:

我们在后端有一个简单的 C# 例程,它连接到 Azure 通知中心并向 Azure 发送通知:

var outcome = await hub.SendTemplateNotificationAsync(properties, tag);

我们已使用该GetAllRegistrationsAsync方法确保我们检查的每个设备都已成功注册并使用正确的模板。每个设备都已注册,所有模板都是正确的。

我们不在“测试模式”;的enableTestSend参数NotificationHubClient.CreateClientFromConnectionString设置为 False。

故障排除:

当我们发送通知时,大多数设备都会收到通知,并且在我们正在测试的特定情况下,使用正确的数字更新徽章计数器。

但是,一些设备似乎没有收到通知。在我们重新启动设备后,其中一台设备确实收到了通知,但之后它就停止了。

使用上述GetAllRegistrationsAsync方法,我们已验证问题设备已在 Azure 上正确注册,并且具有正确的标签和模板。

我们能够从 Azure 注册中确定问题设备的设备令牌。我们使用了一个直接与 APNS 通信的 PHP 脚本,使用它们的设备令牌向问题设备发送通知。每次,设备都会收到此直发通知。只有来自 Azure 的通知是不可靠的。

当我们检查 Azure Notification Hub Monitor 页面时,我们会看到过去 24 小时的这些指标:

  • 967 APNS成功通知
  • 3 APNS 坏频道错误
  • 2 APNS 过期信道错误
  • 4 APNS 错误

...并且没有针对 APNS 或一般 Azure 报告的其他错误。我们看到的故障率应该会产生超过 20 个错误计数。

我们无法确定哪些设备令牌对错误负责;有没有办法从 Azure 获取这些信息?

我们无法解释为什么我们可以通过 APNS 本身而不是通过 Azure 直接向这些设备发送通知,以及为什么 Azure 没有报告比它更多的错误。

有什么建议或见解吗?

4

1 回答 1

7

您的数据库中很可能有一些沙盒设备令牌(我不确定设备令牌是存储在您的服务器中还是存储在 Azure 通知中心)。尝试向生产推送环境发送带有沙盒设备令牌的通知时,Apple 返回 InvalidToken 错误,并关闭连接。

很多时候,当向 Apple 的 APN 服务器发送推送通知的服务器收到错误响应时,它已经发送了更多通知(可能带有有效的令牌),所有这些都被 Apple 丢弃了。此时,Apple 仅在与 APNS 建立新连接后才会接受新通知,因此在无效令牌之后发送到旧连接的消息需要重新发送。Azure 可能无法正确处理此重新发送。

正如您所说,Azure 通知中心监视器页面显示了一些错误。我怀疑这3 APNS Bad Channel Errors意味着无效的设备令牌。我不知道您在数据库中实际拥有多少无效设备令牌,但即使是一个也可能导致许多带有有效令牌的通知不被 Apple 接受。

最好的解决方案是测试数据库中的所有设备令牌,找出无效的设备令牌并删除它们。

于 2014-07-03T01:12:56.660 回答