Советы по работе с экосистемой Huawei от «Лаборатории Касперского» / Блог компании Huawei / Хабр

Проверяем, что всё работает

Также, очень удобно можно проверить, что Huawei аналитика работает. Для этого надо:

  1. Подсоединить девайс к компьютеру.
  2. Выполнить в консоли adb shell setprop debug.huawei.hms.analytics.app ТУТ_APPLICATION_ID_ВАШЕГО_ПРИЛОЖЕНИЯ
  3. Открыть консоль разработчика в браузере, перейти в AppGallery Connect -> Мои приложения -> Выбрать приложение -> Раздел «Разработка» -> Управление -> Отладка приложения.
  4. Теперь отправленные из приложения события вы будете видеть в реальном времени прямо на сайте.
  5. Чтобы отключить режим отладки выполните adb shell setprop debug.huawei.hms.analytics.app .none.

Вот так режим отладки выглядит в браузере:

Ads kit


Данный сервис мы используем для получения

— это уникальный ID, который может быть

в любой момент времени в системных настройках.

Среди других полезных функций данного сервиса можно выделить Install Referrer — он позволяет получить информацию из реферальной ссылки, которую использовал пользователь для установки приложения.

Analytics kit

Набор инструментов, предоставляемый в рамках

, однозначно можно считать более чем полноценным:

  • аналитика не только даёт средства для проведения качественного анализа данных, но и работает как поставщик данных для таргетирования пользователей при использовании других сервисов:


Например, можно проводить A/B-тестирование на определённых аудиториях или с помощью App Messaging предлагать определённой аудитории скидки, впоследствии анализируя результат при помощи Analytics Kit.

По итогу интеграция решения не составляет труда и даёт огромную отдачу в виде хорошо продуманных инструментов для анализа данных и таргетирования пользователей. Для большинства приложений продублировать функционал сервиса Google Analytics можлно в считаные минуты.

Cloud testing

Huawei предоставляет интересную и весьма полезную возможность провести NFT (Non Functional Testing) силами своего сервиса.Хорошая практика — запускать эти тесты время от времени, ну а для релиз-кандидатов (RC), по нашему мнению, это должно быть обязательной проверкой.

Кратко о том, как запустить тесты:1. В консоли AppGallery Connect перейти в раздел My project и выбрать проект, соответствующий вашему приложению.2. В левой колонке в разделе Quality выбрать Cloud testing.3. Загрузить на сервис APK-файл вашего приложения.4. Нажать New test.

Доступны следующие виды тестов:

  • Compatibility test
  • Stability test
  • Performance test
  • Power consumption test

Советы по работе с экосистемой Huawei от «Лаборатории Касперского» / Блог компании Huawei / Хабр

Cloud debugging

Для полноценного выпуска релиза было необходимо проверить работу продуктов на реальных устройствах.У нас довольно большой пул тестовых устройств, однако HMS Only на тот момент была буквально пара штук, что для полноценного тестирования было, конечно, маловато.

Тут нас спасла собственная ферма (на основе OpenSTF), которая давала возможность шарить устройство для удалённого доступа, а также песочница с удалёнными HMS-устройствами, доступная в AppGallery, — Cloud debugging.

Этот сервис дает возможность удалённо использовать реальные устройства Huawei. Доступны все основные модели, есть возможность использовать несколько устройств одновременно, но обратите внимание, что время использования (резервирование) ограниченно.

Cloud debugging так же, как и Cloud testing, находится в разделе Quality.

Crash service

мы не стали интегрировать в наши приложения по ряду причин:


На данный момент мы не нашли решения, позволяющего отслеживать ошибки ANR (Application Not Responding). Если поддержка отчётов по ANR появится в сервисе от Huawei, то мы однозначно рассмотрим опцию его подключения вместо Crashlytics.

Face recognition

У Huawei есть устройства, например Huawei Mate 30 Pro, поддерживающие технологию 3D facial recognition, то есть распознавание по лицу. Судя по нашему опыту, стандартный

не в состоянии использовать функцию распознавания по лицу на таких устройствах.

