- PVSM.RU - https://www.pvsm.ru -

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

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

Привет всем!

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

Уведомления

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

Уведомления могут приходить от какой-либо службы или же локально от приложения.

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

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

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

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

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

  • Toast — уведомления – при получении этого типа уведомления в верхней части экрана устройства появляется текстовое оповещение. При этом на текущий момент приложение может быть неактивным. Нажав на это сообщение, можно быстро переключиться к соответствующему приложению.
  • Raw — уведомления – при этом типе уведомления содержимое передается непосредственно приложению. Приложение обрабатывает содержимое уведомления по собственному алгоритму. Эти уведомления не имеют собственного UI. Как и остальные push-уведомления, WNS сервис доставляет их к приложению из облачной или любой другой внешней службы.

Toast — уведомления

Для работы с Toast- уведомлениями необходимо подключить этот способ отображения уведомлений в манифесте приложения. Мы не сможем посылать Toast- уведомления, пока не укажем, что приложение может их отправлять.
К счастью, это очень просто – переключить соответствующую настройку в Package.appxmanifest в положение «Yes»:

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

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

<toast>
    <visual>
        <binding template="ToastText04">
            <text id="1">headline text</text>
            <text id="2">body text</text>
        </binding>
    </visual>
</toast>

Заметим, что эта XML схема стандартна для любого вида уведомлений.
При нажатии на Toast – уведомление пользователь сможет запустить приложение.

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

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

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

Способы реализации уведомлений

Для всех Windows устройств существуют несколько способов реализации механизма уведомлений:

  • Уведомления по расписанию (Scheduled). Такие уведомления будут стоять в очереди задач системы и запускаться в заданное фиксированное время;

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

    Как это работает:
    Внутри приложения используется 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 часов;

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

    Как это работает:
    В приложении обращаемся к службам 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:

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

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

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

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

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

    BadgeNotification newBadge = new BadgeNotification(badgeDoc);
    BadgeUpdater update = BadgeUpdateManager.CreateBadgeUpdaterForApplication();
    update.Update(newBadge);
    

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

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

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

Не оставим без внимания последний способ реализации уведомлений — 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 платформ.

Как это работает:

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

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

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

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

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

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

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

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

