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

OSzone.net » Microsoft » Разработка приложений » Windows Phone » Работаем с уведомлениями в Windows Phone 8.1
Иcточник: msdn.microsoft.com
Опубликована: 11.02.2015
Сегодня поговорим о новых возможностях, касающихся уведомлений в Windows/Windows Phone 8.1. Обсудим какие типы уведомлений существуют, каким способом их организовать в своем приложении, а также отметим одну из главных новинок для Windows Phone устройств — Центр уведомлений (Action Center).

Уведомления

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

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

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

*
Увеличить


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

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

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

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

Для работы с Toast-уведомлениями необходимо подключить этот способ отображения уведомлений в манифесте приложения. Мы не сможем посылать Toast-уведомления, пока не укажем, что приложение может их отправлять.

К счастью, это очень просто – переключить соответствующую настройку в Package.appxmanifest в положение «Yes»:

*

Отправляем 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 они имеют только один фиксированный вид, независимо от указанного разработчиком шаблона:

*

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

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

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

var scheduleToast = new ScheduledToastNotification(
                        xmlDoc,
                        DateTimeOffset.UtcNow + TimeSpan.FromDays(1.0) );
var toastNotify = ToastNotificationManager.CreateToastNotifier();
toastNotify.AddToSchedule(scheduleToast);

При помощи класса ScheduledToastNotification создаем объект, отвечающий за уведомление по расписанию, в котором, используя ранее продемонстрированный XML-код, указываем содержание и устанавливаем время, в которое необходимо отобразить уведомление. А с помощью класса ToastNotificationManager создаем объект toastNotify, для которого реализована функция добавления уведомления в очередь системы AddToSchedule().

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:

*
Увеличить


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

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

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

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

*
Увеличить


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

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

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

    *

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

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

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

*
Увеличить


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

*
Увеличить


Заполним App Info:

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

*
Увеличить


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

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

*
Увеличить


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

*
Увеличить


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

*

Теперь мы загрузили, установили и добавили ссылки на библиотеки 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:

*

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

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

*

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

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

*
Увеличить


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

*
Увеличить


Таким образом, добавим ссылку на 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 — Центре уведомлений (Action Center). Вызывается он свайпом вниз от верхней границы экрана. В него попадают все новые сообщения, уведомления, упоминания и напоминания от различных приложений. Так же в Центре уведомлений расположены четыре переключателя, которые можно поменять на вызов любых настроек.

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

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

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

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

Заключение

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


Ссылка: http://www.oszone.net/26159/