В нашем приложении Kaspersky Internet Security для Android мы интегрировали сервис LocalAuthentication Engine, чтобы позволить пользователям удобнее разблокировать приложения под защитой. При этом предоставляемый API позволил интегрировать эту возможность без лишних диалогов по сравнению с BiometricPrompt, тем самым улучшая UX.

In-app purchases kit

Покупки на HMS схожи с реализацией от Google. Пользователь оформляет подписку в приложении, HMS выписывают ордер о покупке, в приложении активируется подписка. Далее она продляется в аккаунте пользователя и в продукте. С точки зрения тестирования важно не допустить рассинхронизации этих двух процессов.

В HMS есть возможности покупки и управления подписками через аккаунт Huawei, о которых было написано выше. На них следует обратить особое внимание при разработке и тестировании, чтобы избежать рисков, когда подписка будет активна в аккаунте Huawei, а приложение при этом будет оставаться без лицензии.

Во всех случаях HMS должен нотифицировать приложение об изменении состояния подписки, а оно, в свою очередь, применять это состояние. Если у вас существует внутренняя инфраструктура, которая обрабатывает Huawei In-App нотификации, нужно проверять трехстороннюю интеграцию: приложение <-> HMS <-> внутренняя инфраструктура <-> приложение.

Ниже кратко о том, как проверить тестовые покупки:

1. на HMS-устройстве создать аккаунт Huawei; 

In-app-покупки

Сервис In-App-покупок от Huawei поддерживает подписки и одноразовые покупки, есть возможность регулировать цену и валюту оплаты. С точки зрения интеграции функционально API очень похож по возможностям на сервис In-App-покупок от Google, но есть ряд особенностей, которые повлияли на интеграцию в нашем случае:

  • пользователь может возобновить подписку вне приложения;
  • есть возможность переключиться между подписками (например, с месячной на годовую) вне приложения;
  • существует возможность отложить предстоящий платёж на определённый срок.
Больше про Хуавей:  [РЕШЕНО] Как изменить IMEI на Андроиде 7.0 (8.0), через приложение

Подобные возможности есть и у сервиса от Google, но с опцией отключения.


При работе с покупками в приложении есть возможность получить

, чем у того же Google. К примеру, можно легко узнать, находится пользователь сейчас в периоде бесплатного триала или нет (поле trialFlag).

Естественно, сервис от Huawei предоставляет и серверное API, которое можно использовать для дополнительной проверки покупок и получения всех событий, связанных с одноразовыми покупками и подписками (продление, смена вида подписки, отложенный платёж, ручное продление подписки пользователем и многое другое).

Для тестирования есть возможность использовать тестовые аккаунты. Хотя на таких аккаунтах деньги при покупке не списываются, всё равно требуется наличие привязанного способа оплаты у аккаунта (у Google такого требования нет для тестовых аккаунтов).

Стоит ещё упомянуть, что Huawei достаточно прозрачно описывает политику передачи, хранения, обработки и удаления пользовательских данных. Явно рассматриваются вопросы безопасности и самого SDK. Это относится не только к сервису In-App-покупок, подобная информацию присутствует и для других сервисов Huawei.

Integration check

Инструмент, несомненно, полезен в качестве предрелизной проверки во избежание проблем, которые могут возникнуть с выкладкой в стор. Находится в разделе Quality. Отчёт о проверке выглядит следующим образом:

В целом Huawei предоставляет простые, прозрачные и удобные инструменты для тестирования.

Мы освоили ещё не все возможности, но работаем над этим. Готовимся интегрировать Crash SDK и APM SDK, с нетерпением ждём появления Open Testing (аналога закрытого бета-тестирования).

Map kit

Map Kit мы используем в продукте

для отображения местоположения детей, на чьи устройства установлено приложение, а также для настройки безопасных периметров, при выходе из которых родителям придёт соответствующее оповещение.

Подключение Map Kit в консоли разработчика AppGallery происходит очень просто и описано в соответствующей пошаговой инструкции. Благодаря тому что API в Map Kit идентично аналогу от Google, знакомство с новым компонентом заняло очень мало времени.