Заполним App Info:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теперь мы загрузили, установили и добавили ссылки на библиотеки 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("<hub name>", "<connection string with listen access>"); ("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:

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

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

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

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

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

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

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

Нажимаем Tools-> NuGet Package Manager-> Package Manager Console

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

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

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

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

private static async void SendNotificationAsync()
{
    NotificationHubClient hub = NotificationHubClient
        .CreateClientFromConnectionString("<connection string with full access>", "<hub name>");
    var toast = @"<toast><visual><binding template=""ToastText01""><text id=""1"">Hello from a .NET App!</text></binding></visual></toast>";
    await hub.SendWindowsNativeNotificationAsync(toast);
}

В методе создаем объект типа NotificationHubClient, где заполняем необходимые данные для подключения:

connection string with full access = DefaultFullSharedAccessSignature (вашего Service Bus);
hub name = TestDemoPushHub.

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

<toast><visual><binding template=""ToastText01""><text id=""1"">Hello, guys!</text></binding></visual></toast>";

В теле программы вызовем написанный метод:
SendNotificationAsync();

Запускаем и получаем push-уведомления от приложения TestDemoPush на телефон:

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

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

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

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

Центр уведомлений

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

Теперь пользователи выбирают какие из приложений могут отображать уведомления в Центре уведомлений, а разработчики приложений получили специальные API, которые дают возможность выбирать какие из действий будут доступны из центра уведомлений. При помощи этих API и механизмов разработчики приложений могут управлять всплывающими уведомлениями.

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

  • Удаление одного или нескольких уведомлений;
  • Тегирование и группы уведомлений;
  • Замена устаревшего уведомления на новое;
  • Установка срока действия уведомления;
  • «Goast Toast» – уведомления, которые появляется только в Центре уведомлений.

Центр уведомлений доступен только для телефона.

Подробнее о возможностях Центра уведомления для разработчиков можно узнать из этого курса [24].

Заключение

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

Полезные ссылки

Channel 9: Building Apps for Windows Phone 8.1 [25]
Microsoft Azure: Getting Started with Notification Hubs [26]
MVA: Размещение и продвижение приложений в Windows Store [27]
Обучающие курсы виртуальной академии Microsoft (MVA) [28]
Портал Microsoft Azure [29]
Центр разработки Windows [3]
Загрузить бесплатную или пробную Visual Studio 2013 [6]
Как опубликовать приложение в Windows Store [30]
Скачать пример приложения из этой статьи [31]

Автор: maria_gore

Источник [32]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/windows-phone/68735

Ссылки в тексте:

[1] курса: http://channel9.msdn.com/Series/Building-Apps-for-Windows-Phone-8-1/14

[2] здесь: http://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx

[3] Центре разработки: https://dev.windows.com/ru-ru/dashboard

[4] Image: http://habrastorage.org/files/db9/543/f19/db9543f195e444a3a81d1f8e9ece5bd4.png

[5] Image: http://habrastorage.org/files/259/98c/e19/25998ce19c1349009638e9eab0df18b9.png

[6] Visual Studio: http://aka.ms/getvsrus

[7] Image: http://habrastorage.org/files/884/1a8/183/8841a818318d4ff280506b0e59a580c6.png

[8] Image: http://habrastorage.org/files/923/19b/655/92319b655a394889a8d8705cad719fd8.png

[9] Image: http://habrastorage.org/files/2cf/289/e56/2cf289e5691a476a990bc5c21258bc82.png

[10] Image: http://habrastorage.org/files/9bd/f6f/22d/9bdf6f22d68d402c80638841eb1074c5.png

[11] Image: http://habrastorage.org/files/3ac/bb1/7bc/3acbb17bcc454c1b89625e7f8c0a8fc0.png

[12] Azure: https://manage.windowsazure.com/

[13] Image: http://habrastorage.org/files/2e4/baf/b0b/2e4bafb0b73c493790334dc1a316fe8e.png

[14] Image: http://habrastorage.org/files/c83/fd9/c16/c83fd9c1683f4dbcafceae3df3dd635e.png

[15] Image: http://habrastorage.org/files/22a/264/022/22a26402274b419481c22f950a6b4036.png

[16] Image: http://habrastorage.org/files/8e2/837/f92/8e2837f92f57487c8f65142d587d3224.png

[17] Image: http://habrastorage.org/files/fd6/f26/5de/fd6f265decbd46b2988bfe2e9b034ebe.png

[18] Image: http://habrastorage.org/files/1a4/d79/101/1a4d7910172642dcaaa7af1f1d1fbd06.png

[19] Image: http://habrastorage.org/files/504/c16/65f/504c1665fe91458c91111a835dd165d2.png

[20] Image: http://habrastorage.org/files/213/91b/688/21391b688e6c4e90b518896bb790b499.png

[21] Image: http://habrastorage.org/files/ccd/a61/153/ccda611531c94c52ad6b4f4debe0d19b.png

[22] Image: http://habrastorage.org/files/4e2/1a1/4f2/4e21a14f25de4a388be918ab7a81eb31.png

[23] Image: http://habrastorage.org/files/bb7/988/f64/bb7988f64d1a4d89bdab89136344095f.png

[24] курса: http://channel9.msdn.com/series/Building-Apps-for-Windows-Phone-8-1/14#time=34m33s

[25] Channel 9: Building Apps for Windows Phone 8.1 : http://channel9.msdn.com/Series/Building-Apps-for-Windows-Phone-8-1/22

[26] Microsoft Azure: Getting Started with Notification Hubs: http://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-started/

[27] MVA: Размещение и продвижение приложений в Windows Store: http://www.microsoftvirtualacademy.com/training-courses/publication-and-promotion-applications-in-windows-store-rus

[28] Обучающие курсы виртуальной академии Microsoft (MVA) : http://www.microsoftvirtualacademy.com/

[29] Портал Microsoft Azure: http://azure.microsoft.com/ru-ru/

[30] Как опубликовать приложение в Windows Store: http://aka.ms/storepublish

[31] Скачать пример приложения из этой статьи: http://1drv.ms/1lkhJ2Y

[32] Источник: http://habrahabr.ru/post/234727/