教程:使用 Azure 通知中心向通用 Windows 平台应用发送通知

本教程介绍如何创建通知中心,以便将推送通知发送到通用 Windows 平台 (UWP) 应用。 创建一个空白 Windows 应用商店应用,以便使用 Windows 推送通知服务 (WNS) 接收推送通知。 然后即可使用通知中心将推送通知广播到运行应用的所有设备。

注意

可以在 GitHub 上找到本教程的已完成代码。

执行以下步骤:

  • 在 Windows 应用商店中创建应用
  • 创建通知中心
  • 创建示例 Windows 应用
  • 发送测试通知

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,请在开始前创建试用版订阅
  • Microsoft Visual Studio 2017 或更高版本。 本教程中的示例使用 Visual Studio 2019
  • 已安装 UWP 应用开发工具
  • 有效的 Windows 应用商店帐户
  • 确认已启用“从应用和其他发送方获取通知” 设置。
    • 在计算机上启动“设置” 窗口。
    • 选择“系统” 磁贴。
    • 从左侧菜单中选择“通知和操作”
    • 确认已启用“从应用和其他发送方获取通知” 设置。 如果未启用,请启用它。

完成本教程是学习有关 UWP 应用的所有其他通知中心教程的先决条件。

在 Windows 应用商店中创建应用

注意

Azure 推送通知服务 (MPNS) 已弃用,不再受支持。

要将推送通知发送到 UWP 应用,请将应用关联到 Windows 应用商店。 然后将通知中心配置为与 WNS 集成。

  1. 导航到 Windows 开发人员中心,使用 Azure 帐户登录,然后选择“新建应用”。

    “新建应用”按钮

  2. 键入应用的名称,然后选择“保留产品名称”。 这将为应用创建一个新的 Windows 应用商店注册。

    存储应用名称

  3. 展开“产品管理”,然后选择“产品标识”。 记下 Package SID、Package/Identity/Name、Package/Identity/Publisher 和 Package/Properties/PublisherDisplayName 等值。

    合作伙伴中心应用

  4. 在“产品管理”下,选择“WNS/MPNS”,然后选择“应用注册门户”。 登录 Azure 帐户。 应用程序注册页会在新选项卡中打开。

    WNS 页

  5. 在“概要”下,选择“客户端凭据:添加证书或机密”。

    Azure 门户上的通知中心设置

  6. 在“证书和机密”页的“客户端机密”下,选择“+ 新建客户端机密”。 在创建客户端机密(也称为应用程序机密)后,请在离开该页面之前记下该机密。

    警告

    你只能在客户端机密(应用程序机密)值刚创建好时看到它们。 请确保在离开该页面之前保存该机密。

    门户上的客户端密码

    警告

    应用程序机密和程序包 SID 是重要的安全凭据。 请勿将这些值告知任何人或随应用程序分发它们。

创建通知中心

  1. 登录 Azure 门户

  2. 在左侧菜单上选择“所有服务” ,然后在“移动”部分中选择“通知中心”。 选择服务名称旁边的星形图标,以便将服务添加到左侧菜单上的“收藏夹”部分。 在将“通知中心” 添加到“收藏夹” 之后,在左侧菜单上选择它。

    Azure 门户 - 选择“通知中心”

  3. 在“通知中心”页面上,在工具栏上选择“创建”。

    通知中心 -“添加”工具栏按钮

  4. 在“通知中心”页面上的“基本信息”选项卡中,执行以下步骤:

    1. 在“订阅”中,选择要使用的 Azure 订阅的名称,然后选择现有资源组或创建新资源组。

    2. 在“命名空间详细信息”中为新命名空间输入唯一名称。

    3. 命名空间包含一个或多个通知中心,因此请在“通知中心详细信息”中键入中心的名称。 或从下拉列表中选择一个现有的命名空间。

    4. 从“位置”下拉列表框中选择值。 此值指定要在其中创建通知中心的位置。

    5. 选择“创建” 。

      Azure 门户 - 设置通知中心属性

  5. 选择“通知”(钟形图标),然后选择“转到资源” 。 还可以刷新“通知中心” 页上的列表,然后选择通知中心。

    Azure 门户 - 转到资源

  6. 从列表中选择“访问策略” 。 记下向你提供的两个连接字符串。 稍后在处理推送通知时需要它们。

    重要

    请勿 在应用程序中使用 DefaultFullSharedAccessSignature 策略。 这只能在后端使用。

    Azure 门户 - 通知中心连接字符串