Со стороны команды разработки задача по интеграции новых карт свелась к тому, что мы вынесли в отдельный уровень абстракции все примитивы карт, которые у нас используются, а также сам компонент карт. После этого осталось только реализовать нужные классы и методы с использованием Map Kit API, добавить нужный Fragment в зависимости от того, карты какого поставщика мы хотим использовать в данный момент, и передать результат команде тестирования на проверку.

Minimum viable product, или mvp

Наверняка вы слышали и знаете, что означает эта аббревиатура. Ещё одна полезная практика, которая нам нравится. Наша цель — как можно раньше закрыть базовые потребности пользователя и получить фидбэк о продукте. Мы смотрим на результаты работы над прототипом, наши оценки и понимаем, что большую часть основных сценариев можно поддержать в течение месяца.

Всех огорчает то, что в этот месяц никак не уложить поддержку In-App-покупок и функцию защиты от web-угроз в «родном» браузере Huawei (Web Protection). Принимаем решение: в первой версии выпускаем основные сценарии, а вместо In-Аpp-покупок предлагаем опцию покупки через наш сайт.

На вторую версию оставляем In-App-покупки и Web Protection. План готов. Приступаем к разработке. И, конечно, на этапе разработки всплыло ещё много всего интересного и познавательного, об этом подробно написано в следующем разделе, отмечу только, что у нас появился в списке релизов ещё один, третий.

За те пару месяцев, что мы работали над первыми релизами, Huawei продолжал нас радовать новыми интересными возможностями, и после появления функции Face Reсognition мы добавили в продукт возможность разблокировки доступа к определённому приложению через распознавание лица.

Push kit

Советы по работе с экосистемой Huawei от «Лаборатории Касперского» / Блог компании Huawei / Хабр

В наших продуктах используется лишь малая часть функций, предоставляемых сервисом Push Kit: мы используем сервис, чтобы отправить пуш из нашей инфраструктуры в приложение. Для этих нужд мы используем Data Messages — пуши, которые обрабатываются приложением без показа каких-либо нотификаций пользователю.

Поддерживаются и пуши, которые приведут к показу нотификации пользователю с произвольным содержимым и действием, что, в общем-то, будет знакомо с функциональной точки зрения всем пользователям Firebase Cloud Messaging. Что может показаться не так знакомо — необходимость запрашивать явное разрешение на использование части функций, например High-priority data messages позволяет запустить приложение в момент получении пуша, даже если оно не было запущено.

Есть возможность отправки сообщений с девайса на сервер, поддержка пушей в адаптивных сценариях (например, условие отправки — подключение наушников, когда на улице жарко и т. п.).

Интеграция на стороне приложения выглядит достаточно стандартно для пуш-сервисов — инициализируем сервис и получаем уникальный токен, а дальнейшая интеграция нужна только при необходимости использования отдельных возможностей, например обработки data messages.

Интеграция на серверной стороне в нашем случае не составила труда. Для отправки пуша требуется чуть больше идентификаторов, чем у Google, и поля самих пушей чуть иначе называются. В остальном проблем не возникало.

Безопасность сети — решения huawei

Простое, гибкое и эффективное решение Huawei обеспечит безопасность граничных узлов сети ЦОДов, виртуальной сети и сети клиентов-арендаторов. Решение поддерживает полный комплекс функций обеспечения безопасности, функцию опроса ресурсов и функции уровней 4-7.

Интеллектуальные механизмы обеспечат защиту граничных сетевых узлов, узлов сетей арендаторов от известных и неизвестных угроз, а также отправку оповещений о состоянии безопасности. Унифицированное управление всеми ресурсами с применением политик безопасности, гибко настраиваемых в соответствии с изменениями сервисов, сокращают период запуска новых сервисов и время их прерывания.

Больше про Хуавей:  Сервисная платформа Huawei — что это за программа и нужна ли она?

Дальше — геолокация

С аналитикой мы разобрались, в следующей статье покажем как встроить определение геолокации от Huawei в приложение, которое уже использует аналог от Google.

