Работаем с уведомлениями в Windows Phone 8.1

4f441811246740718e4d9068c9da2ae3.PNGПривет всем!

Сегодня поговорим о новых возможностях, касающихся уведомлений в Windows/Windows Phone 8.1. Обсудим какие типы уведомлений существуют, каким способом их организовать в своем приложении, а также отметим одну из главных новинок для Windows Phone устройств — Центр уведомлений (Action Center).

УведомленияУведомления в Windows Phone это важный способ взаимодействия приложения с пользователем. Они помогают пользователю узнать об обновлении информации в приложении, оповещают его о действиях других пользователей или напоминают о необходимых активностях.Уведомления могут приходить от какой-либо службы или же локально от приложения.

В Windows/Windows Phone 8.1 существует несколько способов отображения уведомлений:

83d34e365fef476c8a6731118352cb56.png

Пользователь может получить уведомление в виде информации на плитке приложения или при помощи маленького черного значка.

Подробнее о возможностях живых плиток можно узнать из следующего курса.

В дополнение к этому доступны и следующие способы отображения уведомлений:

Toast — уведомления — при получении этого типа уведомления в верхней части экрана устройства появляется текстовое оповещение. При этом на текущий момент приложение может быть неактивным. Нажав на это сообщение, можно быстро переключиться к соответствующему приложению. Raw — уведомления — при этом типе уведомления содержимое передается непосредственно приложению. Приложение обрабатывает содержимое уведомления по собственному алгоритму. Эти уведомления не имеют собственного UI. Как и остальные push-уведомления, WNS сервис доставляет их к приложению из облачной или любой другой внешней службы. Toast — уведомления Для работы с Toast- уведомлениями необходимо подключить этот способ отображения уведомлений в манифесте приложения. Мы не сможем посылать Toast- уведомления, пока не укажем, что приложение может их отправлять.К счастью, это очень просто — переключить соответствующую настройку в Package.appxmanifest в положение «Yes»: a45b3efaafb14d6c990d536d5bd1c72f.png

Отправляем Toast-уведомление, используя следующий XML код:

headline text body text Заметим, что эта XML схема стандартна для любого вида уведомлений.При нажатии на Toast — уведомление пользователь сможет запустить приложение.Для платформы Windows доступно целых 8 шаблонов отображения Toast-уведомлений, но на Windows Phone 8.1 они имеют только один фиксированный вид, независимо от указанного разработчиком шаблона:

cb154cc98b0f495b8fabbebb48ff98ef.png

Однако логика работы Toast — уведомлений на обеих платформах будет одинакова.

Способы реализации уведомлений Для всех Windows устройств существуют несколько способов реализации механизма уведомлений: Уведомления по расписанию (Scheduled). Такие уведомления будут стоять в очереди задач системы и запускаться в заданное фиксированное время; 471a1f1c118a45d7ba98f7155c7d07ab.png

Как это работает: Внутри приложения используется API планировщика уведомлений, который обращается к расписанию очереди системы. Система проверяет очередь и в указанное для уведомления время отправляет обновление на плитку или Toast.

var scheduleToast = new ScheduledToastNotification ( xmlDoc, DateTimeOffset.UtcNow + TimeSpan.FromDays (1.0)); var toastNotify = ToastNotificationManager.CreateToastNotifier (); toastNotify.AddToSchedule (scheduleToast); При помощи класса ScheduledToastNotification создаем объект, отвечающий за уведомление по расписанию, в котором, используя ранее продемонстрированный XML код, указываем содержание и устанавливаем время в которое необходимо отобразить уведомление. А с помощью класса ToastNotificationManager создаем объект toastNotify, для которого реализована функция добавления уведомления в очередь системы AddToSchedule ().

Периодические обновления (Periodic) — добывают данные для уведомлений из указанного URL и отображают их с указанной периодичностью — раз в час/в 6 часов/в 12 часов; 1992b0d1278e4c20ba42c7bb49dd6277.png

