Привет, Хабр! В мае прошлого года, оставшись без сервисов и API гугла, мы основательно взялись за работу над своей платформой Huawei Mobile Services. Это наш давний проект, к которому мы вернулись после введения американских санкций. Проблема «отрезанных» сервисов постепенно сошла на нет. Мы добавили недостающие компоненты: почтовый клиент, свои карты и другие сервисы, и HMS Core — набор API, SDK и прочих сервисов для разработки, и улучшения приложений. В этот набор входит Push Kit — облачная служба для рассылки уведомлений — и не только. Под катом расскажем, как устроен этот инструмент, чем выделяется и как его можно использовать. Главная функция Push Kit (об остальных поговорим дальше) — доставлять на устройство пользователя уведомления от приложений. Этот процесс организован так:  сервер приложения подключается к API-интерфейсу Push Kit и загружает туда зашифрованные сообщения; из облака Push Kit сообщения пересылаются на устройство с целевым приложением. Кроме того, у Push Kit есть множество интересных и полезных фич: Таргетирование рассылки по темам сообщений и другим критериям, в том числе с помощью Huawei Analytics Kit; Отправка пуш-сообщений на основе сценариев одному или нескольким пользователям одновременно, рассылка по расписанию; Отправка пуш-сообщений через консоль в интерфейсе AppGallery Connect. Доступ к серверу Push Kit через HTTPS; Отправка пуш-сообщений пользователям, которые пользуются разными профилями на одном Android-устройстве; Отправка пуш-сообщений на устройства Android/iOS и веб-приложения; Автоматический выбор языка пуш-сообщения в зависимости от языка системы устройства получателя; Кэширование и повторная отправка – в случае, если пуш-сообщение не доставлено из-за отсутствия сети. С помощью Push Kit можно не только доставлять уведомления, но и передавать данные напрямую в приложение. В этом случае на пользовательское устройство приходит «послание», которое активирует в программе-адресате определённое действие. Функция может оказаться полезной, например, для соцсетей, когда вы получаете запрос добавиться в друзья или входящие вызовы по VoIP. Кроме того, с её помощью можно загружать в сообщения в мессенджеры, чтобы они уже были внутри, когда вы запустите программу. Но всё-таки главной задачей является доставка пуш-уведомлений, внешний вид которых настраивается через интерфейс Push Kit. Это может быть обычный текст, текст с большой или маленькой картинкой, с иконкой приложения и т. д. Можно менять размеры элементов и их расположение, выбирать тип звукового сигнала, а также программировать сценарии — действия, которые выполняются, когда пользователь открывает уведомление. Если группа уведомлений от одного приложения в статус-баре свёрнута, по умолчанию в нём будут показаны первые два пуша — их количество можно расширить до восьми. Такая группа может содержать до 24 пуш-уведомлений в EMUI 10 и до 49 в EMUI 9. Если сообщений больше, будет виден счётчик оставшихся уведомлений и следующее появится только после удаления одного из отображаемых пушей. Имя пакета, отправляемого Push Kit, может содержать до 128 байт, а максимальный размер сообщения составляет 4 Кб. Если у целевого устройства нет проблем с сетью, доставка пушей должна происходить не дольше, чем за 1 секунду. Если же девайс получателя не в сети, Push Kit кеширует сообщение и отправляет его после того, как устройство переходит в онлайн. Уведомления через Push Kit приходят быстро и снижают энергопотребление устройства. Операционки большинства мобильных девайсов автоматически закрывают приложения, которые долгое время не проявляют активности. Но чтобы программа могла показывать свои пуши, зачастую ей нужно работать — хотя бы в фоне. Так что системе приходится перезапускать нужный ей софт, чтобы вывести пуш на экран. Push Kit позволяет этого не делать: сообщения попадают в его центр уведомлений (NC), минуя целевые приложения. За это отвечает специальный компонент под названием Push Service. В итоге программа запускается только тогда, когда это предусмотрено сценарием, например после нажатия на уведомление. Отсюда и высокая скорость доставки: благодаря Push Service пользователь может прочитать сообщение практически сразу после того, как оно попадёт на телефон. Push Kit предоставляет канал системного уровня, способный одновременно отправлять десятки миллионов сообщений в секунду и десятки миллиардов в день. При этом 99 % пушей доставляются пользователям в течение 10 минут, даже если приложение не запущено. По сути, уведомления не доходят, только если устройство получателя выключено или находится вне сети. Push Service устанавливается на все мобильные устройства с EMUI, так что на них уведомления отображаются в унифицированном виде. Служба «Центр уведомлений» доступна на некоторых устройствах Huawei с EMUI 4 и на всех начиная с EMUI 5. А вот на гаджетах сторонних производителей эта функция недоступна, но если установить на них HMS Core, эти телефоны тоже научатся принимать уведомления, отправленные через Huawei Push Kit. Увы, из-за системных ограничений скорость доставки на телефоны других марок может снизиться. Push Kit поддерживает основные кроссплатформенные среды разработки мобильных приложений, включая React Native, Cordova, Xamarin и Flutter. Чтобы разрабатывать на одном языке приложение, которое будет работать и на iOS, и на Android, нужно только интегрировать соответствующий пакет подключаемого модуля SDK. После получения сообщений через Push Kit пользовательские устройства информируют об этом ваш сервер, помогая отслеживать ход рассылки в режиме реального времени. Благодаря этому можно быть в курсе статуса каждого уведомления и иметь возможность оперативно реагировать на неудачную доставку. Например, отправить SMS человеку, до которого не доходят пуши. Push Kit автоматически показывает пуши на языке, который установлен в устройстве пользователя. Охват Push Kit — более 200 стран и регионов, поэтому такая функция будет очень полезна. Чтобы воспользоваться сервисом, надо зарегистрировать аккаунт разработчика на сайте Huawei Developers. Кроме этого понадобятся: компьютер на Windows с установленным пакетом Java JDK 1.8, Android Studio и Android SDK; смартфон Huawei с USB-кабелем и установленным HMS Core не ниже 4-й версии. На схеме показан процесс разработки приложения под Android. iOS и веб-приложения поддерживаются в бета-режиме. Первым делом: создаём приложение в AppGallery Connect и проект в Android Studio; генерируем криптографический ключ SHA-256; сохраняем файл конфигурации приложения; подключаем к приложению модуль AppGallery Connect; добавляем репозиторий Maven в файл build.gradle. Подробнее об этих шагах можно почитать здесь, правда, на английском. Важный момент: чтобы использовать Push Kit для веб-приложений, нужно настроить его через приложение для Android. Кроме того, существуют Quick Apps — приложения, не требующие установки, которые можно использовать на мобильных телефонах более 12 крупных производителей в Китае. Все они доступны в AppGallery и поддерживают Push Kit. Чтобы использовать Push Kit, укажите место для хранения данных вашего проекта. Если его не задать, будут недоступны таргетирование по темам сообщений, рассылка через агент WebPush и работа с iOS. Если место хранения данных отличается от местоположения вашего сервера или региона пользователя, время доставки пушей увеличится. Чтобы уменьшить задержку, есть смысл хранить данные неподалёку от пользователей. Например, если вы в России разрабатываете приложение для жителей из Евросоюза, оптимальным местом для сервера будет Германия. Добавим файл конфигурации вашего приложения в AppGallery Connect. В AppGallery Connect кликаем My project. Находим и выбираем приложение, в которое хотим интегрировать HMS Core SDK. Переходим в Project Setting → General information. В App information загружаем файл agconnect-services.json. Копируем файл agconnect-services.json в корневой каталог приложения нашего проекта Android Studio. Добавим связи сборки. Для этого открываем файл build.gradle в каталоге приложения. Прописываем в разделе dependencies: 5.0.0.300 заменим на последнюю версию HMS Core Push SDK. Нажимаем Sync Now, чтобы синхронизировать файл build.gradle. Если отображается synced successfully, всё прошло хорошо. Чтобы устройства могли получать токен push и сообщения, отправленные сервером Push Kit, нужно изменить файл AndroidManifest.xml. Определяем класс MyPushService, он наследуется от класса HmsMessageService. В этом примере кода нужно только изменить MyPushService в android: name = ". MyPushService" на имя класса, наследуемого от класса HmsMessageService. Всё остальное сохраняем. Открываем файл конфигурации обфускации proguard-rules.pro проекта Android Studio. Добавляем параметры, исключающие из этого процесса HMS Core SDK. Если мы используем AndResGuard, его надо добавить в список разрешений в файле c конфигурацией обфускации. Ниже показан общий код проекта и структура ресурсов. Открываем наш проект в Android Studio, создаём виджет и разворачиваем TextView в MainActivity, чтобы отобразить токен. Там же, в MainActivity, программируем метод обновления токена в TextView. Для подачи заявки на токен объявляем <meta-data> в файле AndroidManifest.xml. Name и value в meta-data копируем без изменений. Push SDK будет подавать заявку на получение токена при запуске приложения. Токен получается методом onNewToken в thMyPushService*ce class. MyPushService.java Класс MyPushService наследуется от HmsMessageService. Он, в свою очередь, переопределяет метод для подтверждения онлайн-статуса устройства — onNewToken. Сборка, загрузка и отладка приложения Подключаем телефон Huawei к компьютеру. Способ 1. Нажимаем Play (зелёный треугольник), чтобы начать компиляцию и сборку. Устанавливаем APK на телефон. Способ 2. Используем Android Studio, чтобы упаковать APK. Затем используем инструмент ADB, чтобы установить APK на телефон для отладки. После запуска демо убеждаемся, что телефон подключён к сети. Метод onNewToken вызывается для возврата токена AFcSAHhhnxdrMCYBxth2QOG9IgY2VydAM61DTThqNux3KBC_hgzQQT *******. Токен записывается в журнал демонстрации. Его можно просмотреть, найдя PushDemoLog. В интерфейсе Push Kit в AppGallery Connect можно редактировать сообщения и отправлять их на устройства, подключённые к сети. Перед отправкой уведомлений находим приложение по названию. В этом примере имя APK — com.huawei.codelabpush. Подробнее можно прочитать здесь. Если всё прошло удачно, на экране телефона увидим уведомление. Почти все известные нам российские кейсы связаны с банковскими учреждениями. Первой отечественной и второй в мире компанией, интегрировавшей наш Push Kit, стала mfms°: их решения по доставке пуш-уведомлений используют ВТБ, Альфа-Банк, Сбер и другие финансовые учреждения России.  Например, в ВТБ пушами клиентам сообщают о денежных операциях в реальном времени. Такие уведомления стоят сильно дешевле SMS, а затраты на внедрение минимальны: с SDK, которое предоставляет mfms°, не надо интегрировать APNs, FCM и Huawei Push Kit «с нуля». Пуши используются не только для рассылки. На основе Push Kit в mfms° разработали фичу, которая позволяет клиентам банков получать уведомления с подтверждением денежных операций. Такие сообщения рассылаются через SDK и заменяют SMS с кодами для оплаты. Более того, mfms° научились превращать эти пуши в красивые уведомления на русском языке с брендированным названием, логотипом и категорией магазина, в котором пользователь совершил оплату. Какие ещё сферы применения можно найти для пуш-уведомлений и как извлечь из Push Kit больше пользы — вопросы не такие уж и сложные, но для нас чрезвычайно интересные. Давайте их обсудим в комментариях: ждём ваши идеи, варианты использования платформы или, возможно, предсказания о будущем пуш-уведомлений. Software Developer Engineer / Developer Consultant