Доставка необработанных push-уведомлений на экран блокировки приложения с помощью WNS (HTML)

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

В этом разделе: как использовать службы Notification Services Windows (WNS) и необработанные push-уведомления для получения сетевых уведомлений в фоновом режиме в приложении среды выполнения Windows на экране блокировки. Здесь описана регистрация канала push-уведомлений и отправки их на ваш сервер, регистрация фоновой задачи для активации из необработанного push-уведомления, а также отправка push-уведомления в канал и активация фоновой задачи.

Что необходимо знать

Технологии

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

  • Следующая информация относится к приложениям среды выполнения Windows, подключенным к сети или поддерживающим работу в сети и зависящим от сетевых подключений, которые используют необработанные push-уведомления для постоянного поддержания таких подключений. Этот раздел применим к приложениям, написанным на JavaScript для Windows 8.1, Windows Phone 8.1 и Windows Server 2012 R2.

    Фоновое сетевое подключение с использованием необработанных push-уведомлений поддерживается приложениями на JavaScript и C++/XAML, а также приложениями, использующими платформу .NET Framework 4.5 и написанными на C#, VB.NET или управляемом C++. Подробнее о фоновых сетевых задачах, относящихся к приложениям на JavaScript, см. в разделе Поддержка приложения с помощью фоновых задач.

Инструкции

Доставка необработанных push-уведомлений в приложение на экране блокировки с помощью WNS

Приложения, использующие WNS, не обязательно должны выполняться в момент получения push-уведомлений, но можно создать у пользователя ощущение, что они выполняются. Например, приложение прогноза погоды может всегда показывать последние данные о погоде в обновляемой живой плитке. С помощью WNS можно выводить на экран уведомления о важных событиях. Хорошим примером уведомления на экране является сообщение о важных новостях. На любом устройстве с Windows 8.1, Windows Phone 8.1 или Windows Server 2012 R2 и подключением к Интернету можно использовать WNS. Уведомления WNS обычно доставляются сразу после отправки.

WNS обеспечивает работу живой плитки и уведомлений на начальном экране Windows 8,1, а также может использоваться в сценариях с подключением в реальном времени (мгновенные сообщения, VoIP и электронная почта). Если приложение, использующее WNS, добавляется на экран блокировки, то его можно использовать для активации фоновой задачи. Фоновая задача — это часть кода приложения, которая выполняется при переходе приложения в фоновый режим (когда оно больше не находится на переднем плане).

Вот несколько примеров фоновых задач, которые могут активироваться уведомлением WNS:

  • Вызов API индикаторов событий, чтобы увеличить значение индикатора для почтового приложения на экране блокировки, когда приходит новое сообщение.
  • Вызов API всплывающих уведомлений для приложения VoIP, чтобы сообщить пользователю о входящем телефонном звонке.

Push-уведомления бывают четырех типов:

  • обновление плитки;
  • обновление индикатора событий;
  • обновление всплывающего уведомления;
  • необработанное уведомление.

Первые три типа push-уведомлений можно использовать в любых приложениях среды выполнения Windows, выполняемых на переднем плане. Необработанные push-уведомления от WNS могут получать только приложения на экране блокировки. Когда приходит необработанное push-уведомление от WNS, необработанные уведомления позволяют приложениям на экране блокировки выполнить код в виде фоновой задачи, даже если приложение не находится на переднем плане.

Большинству приложений не нужен экран блокировки, и они могут просто использовать WNS. Любые приложения могут с помощью WNS обновлять плитку и индикаторы событий, а также показывать всплывающие уведомления при работе на переднем плане. Использование WNS в приложении на экране блокировки — это более сложный вариант использования WNS для подсветки живой плитки и отображения всплывающих уведомлений. Перед использованием WNS на экране блокировки разработчикам следует ознакомиться с документацией по WNS, доступной в библиотеке MSDN. Подробнее об этом см. в разделе Обзор push-уведомлений.

Для отправки push-уведомлений в WNS вам понадобится секретный ключ, который предоставляется Магазином Windows. Подробнее о проверке подлинности в WNS и настройке приложения см. в разделе Проверка подлинности с помощью службы push-уведомлений Windows (WNS).

Далее показано, как отправить необработанное push-уведомление в приложение на экране блокировки.

  • Зарегистрируйте канал push-уведомлений WNS и направьте его на свой сервер.
  • Отправьте по каналу уведомлений необработанное push-уведомление правильного формата в WNS.
  • Напишите код фоновой задачи, которая активируется необработанным push-уведомлением.

