Azure NotificationHub - 检测失败的通知

Posted

技术标签:

【中文标题】Azure NotificationHub - 检测失败的通知【英文标题】:Azure NotificationHub - Detect failed notifications 【发布时间】:2016-04-30 16:39:34 【问题描述】:

我正在尝试将失败的通知存储在 db 中,例如客户端无法访问 Internet。这将使我能够从 backgroundService 检查是否缺少通知,然后从 backgroundService 创建它。

因此,我的Azure App Service Mobile 上有以下内容:

var notStat = await hub.SendWindowsNativeNotificationAsync(wnsToast, tag);
telemetry.TrackTrace("failure : " + notStat.Failure + " | Results : " + notStat.Results + " | State : " + notStat.State + " | Success : " + notStat.Success + " | trackingID : " + notStat.TrackingId + ");

代码 sn-p 是为了测试来自客户端的影响,但无论我做什么,生成的日志都只是消息是enqueued

问题

那么如何检测失败的通知呢?

结论

总结对已接受答案的讨论:

发送通知后,NotificationId 和其他相关数据将存储在单独的表中。

收到通知的客户端上的事件随后将向服务器发送一条消息,说明已收到通知。然后从表中删除该条目。

客户端未收到的通知将通过background task 找到。这将是每次background task 触发时,例如每 6 小时,background task 将检索所有丢失的通知。这使background task 能够创建相关通知,并且用户不会错过任何通知。

【问题讨论】:

【参考方案1】:

enqueued 的返回是预期的 - 请参阅troubleshooting guidance。有关发生的事情的更多见解,请尝试设置 EnableTestSend -

“result.State 将在执行结束时简单地声明 Enqueued,而无需了解您的推送发生了什么。现在您可以使用 EnableTestSend 布尔值” (c) documentation

但请注意,启用 EnableTestSend 时,存在一些限制(在同一页面上进行了描述,因此不会在此处复制粘贴,以避免将来出现过时信息的问题)。

您也可以使用每消息遥测功能或 REST API - Fiddler+some documentation。

并且,作为后续问题,我看到一些关于 SO 的讨论可能对您有所帮助:first 和 second。

最后,我强烈建议(如果您还没有)查看FAQ - 了解不同平台如何处理通知非常重要,以避免在您尝试调试通过设计完成的某些事情(例如,可能,如果设备处于离线状态,并且有通知,则只会传递最后一个,等等)。

【讨论】:

嘿,我可以发送通知,而且它们确实有一个 ID。所以我的问题更多的是你可以有一个事件,然后在服务器上没有收到通知时触发,以便可以存储它。我将研究您提到的其中一个问题中引用的其余 api。我只是认为这是每个人都想拥有的东西:) 基于遥测,似乎我需要一个经常调用 uri https://namespace.servicebus.windows.net/NotificationHub/messages/notification 的服务器message id?api-version=2015-04 以及相关信息。听起来很昂贵,或者我应该将 tur 通知 id 存储在一个表中,然后从后台服务中调用它并删除收到的消息。但我看不到遥测保留了多长时间。你知道吗?还有其他更明显的方法吗? 呃,这是一个棘手的问题。我相信在后端实施这样的事件将是昂贵的。无论如何,正如我所说,我没有看到很多人实施每条消息故障排除,与平台如何处理消息、它们在停止之前保存多长时间等有关的细微差别太多。但是,我确实看到了那些如果他们看到任何错误,则执行重试逻辑,流行的是后退逻辑 - blogs.windows.com/buildingapps/2013/10/22/…。但对于“断开连接”的错误,不建议这样做。 不建议通知中心的每个产品组 - WNS 将在每​​个通道缓存最多 5 个 toast 和磁贴,或在设备离线时缓存 1 个原始通知。在 toasts 上重试断开设备的通知可能只会导致重复的通知。仅当您从服务中收到 500 或 503 错误或 406 错误(意味着您的通知被限制)时才需要重试 (c)。 所以,基本上 - 我建议不要尝试实现每个消息的逻辑,我认为这既昂贵又耗时,而是实现更敏捷(从我的角度来看,当然)方法并实现重试逻辑。

以上是关于Azure NotificationHub - 检测失败的通知的主要内容,如果未能解决你的问题,请参考以下文章

适用于桌面应用程序的 Azure NotificationHub(控制台应用程序)

无法将 Azure NotificationHub 推送消息从 .NET 控制台应用程序传送到(Android)设备

Azure Notificationhub - PN 发送在沙盒中工作但不在生产中

NotificationHub 在注册标签 UWP 中发送通知

NotificationHub Push Notification 返回:从 Token Provider 获取的 Token 错误

PHP 中的 Azure 通知给单个用户