Ios 诊断从Azure通知中心到APN的丢弃通知

Ios 诊断从Azure通知中心到APN的丢弃通知,ios,azure,push-notification,apple-push-notifications,azure-notificationhub,Ios,Azure,Push Notification,Apple Push Notifications,Azure Notificationhub,我们(大部分)成功地通过Azure通知中心向iOS和Android设备推送通知 问题在于,某些iOS设备显然从未收到Azure通知中心发送的通知 我们使用模板和标记将消息定向到适当的设备。标记是感兴趣的主题,从来不是特定于用户的,因此我们希望一个标记的通知被推送到订阅该标记的所有设备上 Android设备似乎能够完美地接收通知,但iOS设备并不一致。他们中的大多数人都在工作。一对夫妇没有 我们清楚地知道,推送通知是尽最大努力提供的,并且不能保证可靠性,但我们有限的测试表明,始终无法接收推送通知的

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

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

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

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

我们清楚地知道,推送通知是尽最大努力提供的,并且不能保证可靠性,但我们有限的测试表明,始终无法接收推送通知的设备比看起来不合理的设备更多(大约有十几台设备出现两次以上故障)

以下是设置:

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

var outcome = await hub.SendTemplateNotificationAsync(properties, tag);
我们使用了
getAllRegistrationAsync
方法来确保我们正在检查的每个设备都已成功注册并且使用了正确的模板。每个设备都已注册,所有模板都正确

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

故障排除:

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

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

使用上面提到的
getAllRegistrationAsync
方法,我们已经验证了问题设备是否在Azure上正确注册,并且具有正确的标记和模板

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

当我们检查Azure通知中心监视器页面时,我们会看到过去24小时内的这些指标:

  • 967 APNS成功通知
  • 3 APNS坏通道错误
  • 2个APNS过期通道错误
  • 4 APNS错误
。。。对于APN或Azure,一般没有报告其他错误。我们看到的故障率应该产生超过20的错误计数

我们无法确定哪些设备令牌导致了错误;有没有办法从Azure获取此信息

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


有什么建议或见解吗?

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

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

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


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

这似乎是一个相当合理的解释,但您的解释是否意味着我们不能使用与Azure使用的完全相同的设备令牌通过APN发送直接消息?或者苹果可能会有选择地拒绝基于发送者IP(或类似的东西)的传入消息?或者,您知道如何将这些无效的设备令牌从Azure中取出吗?(我们没有进行注册;设备直接与Azure通信。)@AlanMcBee您尝试直接发送的设备令牌可能是有效的,否则它们将无法工作。问题可能是由您不知道的其他设备令牌引起的。我不知道如何从Azure中删除无效令牌。我从未与Azure合作过。在测试开发构建(使用沙盒推送环境)时,您是否向Azure注册了设备?这些是最有可能出现问题的设备令牌。我们可能应该取消注册我们在测试时创建的所有生产前注册,这样就不会有任何问题。但是,所有有问题的设备在安装了生产应用程序并获得生产证书后,都已成功地向Azure注册了令牌。我期望单个无效设备令牌最终从注册中删除。事实上,我们已经向Microsoft开放了一个支持票证,以帮助跟踪单个设备错误。我会