诊断从Azure Notification Hub到APNS的已删除通知

Ala*_*SFT 6 azure push-notification apple-push-notifications ios azure-notificationhub

我们(通常)通过Azure通知中心成功实现了对iOS和Android设备的推送通知.

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

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

Android设备似乎完美无瑕地收到通知,但iOS设备并不一致.大多数都有效.一对夫妇没有.

我们非常清楚推送通知是尽最大努力提供的,并且不能保证可靠性,但是我们的有限测试显示更多设备始终无法接收推送通知而不是不合理(来自大约12个设备的两次以上故障).

这是设置:

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

var outcome = await hub.SendTemplateNotificationAsync(properties, tag);
Run Code Online (Sandbox Code Playgroud)

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

我们不处于"测试模式"; 该enableTestSend参数NotificationHubClient.CreateClientFromConnectionString设置为False.

故障排除:

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

但是,有几个设备似乎没有收到通知.其中一台设备在重新启动设备后确实收到了通知,但之后停止了.

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

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

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

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

...并且没有报告APNS或Azure的其他错误.我们看到的失败率应该产生超过20的错误数.

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

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

有什么建议或见解吗?

Era*_*ran 5

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

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

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

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