Краткое руководство. Создание и регистрация фоновой задачи необработанного уведомления (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Примечание  Не используете JavaScript? Перейдите к разделу Краткое руководство. Создание и регистрация фоновой задачи необработанного уведомления (XAML).

 

Описываются способы создания и регистрации функции фоновой задачи для приложения Магазина Windows. Этот код запускается в ответ на получение необработанного уведомления, придавая вашему приложению функциональность, когда оно не находится на переднем плане.

Для завершения этой процедуры вы должны изменить три отдельных файла: код приложения, манифест приложения и новый файл JavaScript, содержащий код фоновой задачи.

Необходимые условия

Чтобы понять эту тему или применить код, который в ней приводится, необходимы:

Инструкции

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.

  • Чтобы использовать редактор манифестов, дважды щелкните файл Package.appxmanifest вашего проекта Visual Studio. На вкладке Объявления выберите пункт Фоновые задачи в раскрывающемся списке Доступные объявления. В качестве триггера выберите Push-уведомления на вкладке Свойства. В поле Начальная страница введите имя JS-файла фоновой задачи, в нашем случае examplebackgroundtask.js.

    Если в вашем приложении используется несколько фоновых задач, выполните это действие для каждой задачи, указывая каждый раз другой файл.

  • Чтобы добавить информацию непосредственно в XML манифеста, откройте манифест в текстовом редакторе. В элементе Extensions добавьте элемент Extension для класса фоновой задачи. Необходимо установить для атрибута категории значение "windows.backgroundTasks", а атрибут начальной страницы должен называть файл .js фоновой задачи, в нашем случае examplebackgroundtask.js.

    Если ваше приложение использует несколько фоновых задач, добавьте отдельный элемент Extension для каждой задачи. Каждый элемент должен указывать на другой JS-файл.

    Вы должны перечислить все типы триггеров, используемые в вашей фоновой задаче. Так как мы создаем фоновую задачу, которая запускается в ответ на необработанное уведомление, мы объявим триггер push-уведомления. Добавьте элемент BackgroundTasks в Extension с элементом Task со значением "pushNotification".

    Элемент Extension полностью показан здесь.


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

3. Зарегистрируйте вашу фоновую задачу в приложении.

В следующих примерах показан код, который вы добавите в приложение (например, в его файл Default.js) для регистрации вашей фоновой задачи в качестве ответа на необработанное уведомление.

Сначала определите, не зарегистрирована ли уже задача. Этот шаг важен. Если приложение не проверяет регистрацию существующей фоновой задачи, оно может зарегистрировать одну задачу несколько раз. Это может привести к проблемам с производительностью и использованием ЦП, которые не позволят завершить задачу.

В данном примере выполняется итерация через свойство 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, которое использует несколько разных типов фоновых задач.

 

Связанные разделы

Пример необработанного уведомления

Общие сведения о необработанных уведомлениях

Руководство и контрольный список для необработанных уведомлений

Краткое руководство: перехватывание push-уведомлений для работающих приложений

RawNotification