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

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

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

Important

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

 

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

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

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

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

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

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

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

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

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

Отправка необработанного уведомления аналогична отправке 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-уведомлений

Фоновые задачи, запускаемые сырыми уведомлениями

Important

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

 

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

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

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

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

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

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

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

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

В этой статье UWP описывается устаревшее PushNotificationTrigger поведение фоновой задачи. Сведения о текущей регистрации канала Windows App SDK и активации необработанных push-уведомлений на переднем или фоновом плане посредством PushNotificationManager см. в примере push-уведомлений Windows App SDK. В текущем примере не используется модель регистрации фоновых задач UWP PushNotificationTrigger .