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

  • 安卓
  • 百度
  • iOS
  • Kindle
  • Windows Phone Silverlight 8.x
  • Universal Windows Platform

本教程介绍如何创建通知中心,以便将推送通知发送到通用 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帐户登录,然后选择“ 创建新应用”。

    “新建应用”按钮

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

    应用商店应用名称

  3. 展开“产品管理”,然后选择“产品标识”。 请记下Package SIDPackage/Identity/NamePackage/Identity/PublisherPackage/Properties/PublisherDisplayName值。

    Partner center apps合作伙伴中心应用

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

    WNS 页

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

    Azure 门户上的通知中心设置Azure 门户上的通知中心设置

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

    警告

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

    Client secret on portal门户上的客户端密钥

    警告

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

创建通知中心

  1. 登录到 Azure 门户

  2. 在左侧菜单中,选择“所有服务” 。 显示为现有命名空间选择“所有服务”的屏幕截图。

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

    显示如何筛选通知中心的屏幕截图。

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

    显示如何创建新通知中心的屏幕截图。

  5. 基础选项卡上的通知中心页面中,执行以下步骤:

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

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

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

    4. 位置下拉列表框中选择值。 此值指定要在其中创建集线器的位置。

      显示通知中心详细信息的屏幕截图。

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

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

      显示可用性区域详细信息的屏幕截图。

    7. 选择 创建

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

配置中心的 WNS 设置

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

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

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

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

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

创建示例 Windows 应用

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

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

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

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

      “新建项目”对话框

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

    • 选择 创建

  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“管理 NuGet 包”窗口

    此操作使用 Microsoft.Azure.NotificationHubs NuGet 包 来下载、安装并添加对适用于 Windows 的 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> 替换为通知中心“Access Policies”页中的 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. OnLaunchedApp.xaml.cs 事件处理程序的上方,添加对新 InitNotificationsAsync 方法的以下调用:

    InitNotificationsAsync();
    

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

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

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

    注册成功

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

发送测试通知

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

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

    “测试发送”按钮

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

    • 对于“平台”,请选择“Windows”

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

    • 选择发送

      “测试发送”窗格

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

    发送操作的结果

  4. 你会在桌面上看到通知消息:[测试消息]。

    通知消息

后续步骤

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