Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете открыть универсальный идентификатор ресурса канала (URI), по которому приложение может получать push-уведомления. Затем канал можно отправить на сервер, который использует его для отправки push-уведомлений, и закрыть его, когда он больше не нужен. Канал — это уникальный адрес, представляющий одного пользователя на одном устройстве для определенного приложения или вторичной плитки.
При каждом запуске приложения необходимо запросить новый канал и обновить облачный сервер при изменении URI. Дополнительные сведения см. в разделе "Примечания".
Это важно
Каналы уведомлений автоматически истекают через 30 дней.
Что нужно знать
Технологии
- Среда выполнения Windows
Предпосылки
- Знакомство с понятиями, требованиями и операцией служб push-уведомлений Windows (WNS). Эти сведения рассматриваются в обзоре служб push-уведомлений Windows.
Инструкции
Шаг 1. Добавьте объявления пространства имен
Windows.UI.Notifications включает тостовые API.
using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;
using Windows.Networking.PushNotifications;
Шаг 2. Запрос URI канала
В этом примере запрашивает URI канала. Запрос выполняется на клиентской платформе уведомлений, которая, в свою очередь, запрашивает URI канала из WNS. По завершении запроса возвращаемое значение представляет собой объект PushNotificationChannel, содержащий универсальный код ресурса (URI).
PushNotificationChannel channel = null;
try
{
channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
}
catch (Exception ex)
{
// Could not create a channel.
}
Шаг 3. Отправка URI канала на сервер
URI канала упаковается в HTTP-запрос POST и отправляется на сервер.
Это важно
Эти сведения следует отправлять на сервер в безопасном режиме. Приложению необходимо пройти проверку подлинности с сервером при передаче URI канала. Зашифруйте сведения и используйте безопасный протокол, например HTTPS.
String serverUrl = "http://www.contoso.com";
// Create the web request.
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
byte[] channelUriInBytes = System.Text.Encoding.UTF8.GetBytes("ChannelUri=" + channel.Uri);
// Write the channel URI to the request stream.
Stream requestStream = await webRequest.GetRequestStreamAsync();
requestStream.Write(channelUriInBytes, 0, channelUriInBytes.Length);
try
{
// Get the response from the server.
WebResponse response = await webRequest.GetResponseAsync();
StreamReader requestReader = new StreamReader(response.GetResponseStream());
String webResponse = requestReader.ReadToEnd();
}
catch (Exception ex)
{
// Could not send channel URI to server.
}
Замечания
Запрос каналов
При каждом вызове приложения необходимо запросить новый канал, используя следующую логику:
- Запрос канала.
- Сравните новый канал с предыдущим каналом. Если канал тот же, вам не нужно предпринимать никаких дальнейших действий. Обратите внимание, что это требует, чтобы ваше приложение сохраняло канал локально каждый раз, когда успешно отправляет его в вашу службу, чтобы у вас был канал для последующего сравнения.
- Если канал изменился, отправьте новый канал в веб-службу. Включите логику обработки ошибок, которая всегда отправляет новый канал в следующих случаях:
- Ваше приложение никогда не отправляло канал в веб-службу раньше.
- Последняя попытка приложения отправить канал в веб-службу не была успешной.
Различные вызовы метода CreatePushNotificationChannelForApplicationAsync не всегда возвращают другой канал. Если канал не изменился с момента последнего вызова, ваше приложение должно сохранять усилия и интернет-трафик, не перенаправляя этот же канал в службу. Приложение может одновременно иметь несколько допустимых URI каналов. Так как каждый уникальный канал остается допустимым до истечения срока действия, то при запросе нового канала нет вреда, так как он не влияет на время истечения срока действия всех предыдущих каналов.
Запрашивая новый канал при каждом вызове приложения, вы максимально повышаете вероятность постоянного доступа к допустимому каналу. Это особенно важно, если это жизненно важно для вашего плитки или всплывающего сценария, что содержимое всегда будет жить. Если вы обеспокоены тем, что пользователь может не запускать приложение более одного раза в 30 дней, можно реализовать фоновую задачу для регулярного выполнения кода запроса канала.
Обработка ошибок в запросах канала
Вызов метода CreatePushNotificationChannelForApplicationAsync может завершиться ошибкой, если Интернет недоступен. Для этого добавьте логику повторных попыток в код, показанный на шаге 2. Мы рекомендуем три попытки с 10-секундной задержкой между каждой неудачной попыткой. Если все три попытки завершаются ошибкой, приложение должно дождаться следующего запуска приложения, чтобы повторить попытку.
Закрытие каналов
Приложение может немедленно остановить доставку уведомлений во всех каналах, вызвав метод PushNotificationChannel.Close . Хотя это не будет распространено для вашего приложения, могут возникнуть определенные сценарии, в которых вы хотите остановить всю доставку уведомлений в приложение. Например, если ваше приложение имеет концепцию учетных записей пользователей и пользователь выходит из этого приложения, разумно ожидать, что плитка больше не отображает личную информацию пользователя. Чтобы успешно очистить плитку содержимого и остановить доставку уведомлений, сделайте следующее:
- Остановите все обновления тайлов, вызвав метод PushNotificationChannel.Close на любом из ваших каналов уведомлений, которые доставляют тайлы, тосты, индикаторы или сырые уведомления пользователю. Вызов метода Close гарантирует, что никакие дополнительные уведомления для этого пользователя не могут быть доставлены клиенту.
- Снимите содержимое плитки, вызвав метод TileUpdater.Clear , чтобы удалить данные предыдущего пользователя из плитки.
Windows developer