【问题标题】:Azure NotificationHub - Detect failed notificationsAzure NotificationHub - 检测失败的通知
【发布时间】: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 能够创建相关通知,并且用户不会错过任何通知。

【问题讨论】:

    标签: azure push-notification azure-notificationhub azure-mobile-services wns


    【解决方案1】:

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

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

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

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

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

    最后,我强烈建议(如果您还没有)查看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)。
    • 所以,基本上 - 我建议不要尝试实现每个消息的逻辑,我认为这既昂贵又耗时,而是实现更敏捷(从我的角度来看,当然)方法并实现重试逻辑。
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 2017-07-04
    • 1970-01-01
    • 2019-03-05
    • 2019-12-22
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多