Push-уведомления являются важным компонентом соединенных приложений. С их помощью серверы могут часто и своевременно отправлять обновления конкретным пользователям и устройствам: это могут быть обновления плиток и значков, всплывающие уведомления и т. п. (Для получения более подробной информации обратитесь к серии из трех статей Alive with Activity.) Таким образом, push-уведомления — это мощный механизм вовлечения клиента, доступный разработчикам приложений для телефонов, планшетов и ПК.
Существует множество инструментов, позволяющих с легкостью внедрять push-уведомления ( Службы Windows Azure Mobile Services, например, уже содержат такую функцию). Отправить единственное push-уведомление одному мобильному пользователю с помощью этих инструментов достаточно просто. Однако параллельная рассылка рush-уведомлений с небольшой сетевой задержкой на миллионы мобильных устройств, а также учет реалий окружающего мира (локализация, различные мобильные платформы и персонализация) — вот что по-настоящему сложно.
Трудности возникают в основном потому, что push-уведомления доставляются устройствам посредством специфичных для каждой платформы служб. Например, для отправки push-уведомлений приложениям Windows Store нужно использовать Службу уведомлений Windows (Windows Notification Service, WNS), на Windows Phone — Службу push-уведомлений Майкрософт (Microsoft Push Notification Service, MPNS), на iOS — Службу push-уведомлений Apple (Apple Push Notification service, APNs), а на Android — Google Cloud Messaging (GCM).
Все эти службы работают следующим образом: приложение на устройстве запрашивает специфичный для пользователя, устройства и приложения ChannelURI и сохраняет его на сервере приложения. При отправке уведомления сервер приложения посылает данные уведомления в ChannelURI, чтобы достичь нужного устройства. Ситуация усложняется еще и тем, что ChannelURI имеют ограниченный срок действия (и поэтому должны постоянно перезагружаться на сервер) и на одном устройстве может быть активировано несколько ChannelURI одновременно. При создании мультиплатформенных приложений проблема усугубляется, поскольку платформы по-разному обрабатывают рush-уведомления.
Жизненный цикл push-уведомлений
Допустим, что вам нужно посылать уведомления о срочных новостях и при этом каждый пользователь может быть подписан на несколько различных категорий. В таком случае вам придется управлять (например, в виде таблицы в базе данных) следующей информацией:
Device ID | Platform | ChannelURI | Categories | Language | ClientVersion |
1 | Windows | http://channel.uri/1 | {“World”, “Business”} | English | V 1.1 |
2 | WindowsPhone | http://channel.uri/2 | {“Technology”, “Sports”} | French | V2.0 |
… | … | … | … | | |
Очевидно, что если приложение будет использовать несколько устройств и вы хотите работать с локализацией и пользовательскими настройками, то такой подход вызовет одни лишь проблемы.
Кроме того, если предположить, что у вас имеется весь код для управления указанной выше таблицей и соединения с нужными службами уведомлений каждой платформы для отправки уведомлений, все равно возникнут сложности, даже если приложение (при хорошем раскладе!) будет успешно работать. Если нужно оповестить тысячи устройств, то запуск процесса по циклу for не слишком удобен для пользователей. В этом случае сетевая задержка уведомлений будет непозволительно долгой и вы не сможете восстановить процесс, если на сервере что-то произойдет во время отправки. Эти проблемы можно решить, если хранить информацию об устройстве в нескольких базах данных (т. е. сегментировать их). Однако создать несколько виртуальных машин, параллельно рассылающих уведомления на большое количество устройств, и периодически сохранять прогресс в еще одном постоянном хранилище на сервере будет довольно затруднительно!
Подведем итог: мы теперь знаем, что внедрение push-уведомлений в приложение может быстро превратиться в громоздкий и сложный процесс. Самая главная трудность — управление информацией об устройстве (особенно в кросс-платформенных и (или) локализованных приложениях) и масштабирование инфраструктуры push-уведомлений для работы с миллионами устройств. Давайте теперь посмотрим, как Центры уведомлений Windows Azure упрощают данный процесс.
Причины для выбора Центров уведомлений
Центры уведомлений Windows Azure предоставляют вам прекрасно масштабируемую инфраструктуру push-уведомлений, которая помогает эффективно перенаправлять кросс-платформенные, персонализированные push-уведомления миллионам пользователей.
Управление маркерами устройств
Центры уведомлений освобождают вас от необходимости хранить на серверах и управлять URI каналов и маркерами устройств, используемыми службами уведомлений платформ (WNS, MPNS, Apple PNS или Google Cloud Messaging Service). Мы безопасно обрабатываем обратную связь PNS, сроки действия маркеров устройств и т. п. за вас.
Эффективная многоадресная доставка, основанная на тегах, и pub/sub маршрутизация
Устройства могут задать один или несколько тегов при регистрации в Центре уведомлений. Это означает, что пользователь заинтересован в определенных темах (любимый спорт и команда, географическое местоположение, логический идентификатор пользователя и т. п.). Эти теги не нужно заранее поставлять или удалять; благодаря им приложения с легкостью смогут отправлять целевые оповещения на миллионы устройств всего одним вызовом API, не утруждая вас развертыванием собственной инфраструктуры, доставляющей уведомления отдельным устройствам.
Высокая персонализация
Центры уведомлений имеют встроенные функции для создания шаблонов; клиент может выбирать форму, формат и язык уведомлений, сохраняя при этом независимость и четкость кода серверной платформы.
Огромный масштаб. Центры уведомлений оптимизированы так, чтобы рассылать push-оповещения на миллионы устройств с низкой задержкой сети. Один Центр уведомлений поддерживает 5 млн устройств; ваш сервер может отправить одно сообщение Центру уведомлений, чтобы автоматически доставить миллионы push-оповещений пользователям, не перестраивая архитектуру всего приложения.
Кросс-платформенность
Благодаря всего одному API-вызову с помощью Центра уведомлений сервер приложения сможет отсылать push-оповещения пользователям на устройства с Магазином Windows, Windows Phone 8, iOS или Android.
Подходят для любой серверной системы
Центры уведомлений с легкостью интегрируются в любое серверное приложение с помощью .NET или Node.js SDK, либо простыми и понятными REST API. Они идеально работают с приложениями Windows Azure Mobile Services. Кроме того, они позволяют использовать серверные приложения, размещенные на виртуальных машинах IaaS (на Windows или Linux), в облачных сервисах или на веб-сайтах.
«Новости Bing»: использование Центров уведомлений Windows Azure для доставки срочных новостей миллионам устройств
Одним из первых приложений, начавшим использовать Центры уведомлений Windows Azure сразу после выхода ознакомительной версии ОС в январе прошлого года, стало приложение «Новости Bing», установленное на всех устройствах с Windows 8 и Windows Phone 8. Приложению «Новости Bing» нужно мгновенно оповещать своих пользователей о срочных новостях. Это достаточно сложно по нескольким причинам:
Огромный масштаб
Новостное приложение установлено у каждого пользователя Windows 8, и серверам Bing необходимо доставлять им сотни миллионов уведомлений со срочными новостями каждый месяц.
Многоадресная доставка, основанная на темах
Доставка push-оповещений на различные рынки на основе интересов отдельных пользователей требует эффективной pub sub маршрутизации и логики многоадресной доставки, основанной на темах.
Кросс-платформенная доставка
Форматы и семантика оповещений различаются для мобильных платформ, а отслеживание каналов и меток по всем платформам является сложной задачей.
Центры уведомлений Windows Azure стали прекрасным решением всех проблем «Новостей Bing». Благодаря недавнему обновлению «Новостей Bing» приложение теперь использует Центры уведомлений для доставки push-уведомлений миллионам устройств на Windows и Windows Phone каждый день.
Увеличить
Приложение «Новости Bing» на клиентском устройстве получает подходящие ChannelURI от Службы уведомлений Windows (Windows Notification Service, WNS) и Службы push-уведомлений Майкрософт (Microsoft Push Notification Service, MPNS) в версиях для Windows 8 и Windows соответственно. Затем оно регистрирует их в Центре уведомлений Windows Azure. Когда появляются срочные новости для определенного региона, приложение с помощью Центров уведомлений мгновенно рассылает их всем устройствам. С помощью единственного вызова REST к Центру уведомлений можно автоматически отфильтровывать клиентов, заинтересованных в данной теме (например, спорт), и моментально доставлять сообщение миллионам пользователей:
Обзор архитектуры push-оповещений в «Новостях Bing»
Windows Azure выполняет всю работу со сложной логикой фильтрации pub/sub и эффективно рассылает сообщения с небольшой сетевой задержкой.
Начните использовать Центры уведомлений!
Вы можете протестировать новый Центр уведомлений, создав его на портале управления Windows Azure. Для этого выберите пункт меню Service Bus Notification Hub (Центр уведомлений шины обслуживания) под App Services (Службы приложений) в диалоговом окне New (Создать):
Увеличить
На создание нового Центра уведомлений уходит меньше минуты, а после завершения процесса вы можете открыть его панель информации для просмотра активности. Помимо всего прочего, здесь показано, сколько устройств зарегистрировано, сколько сообщений отправлено, сколько сообщений успешно доставлено и сколько доставить не удалось:
Увеличить
Затем отредактируйте свои учетные данные Магазина Windows, чтобы подключить push-уведомления на вкладке Configure (Конфигурация):
Увеличить
Центр уведомлений готов к работе!
Можно зарегистрироваться в Центре уведомлений через приложение Магазина Windows, используя Windows Store SDK для устройств с помощью следующей команды:
await hub.RegisterNativeAsync(channel.Uri, new string[] { "myTag", "myOtherTag" });
Центры уведомлений пока не имеют официального WinJS SDK, но вы можете загрузить образец, в котором показано, как использовать публичные REST API для выполнения этой операции с помощью следующего кода:
hub.registerApplicationAsync(channelUri, ["myTag", "myOtherTag"]);
А затем дайте команду .NET серверу разослать сообщение всем клиентам:
var toast = @"<toast><visual><binding template=""ToastText01""><text id=""1"">Hello everybody!</text></binding></visual></toast>";
await hub.SendWindowsNativeNotificationAsync(toast);
Центры уведомлений работают с любыми XML-файлами, которые принимаются WNS (даже новыми шаблонами Windows 8.1). Для отправки уведомления на плитку создайте правильный XML-файл, соответствующий рекомендациям Windows, и используйте указанный выше метод (кроме того, нужно добавить еще один элемент размером 310 x 310):
var tile = @"<tile>";
tile += @"<visual lang=""en-US"">";
tile += @"<binding template=""TileWide310x150ImageAndText01"">";
tile += @"<image id=""1"" src=""ms-appx:///images/redWide.png""/>";
tile += @"<text id=""1"">Hello World! My very own tile notification</text>";
tile += @"</binding>";
tile += @"<binding template=""TileSquare150x150Text04"">";
tile += @"<text id=""1"">Hello World! My very own tile notification</text>";
tile += @"</binding>";
tile += @"</visual>";
tile += @"</tile>";
hub.SendWindowsNativeNotificationAsync(tile);
Кроме того, мы предоставляем SDK для устройств на Windows Phone 8, Android и iOS. Помимо этого, вы можете использовать Центры уведомлений на .NET серверах, Windows Azure Mobile Service, любых других серверных системах с нашим Node.js SDK и оболочках REST.
При создании приложения масштабируйте его для миллионов пользователей прямо из портала управления Windows Azure.
Увеличить
И получайте доступ к десяткам метрик, касающихся оповещений:
Увеличить
Выводы
Благодаря Центрам уведомлений можно добавить push-уведомления в приложения, не создавая код для управления устройствами или кросс-платформенный код. Легко и быстро формируйте группы интересов и выполняйте доставку на миллионы устройств. Начните изучать Центры уведомлений прямо сейчас: посетите страницу службы Центров уведомлений или сразу перейдите к руководству «Начало работы с Центрами уведомлений» и этому видео. Если вас еще нет учетной записи Windows Azure, зарегистрируйтесь дляполучения бесплатного пробного доступа и начните использовать Центры уведомлений уже сегодня.