教程:使用通知中心向 Windows Phone 应用发送推送通知

注意

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

本教程演示如何使用 Azure 通知中心将推送通知发送到 Windows Phone 8 或 Windows Phone 8.1 Silverlight 应用程序。 如果要以 Windows Phone 8.1(非 Silverlight)为目标,请参阅本教程的 Windows Universal 版本。

本教程将创建一个空白 Windows Phone 8 应用,该应用使用 Azure 推送通知服务 (MPNS) 接收推送通知。 创建应用后,请使用通知中心将推送通知广播到运行应用的所有设备。

注意

通知中心 Windows Phone SDK 不支持将 Windows 推送通知服务 (WNS) 与 Windows Phone 8.1 Silverlight 应用配合使用。 要将 WNS(而不是 MPNS)与 Windows Phone 8.1 Silverlight 应用配合使用,请遵循使用 REST API 的 通知中心 - Windows Phone Silverlight 教程

在本教程中,你将了解如何执行以下操作:

  • 创建通知中心
  • 创建 Windows Phone 应用程序
  • 测试性发送通知

先决条件

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

创建通知中心

  1. 登录 Azure 门户

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

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

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

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

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

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

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

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

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

    5. 选择创建

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

配置 Windows Phone (MPNS) 设置

  1. 在“通知设置”下选择“Windows Phone (MPNS)”。

  2. 选择“启用身份验证推送” 。

  3. 在工具栏上选择“保存”。

    Azure 门户 - 启用未经身份验证的推送通知

    中心现已创建,并已配置为向 Windows Phone 发送未经身份验证的通知。

    注意

    本教程使用未经身份验证模式下的 MPNS。 MPNS 未经身份验证的模式对可以发送到每个通道的通知有一些限制。 通知中心支持 MPNS 身份验证模式,它允许上传证书。

创建 Windows Phone 应用程序

在此部分,请创建一个可以自行注册到通知中心的 Windows Phone 应用程序。

  1. 在 Visual Studio 中创建一个新的 Windows Phone 8 应用程序。

    Visual Studio - 新建项目 - Windows Phone 应用

    在 Visual Studio 2013 Update 2 或更高版本中,必须改为创建 Windows Phone Silverlight 应用程序。

    Visual Studio - 新建项目 - 空白应用 - Windows Phone Silverlight

  2. 在 Visual Studio 中,右键单击该解决方案,并单击“管理 NuGet 包”。

  3. 搜索 WindowsAzure.Messaging.Managed,单击“安装”,并接受使用条款。

    Visual Studio - NuGet 包管理器

  4. 打开文件 App.xaml.cs 并添加以下 using 语句:

    using Microsoft.Phone.Notification;
    using Microsoft.WindowsAzure.Messaging;
    
  5. App.xaml.cs 中的 Application_Launching 方法顶部添加以下代码:

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
    
        var channel = HttpNotificationChannel.Find("MyPushChannel");
        if (channel == null)
        {
            channel = new HttpNotificationChannel("MyPushChannel");
            channel.Open();
            channel.BindToShellToast();
        }
    
        channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(async (o, args) =>
        {
            var hub = new NotificationHub("<hub name>", "<connection string>");
            var result = await hub.RegisterNativeAsync(args.ChannelUri.ToString());
    
            System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                MessageBox.Show("Registration :" + result.RegistrationId, "Registered", MessageBoxButton.OK);
            });
        });
    }
    

    注意

    MyPushChannel 是用于查找 HttpNotificationChannel 集合中现有通道的索引。 如果不存在,则使用该名称创建新条目。

    插入中心名称以及在前一部分记下的名为 DefaultListenSharedAccessSignature 的连接字符串。 此代码从 MPNS 检索应用的通道 URI,然后将该通道 URI 注册到通知中心。 它还保证每次启动应用程序时都在通知中心注册通道 URI。

    注意

    本教程会一个 toast 通知发送到设备。 发送磁贴通知时,必须在通道上调用 BindToShellTile 方法。 若要同时支持 toast 通知和磁贴通知,请同时调用 BindToShellTileBindToShellToast

  6. 在解决方案资源管理器中,展开“属性”,打开 WMAppManifest.xml 文件,单击“功能”选项卡并确保选中 ID_CAP_PUSH_NOTIFICATION 功能。 应用现在可以接收推送通知了。

    Visual Studio - Windows Phone 应用功能

  7. F5 键以运行应用。 随后应用中会显示注册消息。

  8. 关闭应用或切换到主页。

    注意

    若要接收 toast 推送通知,则应用程序不得在前台运行。

测试性发送通知

  1. 在 Azure 门户中切换到“概览”选项卡。

  2. 选择“测试性发送”。

    “测试性发送”按钮

  3. 在“测试性发送”窗口中执行以下步骤:

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

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

    3. 选择“发送”

    4. 请在窗口底部的列表中查看结果

      “测试性发送”窗口

  4. 在 Windows Phone 模拟器或 Windows Phone 中,确认看到通知消息。

    Windows Phone 中的通知

后续步骤

在这个简单的示例中,已将推送通知广播到所有 Windows Phone 8 设备。 若要了解如何向特定的设备推送通知,请转到以下教程: