Запрос, создание и сохранение канала уведомлений (HTML)

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

Примечание  Не используете JavaScript? См. раздел Как запросить, создать и сохранить канал уведомлений (XAML).

 

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

Рекомендуется запрашивать новый канал при каждом запуске программы и обновлять сервер облака при изменении универсального кода ресурса (URI). Подробнее см. в разделе примечаний.

Важно  Срок действия каналов уведомлений автоматически истекает через 30 дней.

 

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

Технологии

  • Windows Runtime

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

  • Хорошее знание принципов функционирования плиток и их уведомлений, а также языка XML. Предполагается, что вы также знаете, как создать базовое приложение Магазина Windows на JavaScript с помощью API среды выполнения Windows.
  • Необходимо понимание push-уведомлений, а также знание понятий, требований и способов использования служб push-уведомлений Windows (WNS). Подробнее об этом см. в разделе Обзор служб push-уведомлений Windows (WNS).

Инструкции

Этап 1: Запрос универсального кода ресурса (URI) канала

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


var channel;
var pushNotifications = Windows.Networking.PushNotifications;
var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();

return channelOperation.then(function (newChannel) {
    channel = newChannel;
    // Success. The channel URI is found in newChannel.uri.
    },
    function (error) {
        // Could not create a channel. Retrieve the error through error.number.
    }
);

Этап 2: Отправка универсального кода ресурса (URI) серверу

URI канала упаковывается в запрос HTTP POST и отправляется на сервер.

Важно  Эту информацию необходимо отправлять на сервер безопасным способом. Рекомендуется требовать у приложения проверки подлинности на сервере при передаче URI канала. Зашифруйте информацию и воспользуйтесь защищенным протоколом, таким как HTTPS.

 


var serverUrl = "https://www.contoso.com";

var xhr = new WinJS.xhr({
        type: "POST", 
        url: serverUrl,
        headers: {"Content-Type": "application/x-www-form-urlencoded"},
        data: "channelUri=" + channel.uri
}).then(function (req) {
        // Channel URI successfully sent to server. Retrieve the response from req.response.
    },
    function (req) {
        // Could not send channel URI to server. Retrieve the error through req.statusText.
    }
);

Замечания

Запрос каналов

Новый канал следует запрашивать при каждом включении вашего приложения, используя для этого следующий алгоритм:

  1. Запросите канал.
  2. Сравните новый канал с предыдущим. Если канал тот же, дальнейшие действия не требуются. Обратите внимание, что ваше приложение должно сохранять канал локально каждый раз, когда приложение отправляет его в вашу службу, чтобы его можно было использовать для сравнения в дальнейшем.
  3. Если канал изменился, отправьте новый канал в веб-службу. Включите алгоритм обработки ошибок, который всегда отправляет новый канал в следующих случаях:
    • Ваше приложение до этого никогда не отправляло канал в веб-службу.
    • Последняя попытка приложения отправить канал в веб-службу не увенчалась успехом.

Разные вызовы метода createPushNotificationChannelForApplicationAsync не всегда возвращают разные каналы. Если канал не был изменен с момента последнего вызова, ваше приложение с целью экономии производительности и трафика Интернета не должно отправлять тот же самый канал в службу. Приложение может иметь несколько допустимых URI каналов одновременно. Поскольку каждый уникальный канал остается действительным до истечения срока его действия, можно без проблем запросить новый канал — это не повлияет на время действия предыдущих каналов.

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

Обработка ошибок в запросах каналов

Сбой вызова метода createPushNotificationChannelForApplicationAsync может происходить при отсутствии доступа к Интернету. Чтобы исправить это, попробуйте добавить логику повтора в код, показанный в шаге 2. Рекомендуется выполнить три попытки с задержкой в 10 секунд после каждой неудачной попытки. Если все три попытки окажутся неудачными, приложение должно ждать, когда пользователь запустит его вновь, и тогда повторить попытку.

Закрытие каналов

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

  1. Остановите все обновления плиток, вызвав метод PushNotificationChannel.close по любому из каналов уведомлений, доставляющих пользователю уведомления на плитках, всплывающие уведомления, уведомления индикатора событий или необработанные уведомления. Вызов метода close обеспечивает прекращение доставки уведомлений для этого пользователя на клиентское устройство.
  2. Сбросьте содержимое плитки, вызвав метод TileUpdater.clear для удаления из файла данных прежнего пользователя.

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

Push-уведомления и периодические уведомления

Общие сведения о службах push-уведомлений Windows (WNS)

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

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

Управление окончанием срока действия канала и его обновлением

Руководство и контрольный список для push-уведомлений

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