单个通知中心可以处理多种类型的通知吗?

时间:2017-03-12 01:36:34

标签: azure push-notification uwp azure-notificationhub

如何设置推送通知,以便用户可以选择要订阅的通知?例如,使用天气应用程序,用户A想要在龙卷风接近时订阅通知,但用户B并不关心这一点,并且只想在洪水即将来临时通知。所以在应用程序中有一个设置允许用户订阅这些通知中的一个或两个。

现在在我的后端我有一个webjob,它从在线资源收集天气数据并存储在SQL数据库中,我在Azure中创建了一个通知中心,并将代码添加到我的webjob中,就像这个例子一样

https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-windows-store-dotnet-get-started-wns-push-notification#optional-send-notifications-from-a-console-app

 private static async void SendNotificationAsync()
 {
     NotificationHubClient hub = NotificationHubClient
         .CreateClientFromConnectionString("<connection string with full access>", "<hub name>");
     var toast = @"<toast><visual><binding template=""ToastText01""><text id=""1"">Hello from a .NET App!</text></binding></visual></toast>";
     await hub.SendWindowsNativeNotificationAsync(toast);
 }

当我获得指示Flood或Tornado的某些天气数据时,我可以执行此类操作来发送通知

if(flood)
SendNotificationAsync(flood) //only sends notification to User B
else if(tornado)
SendNotificationAsync(tornado) //only send notification to User A

这可以使用单个通知中心来完成吗?或者我是否必须创建多个集线器?

1 个答案:

答案 0 :(得分:2)

Erotavlas,

要实现这一点,您必须查看标签。在您的情况下,您将有两个标记:"Flood""Tornado“。

如果您选中SendNotificationAsync,您会发现可以提供标记

public Task<NotificationOutcome> SendNotificationAsync(Notification notification, IEnumerable<string> tags)

我不知道您是否使用安装或注册模式注册您的设备,但InstallationRegistrationDescription都有一个名为Tags的属性。

注册/更新用户设备时,根据用户想要订阅的内容,您将设置正确的标签。

示例:

龙卷风注册

        var installation = new Installation()
        {
            InstallationId = installationId ,
            Platform = platform ,
            PushChannel = token,
            Tags = new string[] { "Tornado" }
        };

        await notificationHubClient.CreateOrUpdateInstallationAsync(installation);

向龙卷风订阅者发送通知

   await notificationHubClient.SendNotificationAsync(notification, new string[] { "Tornado" });