Организация сервиса для отправки для отправки PUSH-уведомлений с помощью Microsoft Azure. Часть II

Итак, в предыдущей части мы определились, что будем рассылать PUSH-уведомления с помощью Azure. Теперь поговорим о самом сервисе.

Сервис должен объединять следующие функциональные узлы:

  • Мобильный устройства пользователей;

  • Azure Notification Hub;

  • Platform Notification Service (Windows Notification Service (WNS), Microsoft Push Notification Service (MPNS), Apple Push Notification Service (APNS), Google Cloud Messaging (GCM))

  • Backend

    • Web-Интерфес, где администратор будет добавлять сообщения и смотреть статистику, отправленных PUSH;

    • База данных MS SQL, где хранятся записи c PUSH-уведомлениями и датами их отправления;

    • Служба, которая с заданной периодичностью(раз в минуту или если требуется чаще) ищет в базе запись с датой отправления равной текущей  и отправляет команду в Azure Notification Hub для отправки PUSH-уведомления.

Рассмотрим логику работы PUSH-уведомлений более подробно:

Когда пользователь мобильного приложения соглашается принимать PUSH-уведомления, происходит регистрация пользовательского устройства в службе уведомлений (Notification Service)(служба уведомлений  зависит от версии операционной системы). Если регистрация прошла успешно, то ID устройства также регистрируется в Azure Notification Hub.

Если посмотреть пример кода, поясняющего эту картинку и написанного для Xamarin.iOS, то вы увидите, что он очень простой:

//регистрация в Notification Service. UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(notificationTypes) //Если регистрация в NotificationService прошла успешно public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { //регистрация в AzureHub Hub.RegisterNativeAsync(deviceToken, tags, (errorCallback) => { .... }); }

Процесс регистрации устройств мы можем наблюдать в Azure в виде графика.

Теперь все готово для  отправки PUSH уведомлений. Мы можем отправить тестовые  PUSH уведомления непосредственно из Azure.

Для своих клиентов мы создали простой Web-интерфейс для отправки PUSH-уведомлений. С помощью интерфейса можно создавать уведомления, редактировать и удалять их.

Несколько слов об ограничениях. Длина PUSH для iOS устройств составляет 256 байт. В связи с тем, что в теле передается json строка текст самого сообщения становится еще короче. Мы ввели ограничение в 90 символов, зарезервировав местов для системной информации.

Все уведомления хранятся в базе MS SQL, а служба WinService следит за своевременной отправкой сообщений.

В заключении хочу остановиться на той части кода, которая дает команду Azure на отправку сообщений. Для каждой платформы он свой, но при этом не выглядит сверх сложным:)

NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(pushModel.ConnectionString, pushModel.NotificationHub); string alert; switch (pushModel.PlatformType) { case PlatformType.iOS: { alert = string.Format("{{\"aps\":{{\"alert\":\"{0}\"}}}}", pushModel.Text); await hub.SendAppleNativeNotificationAsync(alert); } break; case PlatformType.Android: { alert = string.Format("{{\"data\":{{\"msg\":\"{0}\"}}}}", pushModel.Text); await hub.SendGcmNativeNotificationAsync(alert); } break; case PlatformType.WinPhone: { alert = string.Format("<wp:notification xmlns:wp='\"WPNotification\"'>" + "<wp:toast>" + "<wp:text1>Уведомление</wp:text1>" + "<wp:text2>{0}</wp:text2>" + "</wp:toast> " + "</wp:notification>", pushModel.Text); await hub.SendMpnsNativeNotificationAsync(alert); } break; }

Автор статьи: Денис Кретов.