如何判断Azure NotificationHubs中是否已成功传送推送通知?

时间:2017-04-09 01:31:36

标签: azure-notificationhub

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

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

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

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

  

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

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:3)

  

如何判断至少有一个通知是否已成功传递给用户设备?

正如您所提到的,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;

enter image description here

注意:它仅适用于标准定价等级。