Bagikan melalui


如何向 Windows Phone 推送通知服务发送已通过身份验证的消息

原文发布于 2012 年 6 月 5 日(星期二)

推送通知服务是 Windows Phone 的一项超酷功能,可让您为您的 Windows Phone 应用程序执行发送 Toast 消息和更新动态磁贴等操作。您可在无需任何附加传输安全协议的情况下使用该服务,但此情况下,您每天最多可发送 500 条消息。但是,如果您使用 SSL 为推送通知服务设置相互进行身份验证的会话,则您可发送的消息数不受限制。这会使保护您的对话变得更加迫切。遗憾的是,有关此操作的实际过程的记录少得可怜。幸运的是,Windows Phone App Hub 的社会论坛非常有用,您可通读该论坛来弄清该过程。不过,为了让您无需花太多时间来拼凑完成该过程所需的所有信息,我想我应该在此处将所有部分拼凑成一个简单的文档。您知道,这本应是由产品团队完成的工作。:-) 来看看吧:

  1. 您可在此处阅读有关用于建立此安全通信的证书的要求:https://msdn.microsoft.com/zh-cn/library/ff941099(VS.92).aspx。不过若要对其进行简化,我发现,使用一家支持的证书颁发机构提供的 SSL 证书就可以了。若要查看支持的证书颁发机构的列表,请参见此处:https://msdn.microsoft.com/zh-cn/library/gg521150(VS.92).aspx
  2. 您需要获取此证书,并将其上载到 App Hub。无需带私钥的 PFX,只需证书的公共版本(即 .cer 文件)。若要上载该证书,请访问 App Hub 并登录,然后在左上角单击您的帐户名称。进入帐户管理页面后,您将在“我的帐户”横幅下看到一个名为“证书”的链接。单击该链接并按该处的说明上载证书。
  3. 在 Windows Phone 应用程序中创建 HttpNotificationChannel 类实例。创建新的 HttpNotificationChannel 时,使用 SSL 证书的公用名 (CN) 作为新通道的第二个参数。您可通过以下方法找出您的证书的公用名:双击 .cer 文件以打开该文件,单击“详细信息”选项卡,然后单击“使用者”属性。您将在下面的窗口中看到显示的值,其中第一个类似于“CN = www.contoso.com”;在本示例中,您需要使用“www.contoso.com”。因此,当您创建新通道时,它类似于:pushChannel = new HttpNotificationChannel("myChannelName", "www.contoso.com");
    1. 注意:如果您已为不同的设备创建通道,则将需要通过以下步骤找出您的通道:使用 HttpNotificationChannel.Find 方法来查找通道,然后使用 .Close 和 .Dispose 方法关闭并处置该通道。然后,您需要重新创建通道,以便可将您的公用名与连接关联。
  4. 运行您的服务器端代码时,您需要安装证书,包括私钥(因此包括 .pfx 文件)。您还需确保您的应用程序池的帐户有权访问该证书的私钥。为此,请打开 MMC 工具并为“本地计算机”添加“证书”管理单元。在将证书安装到“个人”节点后,在 MMC 中右键单击证书并选择“所有任务…管理私钥”。然后需要为应用程序正在使用的应用程序池添加帐户,并至少向其授予对密钥的读取权限。
    1. 注意:如果在 IIS 7.5 中使用新的内部帐户(如 ApplicationPoolIdentity),则您需要授予对 IIS apppool\ASP.NET v4.0 的访问权限,其中“ASP.NET v4.0”是您的应用程序池的名称。
  5. 在您向推送通知服务发送消息的代码中,您需要向 HttpWebRequest 对象添加证书。通常,完成此操作的步骤是:打开 X509 Store,获取 My store 的证书集合,通过指纹在集合中进行查找,此时,您需要从证书属性复制证书的指纹并将其粘贴到您的代码,然后使用集合中返回的第一个证书(即 myCollection[0])。拥有证书后,您可按以下形式将其添加到您的请求:myRequest..ClientCertificates.Add(mySslCertificate);

要注意的其他重要事项:

  • 您上载的证书仅可使用四个月。如果您未向使用证书的市场提交认证申请,则将需要重新上载证书。当您向市场提交认证申请时,您将有机会从您已上载证书的列表中选择证书。只选择您为这些通信上载并由您设置的证书。
  • 那么,您如何知道这是否起作用?当您在 Windows Phone 客户端上创建 HttpNotificationChannel 类实例时,您将会收到您的消息发送到的通知通道 Uri。看看该 Uri - 如果您没有使用经身份验证的连接,则将在路径上看到“throttledthirdparty”。但是,如果您正确创建了类实例,则路径将包含“unthrottledthirdparty”;此外,它显示的协议将是 HTTP 而非 HTTPS。在收到成功发送消息所需的 Uri 后,您当然就可以真正确保它正常工作。如果它顺利到达您的设备,就可以知道它已经正常工作。

这是一篇本地化的博客文章。请访问 How To Send An Authenticated Message to the Windows Phone Push Notification Service 以查看原文。