Поделиться через


Обзор необработанных уведомлений

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

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

Внимание

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

 

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

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

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

Все необработанные уведомления — это push-уведомления. Поэтому настройка, необходимая для отправки и получения push-уведомлений, применяется к необработанным уведомлениям, а также:

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

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

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

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

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

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

  • Заголовок типа контента HTTP должен иметь значение 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: tempconnected: это означает, что клиент 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.