Делаем приложение pushистым

от автора


Хочу поделиться своим user developer experience от внедрения WNS push notifications в приложение Windows Store.
Приглашаю всех прочитать мои непутевые заметки о том, как я делал свое приложение белым и pushистым.


Рребята, я прочитал вот эту статью:
О проблемах и решении задачи доставки пуш-уведомлений миллионам устройств на различных платформах
и еще вот эту:
Как отправлять push-уведомления на Windows Universal app
и вот эта мне понравилась:
Работаем с уведомлениями в Windows Phone 8.1
Довольно понятной оказалась вот эта статья на не родном и не всегда понятном английском языке:
Windows Azure Notification Hubs: Tags and creating a breaking news app
Видео еще с прошлогоднего, Build-а, оказалось интересным и все еще актуальным

Так как у меня не все получилось именно так как в этих статьях, то излагаю далее свое руководство к действию.

По адресу https://portal.azure.com/ можно управлять своей учетной записью, просматривать действия и ресурсы, управлять подпиской. Но если вы хотите создавать различные объекты, а после управлять ими, то вам по адресу: https://manage.windowsazure.com

Зайдя по адресу https://manage.windowsazure.com и выбрав в меню пункт «Мобильные службы» вы сможете создать мобильную службу, нажав на ссылку «Создать мобильную службу»

Далее пошагово можете выбрать имя для вашего URL-адреса и задать параметры базы данных.


Я ограничился бесплатной базой данных и никакие дополнительные параметры не настраивал. Дефолтные параметры меня вполне устраивают.
Альтернативно можно создать мобильную службу, нажав на кнопку «СОЗДАТЬ» в нижнем левом углу (смотрите первый скриншот). И в первом и во втором варианте шаги приблизительно одинаковые.

Создав службу любым из способов, мы получим такое вот окошечко:

Дважды кликнув на название службы, мы попадаем в панельку управления службой:

Выбираем пункт PUSH и лицезрим пустые поля с секретом клиента и SID пакета

До привязки приложения, и поле секрет клиента и поле SID пакета не содержат данные.
Отвлечемся от веб-сайта и поработаем с приложением, в которое мы хотим добавить push уведомления. Для того, чтобы привязать наше приложение к только что созданному хабу, первым делом, нам нужно открыть наше приложение в Visual Studio.
Далее вызвав контекстное меню на названии проекта (именно проекта, а не решения), получим возможность добавить в приложение Push Notification. В моей англоязычной версии студии это выглядит так:

Следующими шагами «Next-Next» мы выбираем наше приложение в Store и недавно созданный сервис:

Этих действий уже достаточно для того, чтобы ваше приложение смогло получать push уведомления. Если обновим страничку на сервере, то сможем увидеть, что поля «секрет клиента» и «SID пакета» уже заполнены.
После операции добавления Push notifications, некоторый код будет добавлен в ваше приложение автоматически.
В файл App.xaml.cs к объявлениям переменных класса App будет добавлена следующая public переменная:

public static Microsoft.WindowsAzure.MobileServices.MobileServiceClient redactorClient = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient("https://redactor.azure-mobile.net/", "TSIFgOYeMNUdwIViawpdeIJKXlcVIV57"); 

В том же App.xaml.cs в конец кода обработки события OnLaunched будет добавлена регистрация канала:

RedactoR.redactorPush.UploadChannel();  

Автоматически будет создана папка Services, внутри которой будет создана папка MobileServices, внутри нее еще одна папка с именем созданного сервиса «redactor» и уже внутри этой папки файл push.register.cs в котором и находится смерть Кощея метод UploadChannel, выполняемый при запуске приложения.
Развернем приложение и запустим его, дабы оно зарегистрировалось в хабе.

Создав привязку, вернемся к сайту https://manage.windowsazure.com Если вы не закрывали страницу, то можете кликом на имя хаба попасть на его страницу. Если закрыли, то это же можно сделать из общего меню слева:

Обратите внимание на ссылку справа с названием «Просмотреть строку подключения». Нажав на нее можно получить угадайте что? Правильно, — строку подключения! Она нам понадобится позднее.

Из хаба, зайдя на закладку «Отладка», можно отправить тестовое push уведомление.

