8 (495) 215-53-16

info@notissimus.com

ул. Заозерная, 8

196084, Санкт-Петербург

09:00 - 20:00

сб.,вс. - выходные

Организация сервиса для отправки для отправки PUSH-уведомлений с помощью Windows 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-уведомления.

push1

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

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

push

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

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

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

Screenshot_2

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

Screenshot_3

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

Screenshot_4

Несколько слов об ограничениях. Длина 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("" +
									   "" +
											"Уведомление" +
											"{0}" +
									   " " +
									"", pushModel.Text);
			await hub.SendMpnsNativeNotificationAsync(alert);
		}
		break;
}


]]>