教程:使用 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 应用程序
  • 测试性发送通知

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户

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

创建通知中心

  1. 登录到 Azure 门户

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

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

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

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

  4. 在“通知中心”页面上,执行以下步骤:

    1. 为通知中心指定一个名称。

    2. 为命名空间指定一个名称。 命名空间包含一个或多个中心。

    3. 选择要在其中创建通知中心的位置。

    4. 选择一个现有资源组,或者为新资源组输入一个名称。

    5. 选择“创建” 。

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

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

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

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

    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 通知和磁贴通知,请同时调用 BindToShellTileBindToShellToast

  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 设备。 若要了解如何向特定的设备推送通知,请转到以下教程: