如何设置后台连接选项 (HTML)

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

本主题 介绍可供采用 JavaScript 和 HTML 编写的 Windows 运行时应用使用的后台网络连接功能,以及如何配置后台连接选项。

你需要了解的内容

技术

  • IXMLHTTPRequest2

    使用 XMLHttpRequest 对象的扩展来启用对 Web 资源的访问。

  • System.Net.Http

    支持使用现代 Web 客户端连接 Web 服务。

先决条件

  • 以下信息适用于任何依赖网络连接始终连接的联网或网络感知的 Windows 运行时应用。本主题适用于针对 Windows 8.1、Windows Phone 8.1 和 Windows Server 2012 R2 采用 JavaScript 和 HTML 编写的应用。 有关适用于 JavaScript 应用的后台任务的详细信息,请参阅使用后台任务支持应用

    有关 Windows 8.1 和 Windows Server 2012 R2 上采用 C++/XAML 编写的联网或网络感知的 Windows 应用商店应用,以及采用 C#、VB.NET 或托管 C++ 编写的使用 .NET Framework 4.5 的应用的详细信息,请参阅如何在后台保持连接

适用于 Windows 应用商店应用的生命周期模型

Windows 8 和更高版本引入了一个新的适用于 Windows 运行时应用的生命周期模型,它不同于为 Windows 8 桌面应用和以前版本 Windows 上的应用使用的模型。默认情况下,将 Windows 运行时应用移动到后台时,会完全暂停该应用的操作。在暂停应用时有几个例外(例如活动打印、访问音频流及使用 Windows.Networking.BackgroundTransfer 在后台传送数据)。对于这些扩展中的某些扩展(例如,Windows.Networking.BackgroundTransfer),应用可能仍然处于暂停状态,但是 Windows 将继续在单独的进程中进行网络传输。

这一适用于 Windows 运行时应用的新模型提高了在前台运行的应用的响应速度,同时降低了系统使用的总电量。 较低的电量使用提高了电池供电系统在重新充电之前的运行时长。另外,此新模型还为必须在后台运行的应用(例如 IP 电话 (VoIP)、即时消息 (IM) 和电子邮件)提供了一个机制,以便为最终用户提供始终连接的体验。这意味着,对于依赖长期连接到远程服务器的应用来说,在应用暂停的状态下仍然可以工作。在实时应用始终进行连接及同时设法降低能耗和提高应用响应速度之间,存在着竞争的需求。

为了支持需要始终连接的采用 JavaScript 编写的 Windows 运行时应用的实时联网方案,可以使用 Windows 8 中引入的多个新功能:

  • 后台任务
  • SessionConnected 的系统触发器
  • 时间触发器
  • Windows 推送通知服务 (WNS)
  • 原始推送通知

这些功能为需要在 Windows 运行时应用处于暂停状态时接收原始推送通知的始终连接应用提供支持。也可以将这些应用描述为始终可访问。本主题的重点是开发人员如何使用 WNS 和原始推送通知构建实时的始终连接应用。这些功能要求应用也同时是一个锁屏应用。

网络应用也可以使用其他后台任务功能。可供 Windows 运行时应用使用的一些其他触发器包括:

  • 维护触发器(用于维护的周期事件)
  • 用于用户和会话的系统触发器(用户会话连接/断开连接、用户在场/离开及联机 ID 更改)
  • 用于联网状态的系统触发器(网络状态更改、Internet 可用/不可用)
  • 用于锁屏的系统触发器(应用添加/删除)

当应用不需要实时连接,但需要以某个时间间隔运行短暂时间时,可以使用时间触发器。当应用需要关注事件(例如 Internet 连接的可用性或用户状态)时,可以使用系统触发器。在一个应用中,可以结合使用各种触发器以支持各种方案。 有关详细信息,请参阅使用后台任务支持应用

大多数 Windows 运行时应用不需要使用本主题中详细介绍的原始推送通知。通过使用动态磁贴或通过使用带有来自 WNS 的推送通知(而不是原始推送通知)的动态磁贴,应用可以给用户留下它始终在后台运行的印象。 你的应用不需要成为锁屏应用(在本主题后面详细介绍)或在后台运行即可使用动态磁贴。但是,你的应用必须在锁屏上才能使用带有原始推送通知的动态磁贴。

始终连接的要求

要让一个应用始终连接和可以访问,通常需要以下两个元素:

  • 长期运行的进程,以确保应用接收传入的任何网络通知并可以快速处理。
  • 与远程终结点的长期运行的网络连接,以便根据需要接收和发送数据。

在以前版本的 Windows 中,应用在失去焦点时保持运行状态(在后台)。这些应用可以在后台保持长期的连接,因为它们可以发送和接收数据及保持连接消息。允许应用在后台运行会消耗资源,从而影响其他应用的响应速度和电池寿命。

