【问题标题】:How can I tell if a push notification was successfully delivered in Azure NotificationHubs?如何判断推送通知是否已在 Azure NotificationHubs 中成功传递?
【发布时间】:2017-04-10 15:21:25
【问题描述】:

我有一个带有简单信使组件的应用程序。当 user1 向 user2 发送消息时,我正在使用 Azure 通知中心向 user2 发送推送通知。由于我使用通知中心为用户的设备注册推送通知,我不知道他们注册了哪个手机操作系统,所以只需为我支持的每种类型的通知排队:

NotificationOutcome outcome1 = await hub.SendAppleNativeNotificationAsync(jsoniOSPayload, tags);
NotificationOutcome outcome2 = await hub.SendGcmNativeNotificationAsync(jsonAndroidPayload, tags);
...(etc.)

但是,我们需要处理应用被删除的情况。发生这种情况时,如果无法将推送通知发送到用户的任何设备,我们需要向用户发送电子邮件。

我的问题是:我如何判断是否至少一条通知已成功发送到用户设备?我知道 NotificationHubClient.EnableTestSend 属性,它确实会导致 NotificationOutcome 对象具有成功计数。这将完美运行,但documentation 表明这在生产中不是最佳的:

"启用测试发送后,会发生以下情况:所有通知 每次发送呼叫最多只能到达 10 台设备。Send* 方法 返回所有这些通知传递的结果列表。 可能的结果与遥测中显示的结果相同。结果 包括身份验证错误、限制错误、 成功交付,等等。此模式仅用于测试目的, 不用于生产,并且受到限制。”

任何建议将不胜感激!

【问题讨论】:

    标签: azure-notificationhub


    【解决方案1】:

    如何判断是否至少有一个通知已成功发送到用户设备?

    正如您提到的,NotificationHubClient.EnableTestSend 用于调试,并且仅限于 10 个设备。 如果要获取成功送达的数量,可以使用NotificationHubClient.GetNotificationOutcomeDetailsAsync(string notificationId)函数,详细请参考document

    演示代码:

    NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("Endpoint=sb://notificationnamespace.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=xxxxxxx", "NotificationHub Name");
    string message = "{\"title\":\"((Notification title))\",\"description\":\"Hello from Azure\"}";
               var result = await hub.SendGcmNativeNotificationAsync(message); //GCM for example.
               var notificationDetails = await hub.GetNotificationOutcomeDetailsAsync(result.NotificationId);
               return notificationDetails;
    

    注意:仅适用于标准定价层。

    【讨论】:

    • 我认为不使用标准定价撕裂是我的问题。我试图在某处找到通知 ID,但对于较低层,该值似乎不在响应中。感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多