我们通过 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 没有报告比它更多的错误。
有什么建议或见解吗?