Весь код, который есть в этом цикле статей вы можете посмотреть в репозитории на GitHub. Вот ссылка.

Используем разные реализации аналитики

Если всё вышеописанное верно, то подставлять разные реализации аналитики в разных сборках проще простого.

  1. Указываем, что для huawei flavor-а мы используем одну библиотеку, а для google — другую:
dependencies {
  huaweiImplementation 'com.huawei.agconnect:agconnect-core:1.3.1.300'
  huaweiImplementation 'com.huawei.hms:hianalytics:5.0.0.301'

  googleImplementation 'com.google.firebase:firebase-analytics:17.2.3'
}
  1. В DI биндим для типа Analytics экземпляр класса AnalyticsImpl. Сам же AnalyticsImpl у нас будет в двух вариантах. Один — в папке src/huawei/kotlin/com/example и выглядеть так:
class AnalyticsImpl(context: Context) : Analytics {

    private val analytics = HiAnalytics.getInstance(context)

    override fun send(event: AnalyticsEvent) {
        analytics.onEvent(event.key, event.data.toBundle())
    }
}

Другой в папке src/google/kotlin/com/example:

class AnalyticsImpl(context: Context) : Analytics {
  private val firebaseAnalytics = FirebaseAnalytics.getInstance(context)

  override fun send(event: AnalyticsEvent) {
      firebaseAnalytics.logEvent(event.key, event.data.toBundle())
  }
}

Вот собственно и всё с аналитикой. API библиотек очень похожи и никаких проблем не возникает.

Как должен выглядеть код в уже готовом проекте

Начнём с аналитики. И исходить будем из того, что она у вас спрятана за примерно такой абстракцией:

interface Analytics {
    fun send(event: AnalyticsEvent)
}

interface AnalyticsEvent {

    val key: String

    val data: Map<String, Any>

}

fun Map<String, Any>.toBundle() =
    Bundle().apply {
        forEach { (key, value) ->
            when (value) {
                is String -> putString(key, value)
                is Int -> putInt(key, value)
                is Boolean -> putBoolean(key, value)
                is Double -> putDouble(key, value)
                is Float -> putFloat(key, value)
                else -> throw IllegalArgumentException("Unknown data type: ${value::class.simpleName}")
            }
        }
    }

open class SimpleEvent(override val key: String) : AnalyticsEvent {

    override val data: Map<String, Any> = hashMapOf()

    override fun toString(): String = "AnalyticsEvent { key = $key, data = $data }"
}

open class ParamsEvent(key: String, vararg params: Pair<String, Any>): SimpleEvent(key) {
    override val data = params.toMap()
}

class EventOpenSomeScreen : SimpleEvent("screen_some_screen")

Соответственно, где требуется какое-то событие отправить, вы делаете что-то такое:

@Inject
lateinit var analytics: Analytics

...

analytics.send(EventOpenSomeScreen())

Как правильно выстроить работу

Наше управление уже много лет активно использует различные Agile-практики в процессах разработки. Многие из вас знают, что их 

Первые результаты

У нас были определённые прогнозы по росту нашей пользовательской базы, и на текущий момент они оправдываются, по некоторым продуктам мы растём даже заметно лучше прогнозов.

Обусловлено это, в частности, и тем, что наши коллеги из компании Huawei помогают разработчикам не только в поддержке HMS, но и в продвижении продуктов. Это своего рода синергия — от плотного и плодотворного сотрудничества выигрывают все. 

Чтобы не быть голословными, приведём некоторые цифры: на момент написания статьи наш флагманский продукт Kaspersky Internet Security для Android имел уже больше 5 млн установок.

Не менее радуют и недавно выложенные в AppGallery продукты, например Kaspersky Who Calls за 4 месяца набрал 143 000 инсталляций в Российской Федерации. 

Неплохие результаты, согласитесь, но все основные бенефиты ещё впереди. Темпы роста количества устройств Huawei, в которых основным магазином приложений является AppGallery, с каждым месяцем заметно увеличиваются, а вместе с этим растёт и интерес к нашим продуктам.

Подытожим советами для менеджеров

