如何请求、创建和保存通知通道 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

注意  不使用 JavaScript?请参阅如何请求、创建和保存通知通道 (XAML)

 

你可以打开你的应用可接收推送通知的通道统一资源标识符 (URI)。然后,你可以将该通道发送到使用它发送推送通知的服务器,并在你不再需要该通道时将其关闭。 对于特定应用或辅助磁贴,通道是表示单个设备上单个用户的唯一地址。

要点  通知通道自动于 30 天后过期。

 

你需要了解的内容

技术

  • Windows Runtime

先决条件

  • 了解磁贴和通知术语及概念,以及 XML。本主题还假设你了解如何使用 Windows 运行时 API 创建使用 JavaScript 的基本 Windows 应用商店应用。
  • 熟悉推送通知和 Windows 推送通知服务 (WNS) 概念、要求和操作。这些将在 Windows 推送通知服务 (WNS) 概述中进行讨论。

说明

步骤 1: 请求通道 URI

此示例请求信道 URI。将向通知客户端平台发出此请求,然后该平台依次从 WNS 请求通道 URI。请求完成后,返回的值为包含 URI 的 PushNotificationChannel 对象。


var channel;
var pushNotifications = Windows.Networking.PushNotifications;
var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();

return channelOperation.then(function (newChannel) {
    channel = newChannel;
    // Success. The channel URI is found in newChannel.uri.
    },
    function (error) {
        // Could not create a channel. Retrieve the error through error.number.
    }
);

步骤 2: 将信道 URI 发送至服务器

通道 URI 封装在 HTTP POST 请求中并且发送至服务器。

要点  应该采用安全的方式将此信息发送至服务器。你应该要求应用在它传输通道 URI 时向服务器对自己进行身份验证。对信息进行加密并使用安全的协议,如 HTTPS。

 


var serverUrl = "http://www.contoso.com";

var xhr = new WinJS.xhr({
        type: "POST", 
        url: serverUrl,
        headers: {"Content-Type": "application/x-www-form-urlencoded"},
        data: "channelUri=" + channel.uri
}).then(function (req) {
        // Channel URI successfully sent to server. Retrieve the response from req.response.
    },
    function (req) {
        // Could not send channel URI to server. Retrieve the error through req.statusText.
    }
);

备注

请求通道

你应该通过使用以下逻辑在每次调用应用时请求新的通道:

  1. 请求通道。
  2. 将新通道与之前的通道对比。如果通道相同,则无需进一步进行任何操作。请注意,这要求你的应用在每次成功将通道发送到你的服务时都在本地存储该通道,以便之后可将该通道用于对比。
  3. 如果通道已更改,请将新通道发送到你的 Web 服务。包含在以下情况中始终发送新通道的错误处理逻辑:
    • 你的应用之前从未向 Web 服务发送过通道。
    • 你的应用上次尝试向 Web 服务发送通道时没有成功。

createPushNotificationChannelForApplicationAsync 方法的不同调用不会始终返回不同的通道。如果自上次调用后通道未改变,则你的应用可不用重新向你的服务发送此相同通道以节省资源和 Internet 流量。一个应用可同时拥有多个有效的通道 URI。由于每个唯一的通道直到其到期前均有效,因此请求新的通道也无妨,因为它不影响任何以前通道的到期时间。

通过在每次调用你的应用时请求一个新通道,你最大化了始终有权访问有效通道的机会。如果内容始终为实时内容对于你的磁贴或 Toast 方案是至关重要的,那么这样做特别重要。如果你担心用户每 30 天运行你的应用的次数不超过一次,那么你可以实施一个后台任务来定期执行你的通道请求代码。

处理通道请求中的错误

如果 Internet 不可用,则调用 createPushNotificationChannelForApplicationAsync 方法可能会失败。若要处理这种情况,请将重试逻辑添加到第 2 步显示的代码中。我们建议尝试三次,在每次尝试不成功后,延迟 10 秒。如果三次均失败,则必须等到该用户下次启动应用后再次重试。

关闭通道

通过调用 close 方法,你的应用可以立即停止所有通道上的通知传送。虽然你的应用并不经常这样做,但仍然可能存在你要停止向应用传送所有通知的应用场景。例如,如果你的应用有用户帐户的概念,并且某位用户从该应用注销,此时磁贴不再显示用户的个人信息才是合理的预期行为。要成功地清除磁贴内容并停止传送通知,你应该进行以下操作:

  1. 在任何用于向用户传送磁贴、toast、锁屏提醒或原始通知的通知通道上调用 PushNotificationChannel.close 方法,以停止所有磁贴更新。调用 close 方法以确保无法继续将关于该用户的通知传送到客户端。
  2. 调用 TileUpdater.clear 方法从磁贴中删除上一位用户的数据,以清除磁贴内容。

相关主题

推送和定期通知示例

Windows 推送通知服务 (WNS) 概述

快速入门:发送推送通知

如何使用 Windows 推送通知服务 (WNS) 进行验证

如何管理信道过期和续订

推送通知指南和清单

推送通知服务请求和响应头