Как это работает: В приложении обращаемся к службам Windows System Services, указывая что нам необходимы уведомления с периодичностью в 0.5/6/12 часов. Эти службы в свою очередь связываются с API обновлений для плиток и значков определенное количество раз, при помощи HTTP — запроса получают XML данные уведомления, которые можно передать плитке или значку.

var periodic = TileUpdateManager.CreateTileUpdaterForApplication (); Uri myTileFeed = new Uri («http://mysite.com/tileRSS.xml»); periodic.StartPeriodicUpdate (myTileFeed, PeriodicUpdateRecurrence.Hour); С помощью класса TileUpdateManager создаем объект periodic, обеспечивающий периодическое обновление плитки. Далее создаем URI канал myTileFeed, в который будут транслироваться данные для уведомления в формате xml. Объект типа PeriodicUpdateRecurrence позволит установить необходимую периодичность уведомлений, поступающих из канала myTileFeed.Существует более простой способ реализации периодических уведомлений, используя настройки файла Package.appxmanifest:

02ecf61669424835b69c6f8a09d2e189.png

Необходимо только выбрать периодичность и указать URI канал.

Локальные уведомления приложения (Local); d0be7417b5dc4fd197581262248d39c5.png

Как это работает: Приложение использует для уведомлений обновления плиток и значков, в фоном режиме уже обращается к API Toast — уведомлений.

BadgeNotification newBadge = new BadgeNotification (badgeDoc); BadgeUpdater update = BadgeUpdateManager.CreateBadgeUpdaterForApplication (); update.Update (newBadge); Создаем значок с помощью объекта типа BadgeNotification и функцией Update (), реализованной для объекта типа BadgeUpdater, мгновенно обновляем значок.

Ниже представлена таблица возможности использования способов реализации уведомлений в зависимости от их типа:

59214cc4880747f1a1d4fba45cd67791.png

Не оставим без внимания последний способ реализации уведомлений — push-уведомления. Рассмотрим его подробнее.

Push уведомления До текущего релиза для подобного типа уведомлений в Windows 8.0 и Windows Phone 8.0 использовались два различных сервиса: служба Microsoft Push Notification Services (MPNS) для телефонов и Windows Notification Services (WNS) для остальных устройств на Windows.Однако, теперь Push-уведомления для любых устройств Windows/Windows Phone 8.1 реализуются через службу WNS.

Какие преимущества получат разработчики, используя WNS:

Одинаковый подход для любых устройств на Windows; Единый процесс регистрации приложений для push-уведомлений; Единый шаблон push-уведомлений для Windows/Windows Phone 8.1 платформ. Как это работает:

Windows Phone 8.1 приложение связывается с Windows Notification Client платформой для получение URI канала приложения, который уникален для каждого устройства и приложения; Далее URI канал необходимо зарегистрировать в облачном сервисе; Облачный сервис проводит аутентификацию WNS сервиса, предоставляя свои данные (пакет SID и секретный ключ), и предоставляет доступ, который позволяет сервису отправлять уведомления. Теперь можно отправлять push –уведомления с помощью этой службы; Облачная служба, в соответствующее время посылает push-уведомление службе WNS; WNS связывается с Windows Notification Client платформой, которая производит обновление любого из заданных типов уведомлений.7f3a69a8d59b4df4b8dcfd5884e1b9a9.png

Подробнее о работе WNS службы можно прочитать здесь.

Ниже реализуем механизм push-уведомлений в приложении по шагам, выполняя ряд необходимых действий:

Для начала произведем все необходимые приготовления в Центре разработки, используя свой аккаунт разработчика:

bc05390717dc462a902fd05baa492303.png

Нажимаем Submit App и резервируем имя предполагаемого приложения:

437bc4af85c14364850207974758413d.png

Заполним App Info:

db9543f195e444a3a81d1f8e9ece5bd4.png

Спустимся ниже и в More Options найдем необходимые для WNS настройки:

63387baf7e8e45a5b686ba54dfea4491.png

Переходим по ссылке here:

25998ce19c1349009638e9eab0df18b9.png

И получаем все необходимые данные для дальнейшей работы.

В Visual Studio создадим тестовое универсальное приложение:

8841a818318d4ff280506b0e59a580c6.png

В обозревателе решений нажимаем правой кнопкой мыши на проект для Windows Phone и выбираем Associate App with the Store:

92319b655a394889a8d8705cad719fd8.png

Запустится мастер связывания:

2cf289e5691a476a990bc5c21258bc82.png

Авторизуемся, используя аккаунт разработчика и выберем приложение, которые мы регистрировали до этого:

9bdf6f22d68d402c80638841eb1074c5.png

Все данные заполнились автоматически:

3acbb17bcc454c1b89625e7f8c0a8fc0.png

После клика на Associate, в проекте Windows Phone будет создан Package.StoreAssociation.xml файл.

Авторизуемся в панели управления Azure и нажимаем кнопку Создать:

2e4bafb0b73c493790334dc1a316fe8e.png

Нажимаем на Службы Приложений → Service Bus → Концентратор уведомлений

c83fd9c1683f4dbcafceae3df3dd635e.png

Нажимаем на Быстро создать и заполняем необходимые данные:

22a26402274b419481c22f950a6b4036.png

Создаем новый концентратор уведомлений (Notification Hub):

8e2837f92f57487c8f65142d587d3224.png

Нажимаем на только что созданное пространство имен TestDemoPushHub-ns и находим только что созданный концентратор уведомлений:

fd6f265decbd46b2988bfe2e9b034ebe.png

Перейдем в настройки концентратора уведомлений, где заполним отмеченными ранее данными необходимые поля:

1a4d7910172642dcaaa7af1f1d1fbd06.png

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

504c1665fe91458c91111a835dd165d2.png

Эту информацию можно получить при нажатии на кнопку «Сведения о подключении»:

21391b688e6c4e90b518896bb790b499.png

Подключаем свое приложение к концентратору уведомлений.

Правой кнопкой мыши нажимаем на решение в Visual Studio:

ccda611531c94c52ad6b4f4debe0d19b.png

В диалоговом окне Manage NuGet Packages ищем WindowsAzure.Messaging.Managed и нажимаем Install:

4e21a14f25de4a388be918ab7a81eb31.png

Дальше выбираем установку пакета для нужного проекта:

7fd3771b754e49568cdb8716fb81aeb0.png

Теперь мы загрузили, установили и добавили ссылки на библиотеки Azure Messaging во все проекты, используя WindowsAzure.Messaging.Managed NuGet package.

Открываем файл App.xaml.cs из общего проекта Shared и подключаем следующие библиотеки:

using Windows.Networking.PushNotifications; using Microsoft.WindowsAzure.Messaging; using Windows.UI.Popups; Там же добавляем метод InitNotifictionAsync: private async void InitNotificationsAsync () { var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync ();

var hub = new NotificationHub («TestDemoPushHub», «Endpoint=sb://testdemopushhub-ns.servicebus.windows.net/; SharedAccessKeyName=DefaultListenSharedAccessSignature; SharedAccessKey=z2Sj7sgwGpkvTyE/H5QyiffCpwCjV/PmJBY1h4WhXac=»); var result = await hub.RegisterNativeAsync (channel.Uri);

// Displays the registration ID so you know it was successful if (result.RegistrationId!= null) { var dialog = new MessageDialog («Registration successful:» + result.RegistrationId); dialog.Commands.Add (new UICommand («OK»)); await dialog.ShowAsync (); } } Этот метод получает URI канал для приложения от WNS, затем регистрирует этот URI канал в концентраторе уведомлений. При создании переменной hub не забудем указать имя нашего концентратора уведомлений и строку подключения с доступом Listen: var hub = new NotificationHub (»»,»»); («TestDemoPushHub», «Endpoint=sb://testdemopushhub-ns.servicebus.windows.net/; SharedAccessKeyName=DefaultListenSharedAccessSignature; SharedAccessKey=z2Sj7sgwGpkvTyE/H5QyiffCpwCjV/PmJBY1h4WhXac=»); Где данные для необходимых переменных достаем из Сведений о подключении концентратора уведомлений в Azure: hub name = TestDemoPush; connection string listen access = DefaultListenSharedAccessSignature;

В обработчике события OnLaunched в App.xaml.cs добавим вызов метода InitNotificationsAsync ().

Это необходимо для того, чтобы URI канал для ваших уведомлений регистрировался при каждом запуске приложения.

В обозревателе решений найдем и настроим файл Package.appxmanifest:

fda361343eef4eac8ca6f8019dba58d6.png

Установим настройку Toast capable в положение Yes.Теперь приложение готово к тому чтобы принимать уведомления.

Основная функция приложения показывать результат регистрации канала:

81439a92b46e472d845f9939d4312f5c.png

Отправим уведомления приложению.

Создадим консольное приложение, через которое будем отправлять push-уведомления:

bb7988f64d1a4d89bdab89136344095f.png

Нажимаем Tools→ NuGet Package Manager→ Package Manager Console

e70f75977eca40bab609080aeebb16cd.png

Таким образом, добавим ссылку на Azure Service Bus SDK.

Подключим в проекте следующую библиотеку: using Microsoft.ServiceBus.Notifications;

И добавим метод для отправки уведомлений:

private static async void SendNotificationAsync () { NotificationHubClient hub = NotificationHubClient .CreateClientFromConnectionString (»»,»»); var toast = @»Hello from a .NET App! »; await hub.SendWindowsNativeNotificationAsync (toast); } В методе создаем объект типа NotificationHubClient, где заполняем необходимые данные для подключения: connection string with full access = DefaultFullSharedAccessSignature (вашего Service Bus); hub name = TestDemoPushHub.

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

Hello, guys! »; В теле программы вызовем написанный метод: SendNotificationAsync (); Запускаем и получаем push-уведомления от приложения TestDemoPush на телефон:

0b186d7f17cb40ab9048fc61726121e7.png

Посмотрим на уведомления в Центре уведомлений:

5fc29ace5ab648a5a811bed7dd18b64f.png

При нажатии на любое из них перейдем в приложение.

Центр уведомлений Еще немного слов об одной из ключевых нововведений в Windows Phone 8.1 — Центре уведомлений (Action Center). Вызывается он свайпом вниз от верхней границы экрана. В него попадают все новые сообщения, уведомления, упоминания и напоминания от различных приложений. Так же в Центре уведомлений расположены четыре переключателя, которые можно поменять на вызов любых настроек.Теперь пользователи выбирают какие из приложений могут отображать уведомления в Центре уведомлений, а разработчики приложений получили специальные API, которые дают возможность выбирать какие из действий будут доступны из центра уведомлений. При помощи этих API и механизмов разработчики приложений могут управлять всплывающими уведомлениями.

Новые возможности для разработчиков:

Удаление одного или нескольких уведомлений; Тегирование и группы уведомлений; Замена устаревшего уведомления на новое; Установка срока действия уведомления; «Goast Toast» — уведомления, которые появляется только в Центре уведомлений. Центр уведомлений доступен только для телефона.Подробнее о возможностях Центра уведомления для разработчиков можно узнать из этого курса.

Заключение Уведомления в Windows Phone 8.1 — это целый набор разнообразных инструментов, предоставляющий разработчику возможность самому выбрать способ общения своего приложения с пользователем. Особое внимание все же советую обратить на невероятно удобную и мощную службу WNS, чьи преимущества оказались особенно заметны на мобильных устройствах.Полезные ссылки Channel 9: Building Apps for Windows Phone 8.1Microsoft Azure: Getting Started with Notification HubsMVA: Размещение и продвижение приложений в Windows StoreОбучающие курсы виртуальной академии Microsoft (MVA)Портал Microsoft AzureЦентр разработки WindowsЗагрузить бесплатную или пробную Visual Studio 2013Как опубликовать приложение в Windows StoreСкачать пример приложения из этой статьи

© Habrahabr.ru