На этапе анализа / оценивания

  1. воспользуйтесь вот этой статьёй, вы получите точное представление, с каким вашим функционалом могут быть проблемы;
  2. сделайте прототип, попробуйте «заставить» заработать все основные сценарии;
  3. дочитайте эту статью до конца, ниже много полезного, что сэкономит вам много времени. 

Выпускайте функционал итеративно. При приоритизации придерживайтесь следующего плана:

  1. сначала базовый функционал аналитика;
  2. дальше поддержка других важных для вас Kit;
  3. следите за развитием HMS — вполне вероятно, что у вас появятся ещё идеи в результате появления новых фич.

Советы по продвижению


Мы однозначно можем рекомендовать к интеграции сервис Analytics Kit. Это позволит проще анализировать поведение пользователей, а с помощью функционала A/B-тестов можно проверять гипотезы по дальнейшему развитию приложения.

Магазин AppGallery находится в фазе активного набора пользователей, и компания Huawei заинтересована в продвижении зарекомендовавших себя приложений в магазине и помогает разработчикам в этом. Мы также это чувствуем на себе и благодарны Huawei за помощь.

  1. Наши приложения несколько раз получали фичеринг в магазине приложений, за счёт которого пользовательский трафик в наши приложения заметно вырос.  

2. Мы получали awareness пользователей за счёт размещения информации о нас как о партнере на landing-страницах новых смартфонов Huawei.

3. Мы участвовали в маркетинговых акциях с розыгрышем призов от Huawei, привлекали новых пользователей Huawei подарками: трёхмесячным триалом и дополнительными бонусами. 

Также нельзя не отметить, что на начальном этапе развития экосистемы Huawei предоставлял разработчикам ещё большие преференции, например при регистрации аккаунта в AppGallery до конца июня 2020 года в течение первого года давалась нулевая комиссия на покупки в приложениях и всего 15 % для игр.

Советы разработчикам

Huawei предоставляет разработчикам возможность интегрировать большое количество сервисов, которые, по нашему опыту, имеют охват, не просто сравнимый по функционалу с конкурентами, но и местами превосходящий их.

В первую очередь мы советуем вам присмотреться к HMS Toolkit:

1. Если у вас есть продукт, который уже использует сервисы от Google, то вам пригодится автоматический конвертер, который для многих сервисов поддерживает не просто замену сервисов Google на сервисы Huawei, но и генерацию кода для использования и сервисов Huawei, и сервисов от Google одновременно.

2. Даже если вы пишете приложение с нуля, HMS Toolkit поможет упростить процесс интеграции сервисов.

Больше про Хуавей:  ТОП 13 лучших смартфонов Huawei 2021: какой телефон Huawei выбрать? | Экспертные руководства по выбору техники

Помимо документации однозначно стоит пользоваться codelabs. Там приводят примеры пошаговой интеграции разных сервисов с чистого листа.

Далее рассмотрим сервисы, с которыми у нас есть опыт интеграции.

Советы релиз-инженерам

В «Лаборатории Касперского» мы стараемся избегать ручного выполнения рутинных действий и вкладываемся в автоматизацию повторяющихся операций. Один из таких процессов — публикация обновлений наших продуктов в магазины приложений. Все наши процессы строятся на базе Azure DevOps Server (aka TFS), и публикация релизов не исключение. У нас уже несколько лет существует пайплайн для публикации приложений, который мы всячески дополняем и развиваем.

Чтобы поддержать публикацию в Huawei AppGallery, нам нужно было лишь добавить ещё одну среду для публикации. Реализация публикации в новую среду представляет собой последовательное выполнение шагов (задач) для публикации. Каждый шаг — это небольшой плагин для TFS, написанный, как правило, на TypeScript, и принимающий на вход параметры, необходимые для этой задачи.

В нашем случае нужно было реализовать новые шаги:1) загрузить новое приложение (файл APK) и обновления для витрины (тексты) в AppGallery;2) отправить новую версию на ревью.

Само API описано на портале для разработчиков с примерами на Java. Поддержка автоматической публикации продуктов в Huawei AppGallery была похожа на аналогичную задачу для Google Play и не вызвала у нас сложностей. 

