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

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

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

Note

通知中心 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. 选择“创建资源” > “移动” > “通知中心”。

    Azure 门户 - 创建通知中心

  3. 在“通知中心”框中,键入一个唯一名称。 选择“区域”、“订阅”和“资源组”(如果已经有一个)。

    如果尚无服务总线命名空间,可以使用基于中心名称创建的默认名称(如果该命名空间名称可用)。

    如果已有要在其中创建中心的服务总线命名空间,请执行以步骤

    a. 在“命名空间”区域中,选择“选择现有”链接。

    b. 选择创建

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

  4. 选择“通知”(钟形图标),然后选择“转到资源”。

    Azure 门户 - 通知 -> 转到资源

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

    Important

    在应用程序中使用 DefaultFullSharedAccessSignature。 这只能在后端使用。

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

配置 Windows Phone (MPNS) 设置

  1. 在“通知设置”下选择“Windows Phone (MPNS)”。
  2. 选择“启用身份验证推送”。
  3. 在工具栏上选择“保存”。

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

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

    Note

    本教程使用未经身份验证模式下的 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);
             });
         });
     }
    

    Note

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

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

    Note

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

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

    Visual Studio - Windows Phone 应用功能

  7. F5 键以运行应用。

    随后应用中会显示注册消息。

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

    Note

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

测试性发送通知

  1. 在 Azure 门户中切换到“概览”选项卡。
  2. 选择“测试性发送”。

    “测试性发送”按钮

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

    1. 对于“平台”,请选择“Windows Phone”。
    2. 对于“通知类型”,请选择“Toast”。
    3. 选择“发送”
    4. 请在窗口底部的列表中查看结果

      “测试性发送”窗口

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

    Windows Phone 中的通知

后续步骤

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