Windows 运行时应用和锁屏

Windows 8 引入了一个全新的软件模型,它会在 Windows 运行时应用移动到后台时暂停该应用。当应用暂停后,系统接收的任何数据包可能不会立即传递到应用,并且可能会丢弃传入的网络数据包。在应用暂停时,不会发送任何新数据包。由于具有这些条件,可能会关闭现有网络连接。

若要始终保持连接,则应用需要是一个锁屏应用。锁屏应用是一种特殊的应用类型,当应用不在前台运行时,它可以在锁屏上显示通知并在后台运行代码。只有使用一个或多个后台任务的应用才能是锁屏应用。

锁屏应用具有某些特殊功能:

  • 能够接收 WNS 发出的原始推送通知,收到通知时可能会运行代码。
  • 能够在发生时间触发时运行代码。
  • 能够在启动用户会话时运行代码。

在后台运行时,固定到锁屏的应用可以通过在出现新信息时在锁屏上更新和显示锁屏提醒图标,向用户显示信息。这些应用也可以在有消息到达时显示屏幕通知。如果点击或单击通知,系统将要求用户解锁设备。解锁设备后,将启动对应于通知的应用,并显示上下文信息。

在锁屏应用上有一些限制值得注意。在任何给定时间,用户最多可以使用七个锁屏应用。用户可以随时从锁屏中添加或删除应用。

锁屏应用在向用户提供他们在离开设备时可能漏掉的信息上表现优秀。如果需要提供屏幕通知,要求用户立即采取操作,例如来电、传入的即时消息或紧急电子邮件,则锁屏应用同样表现出色。

大多数应用不需要是锁屏应用。在后台暂停应用时,它可以使用来自 WNS 的推送通知(非原始推送通知)来更新动态磁贴,并给用户留下应用正在运行、保持连接且包含最新内容的印象。应用也可以随时使用 WNS 向用户发出 Toast 通知,或者更新应用磁贴上的锁屏提醒计数。

因为锁屏应用的位置数有限,所以在计划构建应用时,你应该让它即使在没有锁屏应用权限时也能正常运行。用户必须显式允许将应用添加到锁屏。在前台可见时,你的应用应该始终正常运行。作为锁屏应用,只是允许你的应用在后台运行时启用一些相同的场景。

有一个功能,该功能允许采用 JavaScript 和 HTML 编写的应用在应用位于后台时接收传入的网络数据包

  • 由系统接收且导致在应用中运行后台任务的原始推送通知。 应用使用此功能接收来自 Windows 推送通知服务 (WNS) 的原始数据。此数据的内容必须能够由应用识别。应用必须在 WNS 中注册才能接收原始推送通知。

对于放在锁屏上的应用,可以使用下面讨论的多种机制来启用实时方案。每一种都有它的优缺点。这些机制并不互相排斥,在某些应用中可以结合使用。

在 Windows 应用商店应用中使用 WNS

WNS 是一种 Microsoft 为 Windows 8 托管的云服务,Windows 运行时应用可以使用它接收可运行代码、更新动态磁贴或引发屏幕通知的通知。为了使用 WNS,本地计算机必须连接到 Internet,WNS 服务才能与它通信。有关详细信息,请参阅推送通知概述

前台运行的 Windows 运行时应用可以使用 WNS 更新动态磁贴,引发对用户的通知或更新锁屏提醒。应用不需要在锁屏上即可使用 WNS。如果你的应用必须运行代码以响应推送通知,你应该考虑在其中使用 WNS。

对于不必位于锁屏上的应用(大多数应用),可以使用 WNS 提供动态磁贴更新。

如果你将 Windows 运行时应用固定到锁屏上并在后台使用 WNS,则应用可以实时地从 WNS 接收原始推送通知,并以锁屏提醒更新或通知的形式将它们显示在锁屏上。将原始推送通知传递到锁屏应用时,应用可以运行代码以响应该通知。使用 WNS 可以比使用网络触发器更具能源效率,这些网络触发器适用于在 Windows 8.1 和 Windows Server 2012 R2 上采用 C++/XAML 编写的 Windows 应用商店应用以及采用 C#、VB.NET 或托管 C++ 编写的使用 .NET Framework 4.5 的应用。

