Как отправлять push-уведомления на Windows Universal app
Мы делаем сервис для студентов, основной задачей которого является оповещение одногруппников о различных событиях. Для этого в первую очередь мы используем механизм push-уведомлений. Приложение, разработанное для iOS и Android, будет работать как на планшетах, так и на телефонах с этими операционными системами и механизм отправки push-уведомлений не зависит от класса устройтва. До недавнего времени для Windows и Windows Phone приходилось писать два раздельных приложения, однако теперь есть возможность создавать Universal Windows app — универсальные приложения, которые работают как на Windows 8.1, так и на Windows Phone 8.1. Мы решили не отставать от прогресса и разработали Universal Windows app, отправку push-уведомлений на которое мы также хотели сделать универсальной с точки зрения кода.Сервис Edusty работает на ASP .NET MVC WebAPI и располагается в Windows Azure. Изначально для отправки push-уведомлений мы решили использовать библиотеку PushSharp. Для iOS и Android она работает отлично, тоже самое касается Windows Phone 7.5/8.0, а также Windows 8.0/8.1. Когда же мы решили писать Universal Windows app, то столкнулись с проблемой отправки push-уведомлений на устройства с Windows Phone 8.1. Максимальная версия Windows Phone, которую PushSharp поддерживал на тот момент была 8.0. На устройства с Windows Phone 8.1 удавалось отправить push-уведомления только через класс, предназначеный для Windows 8.х, но живые плитки таким образом не работали. Так как быстрого обновления библиотеки мы не дождались, то было принято решение написать код отправки push-уведомлений самостоятельно.До прихода универсальных Windows приложений push-уведомления для Windows Phone отправлялись через Microsoft Push Notification Service (MPNS), тогда как для Windows 8.0 приложений был создан новый сервис Windows Notification Service (WNS). Универсальные приложения Windows принесли WNS и для Windows Phone 8.1. Тем самым, отправлять push-уведомления для обеих платформ стало возможным одним способом.
Формирование контента уведомленияУниверсальное приложение Windows поддерживает три типа уведомлений: toast (всплывающее уведомление), live tile (живая плитка), badge (бляха с цифрой).Push-уведомление формируется XML-разметкой, корневой тег которой определяет тип уведомления.
Отправка push-уведомления Теперь можно начинать отправлять push-уведомления. Для этого сформируем POST-запрос по Uri канала уведомлений, полученному с устройства клиента. В запрос необходимо добавить следующие заголовки: «X-WNS-Type», который может принимать 3 различных значения: «wns/toast», «wns/tile», «wns/badge», «ContentType» со значением «text/xml», «Authorization» со значением «Bearer ваш токен доступа». Добавляем в тело запроса сформированный ранее XML и отправляем. Для каждого типа уведомлений нужно делать отдельные запросы (токен доступа можно не перезапрашивать, если эти запросы идут подряд в течение короткого времени).Заключение Таким образом мы решили вопрос универсальной отправки push-уведомлений для устройств под управлением Windows 8.1 и Windows Phone 8.1. Через некоторое время после этого мы узнали, что в Windows Azure есть такой замечатльный сервис как Azure Notification Hub, в котором это всё уже реализовано, в том числе отправка для iOS, Android и других платформ. Поскольку у нас и так всё работает, мы решили пока не пользоваться этой функцией Windows Azure.Специально для лентяев var accessToken = GetAccessToken («Z9qiptL…», «ms-app://s-1–15…»);
var xml = @»
xml = @»
content = Encoding.UTF8.GetBytes (xml); SendWindowsPush (pushDevice, accessToken, content, «wns/tile»);
xml = @»
using (Stream requestStream = request.GetRequestStream ()) requestStream.Write (content, 0, content.Length); var result = request.GetResponse (); result.GetResponseStream ();
}