Вы можете выбрать тип отправляемого уведомления: строка (raw уведомления, для работы с которыми необходимо писать дополнительный код), эмблема, плитка и всплывающие уведомления (уведомления этих типов мы уже можем отправлять нашему приложению).
Попробуйте отправить всплывающее уведомление. Если все ОК, то вы все сделали правильно, и мы с вами пойдем дальше и немножко усложним.
Обратите внимание на поле ТЭГ «ОТПРАВИТЬ» на скриншоте. При регистрации приложения в хабе мы можем задать определенные ключевые слова для конкретной регистрации. Скажем, у нас новостное приложение с различными категориями новостей. В таком случае мы можем рассылать определенные уведомления, скажем, только пользователям, которые предпочитают новости о спорте.
Для этого нам нужно будет изменить код UploadChannel. Изначально он выглядит так:

var channel = await Windows.Networking.PushNotifications.PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();             try             {                 await App.redactorClient.GetPush().RegisterNativeAsync(channel.Uri);             }             catch (Exception exception)             {                 HandleRegisterException(exception);             } 

Если заменить строку:

await App.redactorClient.GetPush().RegisterNativeAsync(channel.Uri); 

на:

string[] PushTags = { "ралли", "формула 1" }; await App.redactorClient.GetPush().RegisterNativeAsync(channel.Uri, PushTags); 

то можно зарегистрировать приложение для получения определенных новостей отправленных с тегом «ралли» или «формула 1». В реальной программе элементы массива PushTags, разумеется, устанавливаются динамически.

В моем случае, мне захотелось регистрировать пользователей, которые используют русский язык интерфейса, с тегом «RU», а тех, кто использует английский, с тегом «EN» и присылать им различные сообщения. Те небольшие изменения, которые я сделал, это заменил строку

await App.redactorClient.GetPush().RegisterNativeAsync(channel.Uri); 

на

  string tempstr;    tempstr = Convert.ToString(Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride);                 if (tempstr.ToUpper() == "EN")                 {                     string[] PushTags = { "EN" };                     await App.redactorClient.GetPush().RegisterNativeAsync(channel.Uri,PushTags);                 }                 else                 {                     string[] PushTags = { "RU" };                     await App.redactorClient.GetPush().RegisterNativeAsync(channel.Uri, PushTags);                 } 

Теперь приложение регистрируется в хабе либо с тегом «RU», либо с тегом «EN», в зависимости от текущего языка приложения. В панели управления сайта можно отключить «Произвольную широковещательную передачу» и отправить сообщение только тем приложениям, которые были зарегистрированы с тегом нужного языка (т.е. указав в поле ТЕГ «ОТПРАВИТЬ» либо «RU», либо «EN»)

Отправка уведомлений

Из интерфейса Azure удобно отправлять тестовые уведомления, но на них наложены определенные ограничения – рассылка идет только 10-ти произвольным пользователям.
Отправить уведомление всем пользователям можно различными способами. Обычно предлагается создать мобильный сервис. Но более удобным и простым для разработчика способом является создание консольного приложения.
Этот способ довольно понятно излагается в следующем руководстве:
Getting Started with Notification Hubs
Коротенько опишу этот способ (он совсем простой).
Создадим простое консольное приложение. С помощью поиска по NuGet менеджеру текста «WindowsAzure.ServiceBus» найдем и установим пакет Microsoft Azure Service Bus. С помощью консоли NuGet менеджера его же можно установить командой:

Install-Package WindowsAzure.ServiceBus 

Добавим пространство имен:

using Microsoft.ServiceBus.Notifications; 

и всего-навсего один простой метод:

private static async void SendNotificationAsync() {     NotificationHubClient hub = NotificationHubClient         .CreateClientFromConnectionString("<строка подключения с полным доступом>", "<имя хаба>");     var toast = @"<toast><visual><binding template=""ToastText01""><text id=""1"">Привет, App!</text></binding></visual></toast>";     await hub.SendWindowsNativeNotificationAsync(toast); } 

Вот именно здесь нам и будет нужна строка подключения, которую можно получить на сайте в разделе хаба. Кликаем на ссылку «Просмотреть строку подключения» (см. скриншот выше) и копируем значение DefaultFullSharedAccessSignature, которое выглядит приблизительно так:
Endpoint=sb://redactorhub-ns.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=kjeJDdtIdvE+3dh3hyIRlkvPF3Ns0zPbewouDHMwe4v3=
Вот этот текст и вставляем вместо <строка подключения с полным доступом>, а вместо <имя хаба> вставим имя хаба (в моем случае это redactorhub).
В метод main добавляем всего 2 строки кода:

      SendNotificationAsync();       Console.ReadLine(); 

ссылка на оригинал статьи http://habrahabr.ru/post/257209/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *