Опубликован: 15.05.2013 | Уровень: для всех | Доступ: платный
Лекция 6:

Push-уведомления и Windows Push Notification Service

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Задачи, зависимые от экрана блокировки и триггеры

Последняя группа фоновых задач, это те, которые требуют, чтобы приложение было добавлено на экран блокировки. Для них существует четыре применимых опции SystemTrigger из SystemTriggerType, вместе с тремя другими типами, которые представлены в редакторе манифеста: TimeTrigger (http://msdn.microsoft.com/library/windows/apps/windows.applicationmodel.background.timetrigger.aspx) (Таймер), PushNotificationTrigger (http://msdn.microsoft.com/library/windows/apps/windows.applicationmodel.background.pushnotificationtrigger.aspx) (Push-уведомления), и Windows.Networking.Sockets.ControlChannelTrigger (http://msdn.microsoft.com/library/windows/apps/windows.networking.sockets.controlchanneltrigger.aspx) (Канал управления). Они описаны в следующей таблице вместе с указанием доступных примеров, демонстрирующих их использование:

SystemTriggerType Когда вызываются, сценарии и примеры
SystemTriggerType.controlChannelReset Смотрите ControlChannelTrigger ниже.
SystemTriggerType.sessionConnected Пользователь вошел в систему с экрана блокировки.
SystemTriggerType.userAway Устройство перешло в неактивный режим (например, отключился экран) в результате отсутствия активности пользователям.
SystemTriggerType.userPresent Пользователь проявил активность в режиме неактивности устройства.
Windows.Networking.Sockets.ControlChannelTrigger Оповещения реального времени поступают через канал управления (control channel), то есть – через сетевой канал, обычно использующий сокеты или другие сетевые средства передачи данных, если нет возможности использовать WNS и необработанных уведомления для тех же самых целей. Данный триггер используется в приложениях организации связи в реальном времени, такой, как VoIP, IM, элеатронная почта, таким образом, эти возможности "всегда достижимы", если пользователь поместит их на экран блокировки. Мы рассмотрим сетевые средства передачи данных в Главе 3, но эта тема, в полном объеме, находится за пределами данного курса. Обратитесь к материалу "Настройка параметров фонового подключения" (http://msdn.microsoft.com/library/windows/apps/Hh771189.aspx) в документации, а так же – к следующим примерам, все из которых написаны на C# или C++ и не доступны в JavaScript-варианте:
SystemTriggerType.controlChannelReset используется для управления фоновой задачей для изменений в канале управления вместо событий самого канала.
TimeTrigger Заданный срок действия триггера. Это показано в Сценарии 5 примера "Фоновая задача" (http://code.msdn.microsoft.com/windowsapps/Background-Task-Sample-9209ade9) (смотрите ниже).
PushNotificationTrigger Необработанное push-уведомление для приложения поступило от WNS. Так как Windows не может непосредственно обрабатывать такие уведомления, этот вид фоновых задач необходим для того, чтобы выполнять действия, основанные на необработанных уведомлениях, когда приложение не исполняется. Выполняющееся приложение, с другой стороны, может использовать событие pushnotificationreceived, как описано выше. Кроме того, вы можете обратиться к примеру "Необработанные уведомления" ( http://code.msdn.microsoft.com/windowsapps/Raw-notifications-sample-3bc28c5d).

Примечание. В имитаторе Visual Studio работа с экраном блокировки не поддерживается. для отладки приложений экрана блокировки, вам нужно использовать опции отладки Локальный компьютер (Local Machine) или Удалённый компьютер (Remote Machine).

Фоновые задачи для этих триггеров создаются и регистрируются так, как мы уже видели. Например, TimeTrigger, создаётся с указанием интервалам freshnessTime (в минутах) и флага oneShot, как показано в Сценарии 5 примера "Фоновая задача" (js/time-trigger-background-task.js):

BackgroundTaskSample.registerBackgroundTask(
 BackgroundTaskSample.sampleBackgroundTaskEntryPoint,
 BackgroundTaskSample.timeTriggerTaskName,
 new Windows.ApplicationModel.Background.TimeTrigger(15, false), null);

TimeTrigger так же используется в Сценарии 3 примера "Определение местоположения" (http://code.msdn.microsoft.com/windowsapps/Geolocation-2483de66) для того, чтобы позволить пользователю добавить навигационное приложение на экран блокировки, чтобы оно могло более последовательно отслеживать его перемещения. Вообще говоря, навигационное приложение обычно не особенно полезно на экране блокировки, преимущественно потому что оно не может показывать карту! Лучше, таким образом, использовать API Windows.System.Display.DisplayRequest для того, чтобы предотвратить отображение экрана блокировки.

Создание PushNotificationTrigger даже проще, так как для этого не нужны параметры. Это можно увидеть в примере "Необработанные уведомления" (http://code.msdn.microsoft.com/windowsapps/Raw-notifications-sample-3bc28c5d), в Сценарии 1 (js/scenario1.js):

function registerBackgroundTask() {
// Регистрирует фоновую задачу для необработанных уведомлений
var taskBuilder = new background.BackgroundTaskBuilder();
var trigger = new background.PushNotificationTrigger();
taskBuilder.setTrigger(trigger);
taskBuilder.taskEntryPoint = sampleTaskEntryPoint;
taskBuilder.name = sampleTaskName;

var task = taskBuilder.register();
task.addEventListener("completed", backgroundTaskComplete);
}

Хотя и можно выполнить вызов BackgroundTaskBuilder.register, задача не будет исполнена до тех пор, пока пользователь не добавит приложение на экран блокировки, как мы видели на рис. 6.1. У приложения нет возможности этим управлять – всё, что оно может сделать, запросив соответствующие данные – это убедиться в том, что доступно для выбора пользователем в соответствующем разделе Настроек ПК (PC Settings).

Запрос выполняется с помощью метода Windows.ApplicationModel.Background.BackgroundExecutionManager.requestAccessAsync; даннй вызов следует выполнить до регистрации фоновой задачи (снова смотрите Сценарий 5 примера "Фоновая задача"):

Windows.ApplicationModel.Background.BackgroundExecutionManager.requestAccessAsync();

Когда этот вызов осуществляется впервые, он вызывает окно для получения согласия пользователя, которое показано на рис. 6.2. Если пользователь выбирает вариант Разрешить (Allow), приложение появится в соответствующем разделе Параметров ПК (PC Settings) в качестве опции для добавления на начальный экран, в противном случае этого не произойдет. Как и в случае с другими разрешениями, пользователи могут изменять свое мнение позже, воспользовавшись настройками Разрешений (Permissions), как показано на рис. 6.3.

Вопрос, который задаётся пользователю, если приложению нужен доступ к экрану блокировки

Рис. 6.2. Вопрос, который задаётся пользователю, если приложению нужен доступ к экрану блокировки
Параметр экрана блокировки на панели настройки Разрешений (Permissions) приложения, которому нужен подобный доступ

Рис. 6.3. Параметр экрана блокировки на панели настройки Разрешений (Permissions) приложения, которому нужен подобный доступ

Для того, чтобы увидеть полную демонстрацию, обратитесь к примеру "Приложения экрана блокировки" (http://code.msdn.microsoft.com/windowsapps/Lock-screen-apps-sample-9843dc3a). В Сценарии 1 он показываеть, как запрашивать доступ к экрану блокировки и проверять результат – значение из перечисления BackgroundAccessStatus (http://msdn.microsoft.com/library/windows/apps/windows.applicationmodel.background.backgroundaccessstatus.aspx). Он так же показываеть выполнение запросов и отключение этого доступа с помощью методов getAccessStatus и removeAccess объекта BackgroundExecutionManager.

Сценарий 2, в свою очередь, показывает отправку уведомлений индикатора событий на экран блокировки, вместе с обновлением текста около часов, если приложение выбрано для отображения этого текста. Здесь нет ничего особенного, если речь идёт об экране блокировки: подобные обновления происходят точно так же, как и для плитки приложения. Разница лишь в том, что эти обновления отображаются на экране блокировки. В случае с индикаторами событий, глиф уведомления отображается вместе с изображением, которое задает параметр Эмблема (Badge Logo), заданный в разделе Интерфейс приложения > Уведомления (Application UI > Notifications) манифеста ( рис. 6.1). Повторяя из ранее упомянутого, это изображение может иметь лишь белые и прозрачные пиксели и должно быть представлено в трех размерах для разного уровня масштабирования: 24x24 (100%), 33x33 (140%), и 43x43 (180%).

Сценарий 3, наконец, показывает, как добавить дополнительные плитки на экран блокировки, независимо от плитки приложения. Для того чтобы дополнительная плитка была доступна для экрана блокировки, подразумевая, что приложение уже запросило доступ к экрану блокировки, вам нужно установить следующие два свойства объекта Windows.UI.StartScreen.SecondaryTile ( http://msdn.microsoft.com/library/windows/apps/windows.ui.startscreen.secondarytile.aspx), которые мы как-то упоминали: lockScreenBadgeLogo и lockScreenDisplayBadgeAndTileText. Если дополнительная плитка присутствует на начальном экране, эти свойства так же делают её доступной на странице Параметров ПК (PC Settings) для экрана блокировки.

Отладка фоновых задач

К данному моменту вы уже, возможно, запустили фоновую задачу TimeTrigger в Сценарии 5 примера "Фоновые задачи", и хотя с того времени прошло уже больше 15 минут (может быть больше 30 минут, если вы просто пропустили 15-минутное окно, когда таймеры объединились), вы, возможно, всё еще ждете, пока пройдёт этот период. Значит ли это, что ваша жизнь при отладке фоновых задач будет состоять из сплошного ожидания?

К счастью, ответ на этот вопрос – "Нет" и "Возможно". То есть, отладчик Visual Studio знает о зарегистрированных фоновых задачах и предоставляет их список в выпадающем меню Приостановить (Suspend) на панели инструментов:


Выбор одной из этих команд немедленно вызовет фоновую задачу, так что вам не придется ждать или пытаться активировать триггер по-настоящему. Первое предостережение заключается в том, что если свойство триггера oneShot установлено в true и он уже был вызван, снова он вызван не будет. Второе предостережение заключается в том, что если вы запускаете JavaScript-приложение с фоновыми задачами, написанными на других языках, вам нужно изменить тип отладчика для основного проекта приложения с Только скрипт (Script Only) на Управляемый (Managed) или Машинный (Native), как показано ниже, иначе вы не сможете устанавливать точки останова в модулях, написанных на других языках.


Третье предостережение заключается в том, что фоновые задачи, которые используют ControlChannelTrigger, PushNotificationTrigger, и SystemTriggerType.SmsReceived не отображаются в вышеупомянутом меню Visual Studio.

Таким образом, может возникнуть необходимость воспользоваться проверенными методами вывода диагностических данных для того, чтобы понять, что происходит с вашей задачей и наблюдать за событиями в Просмотре событий (Event Viewer) на предмет ошибок при активации. Подробнее об этих методах можно узнать в материале "Отладка фоновой задачи" (http://msdn.microsoft.com/library/windows/apps/jj542415.aspx).

И, наконец, еще раз отмечу, что фоновые задачи не поддерживаются в имитаторе Visual Studio, как и динамические плитки, уведомления и многие другие механизмы, упомянутые в этой лекции. Вам нужно использовать, вместо этого, опции Локальный компьютер (Local Machine) или Удалённый компьютер (Remote Machine).

Что мы только что изучили (Ух ты!)

  • Обновления плиток – основной и дополнительных, обновления индикаторов событий, всплывающие уведомления, фоновые задачи, из которых приложение может отправлять обновления плиток и уведомления – это то, как приложение делает свой вклад в общий динамизм системы даже тогда, когда оно не исполняется.
  • Обновления и уведомления, конечно, могут быть отправлены из исполняющегося приложения, но существуют другие методы для доставки подобных обновлений, когда приложение не исполняется. Обновления могут быть запланированы для показа через некоторое время, приложение может настроить систему для периодического запроса некоего сервиса на предмет обновлений для плиток и индикаторов событий. Приложения так же могут настраивать push-уведомления, которые исходят от веб-сервиса и отправляются клиенту посредством Windows Push Notification Service (WNS).
  • Обновления плиток отправляют с использованием полезных данных XML на основе предопределенных шаблонов. Обычно данные включают в себя обновления и для квадратных, и для прямоугольных плиток, так как польозватель может выбрать, какая именно плитка будет отображаться. XML может ссылаться на изображения как из локальных, так и из удаленных источников, изображение не может быть больше, чем 1024x1024 пикселя, его размер не должен превышать 200 Кб.
  • Плитка в любое время может циклически отображать до пяти обновлений, каждое из которых может быть заменено отдельно от других.
  • Приложения, имеющие особое содержимое, которое пользователю может быть интересно прикрепить на Начальном экране в качестве дополнительной плитки, предоставляют команды Прикрепить (Pin) и Открепить (Unpin). Дополнительные плитки, при запуске приложения со специальными аргументами запуска, так же могут принимать обновления динамических плиток.
  • Индикаторы событий – это маленькие значки (глифы) или числа, которые могут отображаться на любой плитке. Обновления индикаторов событий отправляются с помощью тех же самых механизмов, что и обновления плиток, но работают они самостоятельно.
  • Всплывающие уведомления (toasts) – это уведомления, которые появляются для того, чтобы оповестить пользователя о новой информации, сделать напоминание и так далее. Они могут быть настроены для проигрывания звуков, установлены для повторения через заданный интервал, запланированы для появления в будущем. Как и дополнительные плитки, всплывающие уведомления, при активации, запускают приложение со специальными стартовыми аргументами.
  • Периодические обновления для плиток и индикаторов событий предусматривают передачу Windows URI веб-сервиса для вызова через выбранный интервал – от 30 минут до 24 часов. Периодические обновления – это самый простой и наименее затратный способ для обновления плитки с помощью веб-сервиса.
  • Push-уведомления для плиток, индикаторов событий, всплывающих уведомлений, и необработанные уведомления (содержащие любые необходимые данные), можно использовать для обновлений, привязанных к конкретному пользователю и производимых с высокой частотой. Их использование включает в себя создание веб-сервиса, который связывается с WNS для отправки подобных уведомлений по заданным URI каналов, процесс, который сложнее и затратнее, чем работа с периодическими обновлениями.
  • Фоновые задачи – это небольшие фрагменты кода, которые приложение настраивает на запуск при срабатывании определенного триггера, такого, как изменения в условиях подключения к сети, таймера, приём push-уведомления, и при обновлении программы. Однако приложениям никогда не следует зависеть от фоновых задач, так как они всегда находится под управлением пользователя.
  • Триггеры фоновых задач могут быть тонко настроены с использованием специальных условий для того, чтобы избежать исполнения задач тогда, когда в этом нет необходимости (например, тогда, когда нет подключения к Интернету).
  • Для работы некоторых триггеров требуется, чтобы приложение было добавлено на экран блокировки. Такие приложения сначала должны запросить доступ, что зависит от решения пользователя, и пользователь должен добавить приложение посредством Параметров ПК (PC Settings). Получив подобную привилегию, приложения могут отправлять обновления значков и текста на экран блокировки.
  • Посредством триггеров обслуживания, приложения могут настраивать задачи, которые исполняются периодически, когда устройство подключено к источнику питания.
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Алена Дьякова
Алена Дьякова
Россия, Тамбов, ТГТУ, 2009
жанна парак
жанна парак
Казахстан, Павлодарский облость