我遇到了NotificationHubs的问题,偶尔会无法将通知无法传递给iOS客户端。
我的通知中心设置为使用APNS的令牌身份验证(而不是旧版证书身份验证)。
我将通知中心定价层更新为标准,以便我可以获得更多有关它的信息。大多数时间(超过95%)通知正确通过。我添加了日志记录来跟踪与Notification Hub排队的每个推送通知的NotificationId。然后,当我收到故障警报时,我通过以下方法查找了该特定通知的详细信息:
var details = await notificationHub.GetNotificationOutcomeDetailsAsync("<notification id>");
检查细节我注意到,当状态为“已完成”(意味着NotificationHubs已收到并处理了操作)时,PnsErrorDetailsUri具有非空值,表示发送通知时出现问题:
在浏览器中导航到PnsErrorDetailsUri的值会导致下载以下文件:
在这里,我注意到NotificationSystemError说有一个“InvalidToken”。这个令牌似乎应该与Azure和APNS之间的一些“幕后”通信有关。 绝对不是因为NotificationHubs中注册的设备令牌无效。我确认registrationId仍在通知集线器中,并且它指向正确的设备。此外,从详细信息中抓取原始NotificationBody并使用相同标记重新提交它会导致新通知成功传递。
有谁知道InvalidToken可能指的是什么,或者这些间歇性NotificationHub传递失败的原因是什么?
更新
我发现提到了不同的NotificationSystemErrors here,其中一个是我的InvalidToken错误。但是,我无法找到这些错误的实际原因的描述。
答案 0 :(得分:0)
我从来没有真正得到确切的答案,为什么错误发生了,但我似乎能够解决我的问题。
我们有2个单独的通知命名空间/集线器,一个用于苹果生产通知,另一个用于苹果沙盒通知。我们有一个开关,所以设备注册正确的集线器。我调查了所有的注册,他们看起来都在正确的位置。
然而,在此次检查中,我注意到许多设备都有大量注册。这些注册中的每一个都具有SAME apple PNS标识符(这是一个有效的令牌),但对我来说似乎很奇怪,有几十个(在一个案例中有数百个)注册了相同的PNS令牌。每个RegistrationID都是相同的,除了它后面有一个带连字符的递增数字(例如,1231231231235396312-6910179870480973035-1,1231231231235396312-6910179870480973035-2,1231231231235396312-6910179870480973035-3等)。看起来每次我调用NotificationHubClient.CreateAppleNativeRegistrationAsync时,它都会添加一个没有重复数据删除的新条目。清除这些重复的项目似乎已经解决了我遇到的问题。似乎NotificationHubs有时会因为太多注册链接到设备而感到困惑。
我最后在我的最后添加了一些代码,试图暂时过滤掉重复的内容。但是,我希望NotificationHubs应该为我处理这个......