Стоит отметить, что на данный момент не поддерживается публикация нескольких APK-файлов (либо мы не нашли упоминание об этой возможности в документации), поэтому итоговый размер приложения для пользователя получается несколько больше, чем он мог бы быть.

Совет: не тяните, подключайте автоматическую публикацию новых версий ваших приложений в AppGallery сразу, чтобы ваши пользователи получали свежие версии ваших продуктов.

Советы тестировщикам

Тестирование приложений на устройствах, поддерживающих только Huawei Mobile Services (далее HMS), во многом схоже с таковым на устройствах с сервисами Google, однако, конечно же, есть своя специфика.

Основываясь на опыте тестирования наших первых релизов для этого стора, хотелось бы обратить внимание на два направления:

  • интеграция с Kit’s от Huawei, которые сменили соответствующие сервисы Google;
  • использование инструментов тестирования, доступных в AppGallery Connect.

Ссылки на страницу приложения в магазине

Для открытия магазина приложений можно использовать схему market://. Например, для приложения Kaspersky Internet Security: market://details?id=com.kms.free.

Такого рода универсальная ссылка позволяет открыть страницу конкретного приложения как в Google Play, так и в AppGallery. В особенности это может быть полезно для открытия Rate Us в магазине приложений или при рекламе других приложений.

Три этапа интеграции в экосистему huawei

Ресурсы любой, даже самой большой компании, ограниченны, и перед руководителями стоит непростой выбор, в какие новые инициативы их инвестировать, — идей и возможностей всегда гораздо больше, чем ресурсов. В «Лаборатории Касперского» мы строим свою стратегию развития продуктов на основе аналитики, экспериментов, валидируем востребованность новшеств путём снятия обратной связи с рынка.

Этап № 1: пилотная выкладка kaspersky internet security для android в appgallery

Мы несколько лет внимательно следили за всеми новшествами от компании Huawei и в 2021 году с появлением магазина приложений AppGallery решили «пощупать его», выложив туда наш флагманский продукт Kaspersky Internet Security для Android (KISA). На первом этапе он ничем не отличался от версии, выкладываемой в Google Play, и мы тестировали сам канал распространения.

Два года назад у Huawei ещё не было такой развитой экосистемы, как сейчас, и подавляющее большинство установок приложений на Android-устройства Huawei осуществлялись из Google Play, а не из AppGallery. Эксперимент это подтвердил, и мы не стали сразу публиковать в AppGallery другие наши продукты, но продолжили сбор метрик и наблюдение за каналом.

Этап № 2: появление hms core

Точкой роста экосистемы, по нашим наблюдениям, стало появление в 2021 году HMS Core, который за два года совершил колоссальный рывок и на текущий момент содержит 56 китов и позволяет решать все нужные нам задачи. С развитием HMS и появлением на рынке устройств, поддерживающих их, а также имеющих на борту в качестве основного магазина приложений AppGallery, мы в начале 2020 года увидели рост интереса к нашим продуктам и всерьёз задумались о поддержке HMS.

Этап № 3: рост популярности hms core

Мы систематически работаем с обратной связью от наших пользователей и заметили, что с весны 2020 года начался постепенный рост обращений от наших лояльных пользователей, приобретающих новые Huawei-устройства без Google Play Services и не нашедших наши продукты в AppGallery. Мы очень чутко прислушиваемся к мнению наших пользователей и больше ждать не могли — к концу мая 2020 все наши

были выложены в AppGallery и мы начали поэтапно переходить на HMS Core, добавляя в продукты новые возможности, предоставляемые экосистемой.

Итак, теперь вы понимаете логику принятия решения. Время перейти к следующему блоку, который, на наш взгляд, поможет проектным и продуктовым менеджерам правильно выстроить работу по интеграции в экосистему Huawei.

1 Звездаслабоватона троечкухорошо!просто отлично! (1 оценок, среднее: 5,00 из 5)
Загрузка...

Расскажите нам ваше мнение:

Ваш адрес email не будет опубликован. Обязательные поля помечены *