Працюємо з повідомленнями в Windows Phone 8.1

    
 
Привіт всім!
 
Сьогодні поговоримо про нові можливості, що стосуються повідомлень в Windows / Windows Phone 8.1. Обговоримо які типи повідомлень існують, яким способом їх організувати в своєму додатку, а також відзначимо одну з головних новинок для Windows Phone пристроїв — Центр повідомлень (Action Center) .
 
 
Сповіщення
Повідомлення в Windows Phone це важливий спосіб взаємодії додатка з користувачем. Вони допомагають користувачеві дізнатися про оновлення інформації в додатку, сповіщають його про дії інших користувачів або нагадують про необхідні активностях.
 
Повідомлення можуть приходити від якої-небудь служби або ж локально від програми.
 
В Windows / Windows Phone 8.1 існує кілька способів відображення повідомлень:
 
 
 
Користувач може отримати повідомлення у вигляді інформації на плитці додатки або за допомогою маленької чорної значка.
 
Детальніше про можливості живих плиток можна дізнатися з наступного курсу .
 
На додаток до цього доступні і такі способи відображення повідомлень:
 
     
  • Toast — повідомлення — при отриманні цього типу повідомлення у верхній частині екрану пристрою з'являється текстове оповіщення. При цьому на поточний момент додаток може бути неактивним. Натиснувши на це повідомлення, можна швидко переключитися до відповідного додатком.
  •  
  • Raw — повідомлення — при цьому типі повідомлення вміст передається безпосередньо програмі. Додаток обробляє вміст повідомлення за власним алгоритмом. Ці сигнали не мають власного UI. Як і решта push-повідомлення, WNS сервіс доставляє їх до додатка з хмарної або будь-який інший зовнішньої служби.
  •  
 
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 пристроїв існують кілька способів реалізації механізму повідомлень:
 
     
  • Сповіщення за розкладом (Scheduled). Такі повідомлення будуть стояти в черзі завдань системи і запускатися в заданий фіксований час;
     
     
      
     Як це працює:
    Всередині програми використовується 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:00 / в 12 годин;
     
     
      
     Як це працює:
    У додатку звертаємося до служб 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:
      
     
     
    Необхідно тільки вибрати періодичність і вказати URI канал.
     
  •  
  • Локальні повідомлення додатки (Local);
      
     
     
     Як це працює:
    Додаток використовує для повідомлень поновлення плиток і значків, в фоном режимі вже звертається до API Toast — сповіщень.
     
     
    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:
 
     
  • Однаковий підхід для будь-яких пристроїв на Windows;
  •  
  • Єдиний процес реєстрації додатків для push-сповіщень;
  •  
  • Єдиний шаблон push-сповіщень для Windows / Windows Phone 8.1 платформ.
  •  
 
 Як це працює:
 
     
  1. Windows Phone 8.1 додаток зв'язується з Windows Notification Client платформою для отримання URI каналу додатки, який унікальний для кожного пристрою і додатки;
  2.  
  3. Далі URI канал необхідно зареєструвати в хмарному сервісі;
  4.  
  5. Хмарний сервіс проводить аутентифікацію WNS сервісу, надаючи свої дані (пакет SID і секретний ключ), і надає доступ, який дозволяє сервісу відправляти повідомлення. Тепер можна відправляти push -Повідомлення за допомогою цієї служби;
  6.  
  7. Хмарна служба, у відповідний час посилає push-повідомлення службі WNS;
  8.  
  9. WNS зв'язується з Windows Notification Client платформою, яка виробляє оновлення будь-якого із заданих типів повідомлень.
     
     
     
  10.  
 
Детальніше про роботу 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 і натискаємо кнопку Створити :
 
 
 
Натискаємо на Служби Додатків — & gt; Service Bus — & gt; Концентратор повідомлень
 
 
 
Натискаємо на Швидко створити і заповнюємо необхідні дані:
 
 
  
Створюємо новий концентратор повідомлень (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- & gt; NuGet Package Manager- & gt; 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 і механізмів розробники додатків можуть управляти спливаючими повідомленнями.
 
 Нові можливості для розробників:
 
     
  • Видалення одного або кількох повідомлень;
  •  
  • тегірованія і групи повідомлень;
  •  
  • Заміна застарілого повідомлення на нове;
  •  
  • Установка терміну дії повідомлення;
  •  
  • «Goast Toast» — повідомлення, які з'являється тільки в Центрі сповіщень.
  •  
Центр повідомлень доступний тільки для телефону.
 
Детальніше про можливості Центру сповіщення для розробників можна дізнатися з цього курсу .
 
 
Висновок
Повідомлення в Windows Phone 8.1 — це цілий набір різноманітних інструментів, що надає розробнику можливість самому вибрати спосіб спілкування свого додатку з користувачем. Особливу увагу все ж раджу звернути на неймовірно зручну і потужну службу WNS, чиї переваги виявилися особливо помітні на мобільних пристроях.
 
 
Корисні посилання
 Channel 9: Building Apps for Windows Phone 8.1
 Microsoft Azure: Getting Started with Notification Hubs
 MVA: Розміщення і просування додатків в Windows Store
 Навчальні курси віртуальної академії Microsoft (MVA)
 Портал Microsoft Azure
 Центр розробки Windows
 Завантажити безкоштовну або пробну Visual Studio 2013
 Як опублікувати додаток в Windows Store
 Завантажити приклад програми з цієї статті
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.