WNS 提供了许多优势:

  • WNS 提供了用于向锁屏应用传递实时通知最具能源效率的机制。
  • WNS 为你的应用简化了开发人员模型。在大多数情况下,开发人员不必编写任何后台任务,因为操作系统将呈现磁贴或 Toast。在少数情况下,如果你的应用必须运行后台任务,它需要注册原始推送通知和运行后台任务。
  • 不需要在客户端应用和远程服务器之间维护任何持久套接字连接,因为 Windows 将维护与 WNS 的连接。因此,不需要发送保持连接消息的开销。
  • 在客户端和云服务之间的单个 WNS 连接可以支持本地计算机上的所有应用,这将转换为客户端的潜在电池寿命效率。
  • 服务器端的服务的操作成本可能会减少,因为在客户端和远程服务之间无需驻留多个 TCP 套接字连接。
  • 你的应用不必总是驻留在内存中,因为可以终止应用,但在收到传入的原始推送通知时仍然让 WNS 更新磁贴,引发 Toast 或触发后台任务的运行。
  • 使用原始推送通知的后台任务可以在 Windows 8.1 和 Windows Server 2012 R2 上采用 JavaScript、C++/XAML 编写,并且采用 C#、VB.NET 或托管 C++ 编写并使用 .NET Framework 4.5。

使用 ControlChannelTrigger 的网络触发器功能在 JavaScript 中不可用。

注意  ControlChannelTrigger 在 Windows Phone 上不受支持

 

使用网络触发器的后台网络连接可以在 Windows 8 和 Windows Server 2012 上采用 C++/XAML 编写,并且采用 C#、VB.NET 或托管 C++ 编写并使用 .NET Framework 4.5。有关详细信息,请参阅如何在后台保持连接

WNS 也有一些限制,可能会影响某些应用。WNS 无法用于连接到专用家庭或工作网络(阻止公共 Internet 访问)的本地计算机。当 Internet 访问可用时,WNS 也可能会被某些网络防火墙所阻止。使用 WNS 有一些其他缺点需要考虑。尤其是,通知是以最大努力传递的,并不保证它的传递。原始推送通知中负载的最大大小为 5 KB。

签于这些优点,我们建议构建 VoIP、IM 或电子邮件应用的开发人员考虑为锁屏应用使用 WNS 通知,但如果它们不满足你的要求,则考虑其他方法。

如果你只是需要使用 WNS 进行动态磁贴更新或引发 Toast,则不需要构建锁屏应用。仅当应用需要原始推送通知触发运行后台任务时使用 WNS 的情况下,才需要锁屏应用。

在 Windows 运行时应用中使用时间触发器或系统事件触发器

锁屏应用可以配置为定期使用时间触发器(最少具有 15 分钟的时间间隔)运行代码。一个示例是需要轮训新电子邮件,可能在应用连接到 POP3 或 IMAP 电子邮件服务器时。

当用户登录到本地计算机时,锁屏应用也可以使用系统事件触发器运行代码(用于启动会话的系统触发器)。一个示例是当它们启动用户会话时,将用户登录到即时消息服务,以便可以接收即时消息。

在本主题中,我们将重点介绍使用 WNS 或网络触发器功能构建使用原始推送通知的锁屏应用。有关使用定时器的详细信息,请参阅如何在计时器上运行后台任务。有关后台任务的详细信息,请参阅使用后台任务支持应用

后台任务和沙盒

后台任务的生存时间由用来实现后台任务的功能确定。为了确保后台任务不会对电池寿命产生不利影响,Windows 在应用可在运行后台任务期间使用的 CPU 和网络 I/O 资源上强制使用了限制。每个应用都会定期获取这些资源的一个配额,用完此配额将暂停你的应用的后台任务。应用必须允许由于沙盒限制而被暂停。

有关详细信息,请参阅使用后台任务支持应用

后续步骤

有关如何创建锁屏应用以接收使用原始推送通知的后台网络通知的详细信息,请参阅如何创建使用后台原始推送通知的锁屏应用

有关注册推送通知通道并将其发送到服务器,注册要从原始推送通知激活的后台任务,将原始推送通知发送到通道以及激活后台任务这一过程的详细信息,请参阅如何使用 WNS 将原始推送通知传递到锁屏应用

有关如何编写后台任务以接收使用原始推送通知的后台网络通知的详细信息,请参阅如何为原始推送通知编写后台任务

有关使用原始推送通知的指南和清单的详细信息,请参阅原始通知指南和清单

相关主题

其他资源

添加网络支持

后台网络

锁屏提醒概述

原始通知指南和清单

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

如何使用 WNS 将原始推送通知传递到锁屏应用

如何为原始推送通知编写后台任务

锁屏概述

推送通知概述

如何创建使用后台原始推送通知的锁屏应用

如何在后台保持连接

使用后台任务支持应用

磁贴和磁贴通知概述

Toast 通知概述

后台传送数据

网络连接的故障排除和调试

参考

ControlChannelTrigger

HttpClient

HttpClientHandler

IXMLHTTPRequest2

MessageWebSocket

StreamSocket

StreamWebSocket

System.Net.Http

Windows.ApplicationModel.Background

Windows.Networking.BackgroundTransfer

Windows.Networking.PushNotifications

Windows.Networking.Sockets

示例

后台任务示例

锁屏应用示例

推送和定期通知客户端示例

原始通知示例