Необработанные push-уведомления доставляются в клиентское приложение через сервер приложений разработчика. Для этого полезные XML-данные правильного формата направляются командой HTTP PUSH в канал уведомлений. Канал уведомлений создается клиентским приложением, направляется на сервер приложений и используется для отправки push-уведомления. Для каждого экземпляра приложения в учетной записи пользователя в Windows 8.1 используется уникальный канал уведомлений.

JJ679947.wedge(ru-ru,WIN.10).gifРегистрация канала push-уведомлений и направление его на сервер

  1. Зарегистрируйте канал, вызвав один из методов CreatePushNotificationChannelForApplicationAsync класса PushNotificationChannelManager в пространстве имен Windows.Networking.PushNotifications.

    Для приложения будет создан канал push-уведомлений, который будет работать следующим образом.

    https://db3.notify.windows.com/?token=AQQAAADX3Wr8MA%2fCoZk4n1CmR5ZU7tdic6ksvG4TQq1tiyZtpetjfzuPHSjvliEeqaqJcPuo1jrVnbyCZvnbuU%2byLvZNDONTgUNu6lavpl5EGtWx7iQgpGkyHLbZeosxioQ42Cg%3d
    
  2. Отправьте канал на сервер. Срок действия каналов составляет 30 дней, поэтому следуйте следующим рекомендациям.

    • Регистрируйте новый канал push-уведомлений при каждом запуске приложения и отправляйте его на сервер, заменяя канал, который ранее был связан с пользователем.
    • Для локального компьютера, который всегда подключен к сети питания, регулярно выполняйте фоновую задачу для обновления канала до истечения срока действия. Такая задача называется таймером обслуживания.

JJ679947.wedge(ru-ru,WIN.10).gifРегистрация фоновой задачи, которая активируется необработанным push-уведомлением

  1. Чтобы создать фоновую задачу, которая выполняется после получения необработанного push-уведомления, необходимо указать исходный файл JavaScript, содержащий код, который будет активироваться фоновой задачей. Для этого необходимо задать в манифесте приложения исходный файл для фоновой задачи. Манифест приложения должен содержать имя исходного файла JavaScript для фоновой задачи.

    В следующем образце в манифест приложения под элементом <Application> добавляются расширения для фоновой задачи PushNotifyTask.

      <Extensions>
        <Extension Category="windows.backgroundTasks" StartPage="js\backgroundTask.js">
          <BackgroundTasks>
            <Task Type="pushNotification" />
          </BackgroundTasks>
        </Extension>
      </Extensions>
    
  2. Приложению нужно открыть канал для необработанных push-уведомлений.

    В следующем примере показано, как это сделать.

    
        // Open the channel. See the "Push and Polling Notifications" sample for more detail
        function openNotificationsChannel() {
            var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();
            WinJS.log && WinJS.log("Opening a channel...", "sample", "status");
            return channelOperation.then(function (newChannel) {
                WinJS.log && WinJS.log("Channel request succeeded!", "sample", "status");
                document.getElementById("scenario1ChannelOutput").value = newChannel.uri;
                SdkSample.channel = newChannel;
            },
                function (error) {
                    WinJS.log && WinJS.log("Could not create a channel (error number: " + error.number + ")", "sample", "error");
                }
            );
        }
    
  3. Приложение также должно зарегистрировать фоновую задачу, которая будет активироваться при получении необработанного push-уведомления.

    В следующем примере показано, как зарегистрировать фоновую задачу для необработанного push-уведомления.

        // Register the background task for raw notifications
        //
        function registerBackgroundTask() {
            var taskBuilder = new background.BackgroundTaskBuilder();
            var trigger = new background.PushNotificationTrigger();
            taskBuilder.setTrigger(trigger);
            taskBuilder.taskEntryPoint = sampleTaskEntryPoint;
            taskBuilder.name = sampleTaskName;
    
            try {
                var task = taskBuilder.register();
                task.addEventListener("completed", backgroundTaskComplete);
                WinJS.log && WinJS.log("Background task registered", "sample", "status");
            } catch (e) {
                WinJS.log && WinJS.log("Registration error: " + e.message, "sample", "error");
                unregisterBackgroundTask();
            }
        }
    
        function unregisterBackgroundTask() {
            var iter = background.BackgroundTaskRegistration.allTasks.first();
            while (iter.hasCurrent) {
                var task = iter.current.value;
                if (task.name === sampleTaskName) {
                    task.unregister(true);
                    return true;
                }
                iter.moveNext();
            }
            return false;
        }
    
  4. Нужно также ввести код для функции, которая выполняется при запуске фоновой задачи.

    Подробнее о написании кода фоновой задачи для получения фоновых сетевых уведомлений, использующих необработанные push-уведомления, см. в разделе Написание кода фоновой задачи для необработанных push-уведомлений.

    Примечание  

    В фоновой задаче нельзя ссылаться на элементы пользовательского интерфейса приложения, поскольку они не работают. Это означает, что никакие обратные вызовы для сетевого транспорта не должны быть связаны с контейнером с одним потоком пользовательского интерфейса. Фоновые задачи не должны получать доступ к какому-либо объекту, связанному с контейнером с одним потоком пользовательского интерфейса (который также называют контейнером с одним потоком приложения).

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

     

