Intermittent NotificationHub delivery failures with a NotificationSystemError: "InvalidToken"

Intermittent NotificationHub delivery failures with a NotificationSystemError: "InvalidToken"

我 运行 遇到了 NotificationHubs 的问题,有时通知会静默地无法传送到 iOS 客户端。

我的通知中心设置为使用 APNS 令牌身份验证(与旧证书身份验证相反)。

我将我的通知中心定价层更新为标准,以便我可以获得更多相关信息。大多数情况下(超过 95%)通知会正确通过。我添加了日志记录以跟踪在通知中心排队的每个推送通知的 NotificationId。然后,当我收到失败警报时,我通过以下方法查看了该特定通知的详细信息:

var details = await notificationHub.GetNotificationOutcomeDetailsAsync("<notification id>");

检查细节时我注意到当状态为 "Completed"(意味着 NotificationHubs 已收到并处理操作)时,PnsErrorDetailsUri 具有非空值,表明传递通知时出现问题:

在浏览器中导航到 PnsErrorDetailsUri 的值导致下载以下文件:

在这里,我注意到 NotificationSystemError 说有一个 "InvalidToken"。这个令牌似乎应该与 Azure 和 APNS 之间的某些 "under the covers" 通信有关。 这绝对不是因为在 NotificationHubs 中注册的设备令牌无效。 我确认 registrationId 仍在通知中心,并且它指向正确的设备。此外,从详细信息中抓取原始 NotificationBody 并使用相同的标签重新提交它会导致新通知成功传递。

有谁知道 InvalidToken 指的是什么,或者这些间歇性 NotificationHub 传送失败的原因是什么?

更新:

我发现提到了不同的 NotificationSystemErrors here,其中之一是我的 InvalidToken 错误。但是,我找不到这些错误的实际原因的描述。

我从来没有真正得到错误发生原因的明确答案,但我似乎已经能够解决我的问题。

我们有 2 个单独的通知 namespace/hub,一个用于 apple 生产通知,一个用于 apple 沙盒通知。我们有一个开关,以便设备向正确的集线器注册。我调查了我们所有的注册,它们看起来都在正确的位置。

但是,在这次检查中,我发现很多设备都有大量的注册。这些注册中的每一个都有相同的苹果 PNS 标识符(这是一个有效的令牌),但我觉得奇怪的是,有几十个(在一个案例中是数百个)注册了相同的 PNS 令牌。 Each RegistrationID was the same, except it has a hyphenated incremented number after it (for instance, 1231231231235396312-6910179870480973035-1, 1231231231235396312-6910179870480973035-2, 1231231231235396312-6910179870480973035-3, etc.).看起来每次我调用 NotificationHubClient.CreateAppleNativeRegistrationAsync 时,它都在添加一个新条目而没有重复数据删除。清除这些重复项似乎解决了我遇到的问题。似乎 NotificationHubs 有时会因为链接到设备的注册过多而感到困惑。

我最后添加了一些代码来尝试暂时过滤掉重复项。但是,我希望 NotificationHubs 应该为我处理这个...