快速入门:创建并注册原始通知后台任务 (HTML)

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

注意  不使用 JavaScript?请参阅快速入门:创建并注册原始通知后台任务 (XAML)

 

可以为你的 Windows 应用商店应用创建和注册后台任务功能。然后运行该代码,以响应原始通知的接收,这样当应用不在前台时可提供你的应用功能。

为了完成此过程,你必须编辑三个单独的文件:应用代码、应用清单和包含后台任务代码的新 JavaScript 文件。

先决条件

若要理解本主题或使用其提供的代码,则你需要:

  • 熟悉推送通知。有关详细信息,请参阅推送通知概述
  • 熟悉原始推送通知。有关详细信息,请参阅原始通知概述
  • 能够将推送通知发送到 Windows 推送通知服务 (WNS) 的云服务。有关详细信息,请参阅快速入门:发送推送通知
  • 后台任务的父应用。此应用必须已被授予出现在锁屏上的权限。有关详细信息,请参阅锁屏概述

说明

1. 创建后台任务类

在项目中创建一个新的 JavaScript (.js) 文件。在此情况下,我们将调用文件 examplebackgroundtask.js。收到原始通知时,将触发此文件中的代码在后台运行。向该文件添加如下所示的框架 JavaScript 函数。

此示例的 doWork 函数(当然,你可以称它为你喜欢的任何名称)包含构成实际后台任务的代码。首先,它通过 Windows.UI.WebUI.WebUIBackgroundTaskInstance 类检索通知中的内容,该类用于获取有关后台任务的当前实例的信息。特定于你的应用定义的原始通知内容的代码正文将替换“// ...”注释。

要点  请注意,任务代码以调用 JavaScript 的内置 close 函数完成。只要 JavaScript 后台任务完成工作或被取消,便必须调用此方法。如果后台任务不自己关闭,则后台任务的进程可以继续存在,从而消耗内存和电池使用时间,即使该后台任务已完成。

 


(function () {
    "use strict";

    var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;

    function doWork() {
        var notificationContent = backgroundTaskInstance.triggerDetails.content; 

        // ...

        close();
    }

    doWork();
})();

2. 在应用清单中声明后台任务

注意  作为此步骤的先决条件,你的应用必须选择锁屏选项并提供锁屏提醒徽标,然后才能支持后台任务。有关详细信息,请参阅快速入门:在锁屏上显示磁贴和锁屏提醒更新

 

在你的应用可以注册后台任务之前,你必须在应用清单中声明后台任务及其触发器。可以直接以 XML 或通过 Microsoft Visual Studio 清单编辑器来执行此操作。

  • 若要使用清单编辑器,请在 Visual Studio 中双击你的项目的 Package.appxmanifest 文件。在“声明”选项卡上,从“可用声明”下拉列表中选择“后台任务”。作为触发器,在“属性”下选择“推送通知”。在“起始页”****框中,输入后台任务的 .js 文件的名称,在此处为 examplebackgroundtask.js

    如果你的应用使用多个后台任务,请为每个任务重复此步骤,从而将每个时间指向不同的文件。

  • 若要直接向清单的 XML 中添加信息,请在文本编辑器中打开清单。在 Extensions 元素中,为后台任务类添加 Extension 元素。Category 属性应设置为“windows.backgroundTasks”,StartPage 属性应指定后台任务的 .js 文件,在此处为 examplebackgroundtask.js

    如果你的应用使用多个后台任务,请为每个任务添加单独的 Extension 元素,从而使每个元素指向不同的 .js 文件。

    你必须列出后台任务使用的每个触发器类型。因为我们创建的后台任务是为了响应原始通知而触发的,所以我们将声明推送通知触发器。将 BackgroundTasks 元素添加到 Extension 元素,将其 Task 元素设置为“pushNotification”。

    完整的 Extension 元素如下所示。


<Extension Category="windows.backgroundTasks" StartPage="js\examplebackgroundtask.js">
  <BackgroundTasks>
    <Task Type="pushNotification"/>
  </BackgroundTasks>
</Extension>

3. 在应用中注册后台任务

以下示例提供你将添加到你的应用的代码(例如,在其 Default.js 文件中),以将后台任务注册为对原始通知的响应。

首先,确定后台任务是否已注册。此步骤很重要。如果你的应用不检查现有的后台任务注册,那么它可能会多次注册同一任务。这会导致性能问题以及可能阻止任务完成的 CPU 使用。

下例将迭代 Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks 属性,如果任务已注册,则将标志设置为 true


var taskRegistered = false;
var exampleTaskName = "Example background task class name";

var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.AllTasks.first();

while (iter.hasCurrent) {
    var task = iter.current.value;
    
    if (task.name === exampleTaskName) {
        taskRegistered = true;
        break;
    }

    iter.moveNext();
}

如果你的应用发现后台任务未注册,它会通过调用 Windows.ApplicationModel.Background.BackgroundTaskBuilder.register 方法来注册。在对该方法的调用中,你需包含后台任务的 .js 文件,在我们的示例中为 examplebackgroundtask.js, 和 PushNotificationTrigger 对象。


if (taskRegistered != true) {
    var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
    var trigger = new Windows.ApplicationModel.Background.PushNotificationTrigger();

    builder.name = exampleTaskName;
    builder.taskEntryPoint = "js\\ExampleBackgroundTask.js";
    builder.setTrigger(trigger);

    var task = builder.register();
}

摘要

现在,你应该已基本了解如何编写用于原始通知的后台任务类,包括如何从应用中注册后台任务。你还应该了解如何更新应用清单,以便 Windows 允许你的应用注册其后台任务。

注意  你可以下载后台任务示例以查看使用多种不同类型后台任务的完整且可靠的 JavaScript 应用上下文中的这些代码示例以及更多示例。

 

相关主题

原始通知示例

原始通知概述

原始通知指南和清单

快速入门:为正在运行的应用截获推送通知

RawNotification