Хочу поделиться своим
Ребята, я прочитал вот эту статью: «О проблемах и решении задачи доставки пуш-уведомлений миллионам устройств на различных платформах».
И еще вот эту: «Как отправлять 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 в котором и находится
Развернем приложение и запустим его, дабы оно зарегистрировалось в хабе.
Создав привязку, вернемся к сайту 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();
QtRoS
Картинка для привлечения внимания что надо!