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

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

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

Важно!

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

 

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

В качестве примера приложения, которое выиграет от использования необработанных уведомлений, рассмотрим теоретическое приложение для совместной работы с документами. Представьте, что два пользователя одновременно редактируют один документ. Облачная служба, в которой находится общий документ, может использовать необработанные уведомления, чтобы сообщить пользователю о внесенных другим пользователем изменениях. В необработанных уведомлениях не обязательно будут содержаться изменения документа; вместо этого они будут подавать сигнал копии приложения пользователя для того, чтобы оно связалось с центральным расположением и синхронизировало доступные изменения. С помощью необработанных уведомлений приложение и его облачная служба могут сэкономить затраты ресурсов на поддержание постоянных подключений в течение того времени, пока открыт документ.

Как работают необработанные уведомления?

Все необработанные уведомления являются push-уведомлениями. Следовательно, настройка, необходимая для отправки и получения push-уведомлений, также требуется и для необработанных уведомлений.

  • Необходимо иметь действительный канал WNS для отправки необработанных уведомлений. Подробнее о получении канала push-уведомлений см. в разделе Запрос, создание и сохранение канала уведомлений.
  • Вы должны включить возможность Интернет в манифесте приложения. Этот параметр находится на вкладке Возможности под именем Интернет (клиент) в редакторе манифестов Microsoft Visual Studio. Дополнительные сведения см. в разделе Возможности.

Текст уведомления является форматом, определяемым приложением. Клиент получает данные в виде строки, оканчивающейся нулевым символом (HSTRING), которая понятна только приложению.

Когда клиент работает автономно, необработанные уведомления будут кэшироваться WNS, только если в уведомление включен заголовок X-WNS-Cache-Policy. Но как только устройство снова подключится к сети, кэшироваться и доставляться будет только одно необработанное уведомление.

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

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

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

  • Заголовок HTTP типа содержимого (Content-Type) должен иметь вид "application/octet-stream".
  • Заголовок HTTP X-WNS-Type должен иметь вид "wns/raw".
  • Текст уведомления может содержать любые полезные данные строки размером менее 5 КБ, но не должен быть пустой строкой.

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

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

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

Существует два способа получения необработанных уведомлений вашим приложением:

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

  • Если приложение запущено, событие доставки уведомлений получает приоритет перед фоновой задачей, и приложение обработает уведомление при первой же возможности.
  • Указав для свойства события PushNotificationReceivedEventArgs.Cancel значение true, обработчик событий доставки уведомлений может запретить передачу необработанного уведомления фоновой задаче после завершения работы обработчика. Если для свойства Cancel указано значение false или значение не задано (значением по умолчанию является false), необработанное уведомление активирует фоновую задачу после того, как обработчик событий доставки уведомлений выполнит свою работу.

События доставки уведомлений

Ваше приложение может использовать событие доставки уведомления (PushNotificationReceived), чтобы получать необработанные уведомления во время использования приложения. Когда облачная служба отправляет необработанное уведомление, запущенное приложение может получить его, обработав событие доставки уведомления в URI канала.

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

  • Приложение информирует облачную службу: приложение может связаться со своей службой, чтобы уведомить ее о работе на переднем плане. Недостатком данного способа является то, что приложение может начать связываться со службой очень часто. Тем не менее его преимущество заключается в том, что служба всегда будет знать, когда приложение готово получать входящие необработанные уведомления. Другим преимуществом является то, что при подключении приложения к своей службе она может отправлять необработанные уведомления непосредственно этому экземпляру приложения, а не рассылать их широко.

  • Ответы облачной службы на ответные сообщения WNS: служба вашего приложения может использовать информацию X-WNS-NotificationStatus и X-WNS-DeviceConnectionStatus, возвращаемую WNS, чтобы определить, когда следует прекратить отправку необработанных сообщений приложению. Когда ваша служба отправляет уведомление по такому каналу, как HTTP POST, она может получить в качестве ответа одно из следующих сообщений:

    • X-WNS-NotificationStatus: (пропущено): это означает, что уведомление не было получено клиентом. Разумно предположить, что ответ пропущен означает, что приложение на устройстве пользователя больше не выполняется на переднем плане.
    • X-WNS-DeviceConnectionStatus: (отключено) или X-WNS-DeviceConnectionStatus: (временно подключено): это означает, что клиент Windows не имеет соединения с WNS. Обратите внимание, что для получения этого сообщения от WNS вам необходимо запросить его, установив заголовок X-WNS-RequestForStatus в HTTP POST уведомления.

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

    Отметим, что вы не должны полагаться на X-WNS-NotificationStatus для определения успешной доставки уведомления клиенту.

    Подробнее см. в разделе Запросы на обслуживание и заголовки ответа push-уведомлений.

Фоновые задачи, инициируемые необработанными уведомлениями

Важно!

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

 

Фоновая задача должна быть зарегистрирована с PushNotificationTrigger. Если эта регистрация отсутствует, при получении необработанного уведомления задача не будет выполняться.

Инициируемая необработанным уведомлением фоновая задача позволяет облачной службе вашего приложения связываться с ним, даже когда приложение не выполняется (она может инициировать запуск приложения). Это происходит без необходимости для приложения поддерживать постоянное подключение. Необработанные уведомления являются единственным типом уведомлений, который может инициировать фоновые задачи. Но в то время как всплывающие уведомления, уведомления на плитках и push-уведомления через индикатор событий не могут инициировать фоновые задачи, фоновые задачи, инициированные необработанными уведомлениями, могут обновлять плитки и вызывать всплывающие уведомления с помощью локальных вызовов API.

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

Чтобы использовать необработанное уведомление для запуска фоновой задачи, ваше приложение должно выполнить следующие задачи.

  1. Запросить разрешение на выполнение задач в фоновом режиме (которое пользователь может отозвать в любое время) с помощью BackgroundExecutionManager.RequestAccessAsync.
  2. Реализация фоновой задачи. Дополнительные сведения см. в статье Поддержка приложения с помощью фоновых задач.

Ваша фоновая задача затем вызывается в ответ на PushNotificationTrigger при каждом получении необработанного уведомления для вашего приложения. Фоновая задача интерпретирует полезные данные для этого приложения в необработанном уведомлении и выполняет действия согласно этим данным.

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

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

Для получения подробной информации скачайте Пример необработанных уведомлений для Windows 8.1 и Пример push-уведомлений и регулярных уведомлений для Windows 8.1 и используйте их исходный код в приложении для Windows 10.