配置中心的 WNS 设置

  1. 在“通知设置”类别中选择“Windows (WNS)”。

  2. 输入你在前一部分记下的“包 SID”(如“ms-app://<Your Package SID>”)和“安全密钥”(应用程序机密)的值。

  3. 单击工具栏上的“保存”。

    “包 SID”框和“安全密钥”框

通知中心现在已配置为使用 WNS。 你有了用于注册应用和发送通知的连接字符串。

创建示例 Windows 应用

  1. 在 Visual Studio 中打开“文件” 菜单,选择“新建” ,然后选择“项目” 。

  2. 在“创建新项目”对话框中完成以下步骤:

    1. 在顶部的搜索框中,键入“Windows 通用”。

    2. 在搜索结果中选择“空白应用(通用 Windows)”,然后选择“下一步”。

      “新建项目”对话框

    3. 在“配置新项目”对话框中输入项目名称,并指定项目文件的位置

    4. 选择“创建” 。

  3. 接受目标最低平台版本的默认值,然后选择“确定”。

  4. 在“解决方案资源管理器”中,右键单击 Windows Store 应用项目,选择“发布”,然后选择“将应用与 Store 相关联”。 此时会显示“将应用与 Windows 应用商店关联”向导。

  5. 在向导中,使用 Azure 帐户登录。

  6. 选择在第 2 步中注册的应用,选择“下一步”,然后选择“关联” 。 这会将所需的 Windows 应用商店注册信息添加到应用程序清单中。

  7. 在 Visual Studio 中,右键单击该解决方案,并选择“管理 NuGet 包”。 此时会打开“管理 NuGet 包” 窗口。

  8. 在搜索框中,输入 WindowsAzure.Messaging.Managed,选择“安装” ,并接受使用条款。

    “管理 NuGet 包”窗口

    此操作使用 Microsoft.Azure.NotificationHubs NuGet 包下载、安装并添加对 Azure 通知中心库的引用。

  9. 打开 App.xaml.cs 项目文件并添加以下语句:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.UI.Popups;
    
  10. 在项目的 App.xaml.cs 文件中,找到 App 类并添加以下 InitNotificationsAsync 方法定义。 将 <your hub name> 替换为在 Azure 门户中创建的通知中心的名称,将 <Your DefaultListenSharedAccessSignature connection string> 替换为通知中心的“访问策略”页中提供的 DefaultListenSharedAccessSignature 连接字符串:

    private async void InitNotificationsAsync()
    {
        var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
        var hub = new NotificationHub("<your hub name>", "<Your DefaultListenSharedAccessSignature connection string>");
        var result = await hub.RegisterNativeAsync(channel.Uri);
    
        // Displays the registration ID so you know it was successful
        if (result.RegistrationId != null)
        {
            var dialog = new MessageDialog("Registration successful: " + result.RegistrationId);
            dialog.Commands.Add(new UICommand("OK"));
            await dialog.ShowAsync();
        }
    }
    

    此代码从 WNS 检索应用的通道 URI,并将该通道 URI 注册到通知中心。

    注意

    hub name 占位符替换为出现在 Azure 门户中的通知中心的名称。 另外,使用在之前部分中从通知中心的“访问策略”页获取的 DefaultListenSharedAccessSignature 连接字符串替换连接字符串占位符 。

  11. App.xaml.csOnLaunched 事件处理程序的上方,添加对新 InitNotificationsAsync 方法的以下调用:

    InitNotificationsAsync();
    

    此操作保证每次启动应用程序时都在通知中心注册通道 URI。

  12. 右键单击 Package.appxmanifest,然后选择“查看代码(F7)”。 找到 <Identity .../>,并将“Name”值替换为“Package/Identity/Name”,再将其“Publisher”值替换为你在前面创建的应用中的“Package/Identity/Publisher”值。

  13. 若要运行应用,请按键盘的 F5 键。 此时会显示包含注册密钥的对话框。 若要关闭对话框,请单击“确定”。

    注册成功

应用现在已能够接收 toast 通知。

发送测试通知

可以通过在 Azure 门户中发送通知来快速测试在应用中接收通知。

  1. 在 Azure 门户中切换到“概览”选项卡,然后在工具栏上选择“测试性发送”。

    “测试性发送”按钮

  2. 在“测试性发送”窗口中执行以下操作:

    1. 对于“平台”,请选择“Windows” 。

    2. 对于“通知类型”,请选择“Toast”。

    3. 选择Send

      “测试发送”窗格

  3. 请在窗口底部的“结果”列表中查看“发送”操作的结果。 此外还会看到一条警报消息。

    “发送”操作的结果

  4. 会看到通知消息:桌面上的测试消息

    通知消息

后续步骤

使用门户或控制台应用将广播通知发送到所有 Windows 设备。 若要了解如何向特定的设备推送通知,请转到以下教程: