你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

注意

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

执行以下步骤:

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

先决条件

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

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

在 Windows 应用商店中创建应用

注意

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

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

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

    New app button

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

    Store app name

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

    Partner center apps

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

    WNS page

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

    Notification Hub settings on Azure portal

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

    警告

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

    Client secret on portal

    警告

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

创建通知中心

  1. 登录 Azure 门户

  2. 在左侧菜单中,选择“所有服务” 。 A screenshot showing select All Services for an existing namespace.

  3. 在“筛选器服务”文本框中键入“通知中心”。 选择服务名称旁边的星形图标,以便将服务添加到左侧菜单上的“收藏夹”部分。 选择“通知中心”。

    A screenshot showing how to filter for notification hubs.

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

    A screenshot showing how to create a new notification hub.

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

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

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

    3. 命名空间包含一个或多个通知中心,因此请在“通知中心详细信息”中键入中心的名称。

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

      Screenshot showing notification hub details.

    5. 查看“可用性区域”选项。 如果选择了具有可用性区域的区域,则默认会选中该复选框。 可用性区域是一项付费功能,因此会向你的层级添加额外费用。

    6. 选择“灾难恢复”选项:“”、“配对恢复区域”或“灵活恢复区域”。 如果选择“配对恢复区域”,则会显示故障转移区域。 如果选择“灵活恢复区域”,请使用下拉列表从恢复区域列表中选择。

      Screenshot showing availability zone details.

    7. 选择创建

  6. 部署完成后,选择“转到资源”。

配置中心的 WNS 设置

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

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

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

    The Package SID and Security Key boxes

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

创建示例 Windows 应用

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

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

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

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

      New Project dialog

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

    4. 选择“创建” 。

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

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

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

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

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

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

    The Manage NuGet Packages window

    此操作使用 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 键。 此时会显示包含注册密钥的对话框。 若要关闭对话框,请单击“确定”。

    Registration successful

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

发送测试通知

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

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

    Test Send button

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

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

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

    3. 选择“发送”。

      The Test Send pane

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

    Result of Send operation

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

    Notification message

后续步骤

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