Необработанные push-уведомления работают аналогично уведомлениям на плитках и индикаторам событий. Главное отличие — отсутствие в полезных данных необработанных push-уведомлений атрибутов, которые обновляют компоненты пользовательского интерфейса Windows 8.1. Все полезные данные необработанного push-уведомления состоят из контекста, который, когда активируется фоновая задача, передается непосредственно в приложение. Приложение должно распознавать формат контекстных данных, отправленных сервером.

Перед отправкой необработанного push-уведомления с сервера необходимо:

JJ679947.wedge(ru-ru,WIN.10).gifОтправка необработанного push-уведомления в канал и активация фоновой задачи

  1. убедиться, что приложение зарегистрировано в Магазине Windows и имеет закрытый ключ и ИД безопасности пакета;

  2. Написать на сервере приложений код для проверки подлинности в WNS с использованием закрытого ключа и ИД безопасности пакета перед отправкой push-уведомления с сервера;

  3. Правильно создать необработанное push-уведомление WNS и выполнить HTTP-команду POST в канале уведомлений, который получен ранее от приложения среды выполнения Windows. HTTP-команда POST должна включать ряд дополнительных HTTP-заголовков:

    • X-WNS-Type=wns/raw
    • Content-Type=application/octet-stream
    • Authorization=<строка "Bearer", пробел и маркер, полученный на этапе проверки подлинности>

    Тело команды HTTP POST должно включать любой контекст, который вы хотите предоставить клиентскому приложению, когда оно запускает фоновую задачу, инициированную получением необработанного push-уведомления. Максимальный объем полезных данных необработанного уведомления составляет 5 КБ.

    Когда клиент получает уведомление, активируется фоновая задача, а полезные данные передаются в код фоновой задачи и становятся доступны в нем.

Предыдущие шаги

Подробнее о том, как создать приложение на экране блокировки для получения фоновых сетевых уведомлений, использующих необработанные push-уведомления: Краткое руководство. Создание приложения на экране блокировки, использующего фоновые необработанные push-уведомления.

Последующие шаги

Подробнее о написании кода фоновой задачи для получения фоновых сетевых уведомлений, использующих необработанные push-уведомления, см. в разделе Написание кода фоновой задачи для необработанных push-уведомлений.

Подробнее о руководстве и контрольных списках для использования необработанных push-уведомлений:

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

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

Другие ресурсы

Добавление поддержки сети

Фоновая работа в сети

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

Проверка подлинности с помощью службы push-уведомлений Windows (WNS)

Доставка необработанных push-уведомлений в приложение на экране блокировки с помощью WNS

Написание фоновой задачи для необработанных push-уведомлений

Обзор экрана блокировки

Обзор push-уведомлений

Как создать на экране блокировки приложение, использующее необработанные push-уведомления в фоновом режиме

Поддержка приложения с помощью фоновых задач

Диагностика и отладка сетевых подключений

Ссылки

HttpClient

HttpClientHandler

IXMLHTTPRequest2

System.Net.Http

Windows.ApplicationModel.Background

Windows.Networking.BackgroundTransfer

Windows.Networking.PushNotifications

Windows.Networking.Sockets

Windows.Web.Http

Примеры

Пример фоновой задачи

Примеры приложений на экране блокировки

Пример периодических и push-уведомлений со стороны

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