Встраиваем аналитику от Huawei в Android приложение

    image


    В прошлой статье мы создавали аккаунт разработчика для использования Huawei Mobile Services и подготавливали проект к их использованию. Теперь пора приступить к встраиванию конкретных сервисов.


    Вот полный список статей из цикла:


    1. Создаём аккаунт разработчика, подключаем зависимости, подготавливаем код к внедрению. тык
    2. Встраиваем Huawei Analytics. ← вы тут
    3. Используем геолокацию от Huawei.
    4. Huawei maps. Используем вместо Google maps для AppGallery.

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


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


    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())

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


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


    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 библиотек очень похожи и никаких проблем не возникает.


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


    Также, очень удобно можно проверить, что 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.

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


    image


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


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


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

    Средняя зарплата в IT

    111 380 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 7 299 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 10

      0
      А что мешает в приложение, которые мы ставим в AppGallery, запилить GA и Firebase? Или Google понимает, что запущено МОЕ приложение на Huawei и режет аналитику?
        0

        Дело в том, что на новых девайсах от Huawei нет сервисов от гугла. Засим, всё что с ними связано работать не будет. В т.ч. аналитика. Можно, конечно, поставить вручную сервисы от гугла, однако это зачастую нетривиальная задача и вот в таких случаях гугл да, может это отслеживать и вмешиваться в работу своих сервисов, например их отключая

          0
          Хм… Допустим, у меня есть приложение под Андроид. В него встроена SDK Google Analytycs. Решил расширить воронку, и выйти на AppGallery. Что произвойдет? Мне нужно выпилить SDK GA? Или SDK будет работать, но GA не будет принимать ивенты от приложения?
            0

            Выпиливать SDK не обязательно. Можно одновременно использовать несколько сервисов аналитики (что является довольно распространённой практикой). А вот будет ли оно (отправка аналитики через GA) работать — зависит от наличия на девайсе, на который будет приложение установлено, сервисов от гугла. Если сервисы есть — аналитика будет работать. Иначе — не должна) Сам факт того, откуда установлено приложение гугл, в данный момент, насколько мне известно, не волнует. Но они, конечно, могут начать блокировать работу своих сервисов по любым причинам в любой момент.

              0

              А почему это SDK аналитики не должна работать? Санкции? Ну так весь андроид напичкан гугловым API, но работает же?

                0

                На новых девайсах Huawei не может предустанавливать гугловые сервисы, а их установка вручную — по идее — нарушение лицензии. Соответственно, гугл в праве эти нарушение пресекать, отслеживая девайсы и отключая функционал своих сервисов. В интернете по этому поводу довольно много информации, беглое гугление например такую статейку выдало, с упоминанием проблемы: https://www.forbes.com/sites/zakdoffman/2020/03/15/huawei-mate-30-and-p40-now-have-surprise-one-click-google-install-heres-what-you-must-know/#8af18b27cf30

                  +1
                  Так SDK Google Analytycs идет как часть устанавливаемого приложения (не гуглового). Всё, что делает это SDK — делает запросы на домены Google. Любой Браузер точно также делает запросы на домены Google.

                  Теперь на девайсах Huawei нет ни одного браузера? Или firewall из коробки настроен так чтобы любой гугловый IP был недоступен?
                    0

                    Кажется, я понял о чём вы)


                    Будет работать или нет, на девайсе без гугло-сервисов не пробовал. И под аналитикой имел в виду Firebase аналитику. Попробую в свободное время проверить, будет ли аналитика работать на девайсе без гугло-сервисов и напишу тут.

                      0
                      я рад :)
                      Да, говорим гугл аналитика и подразумеваем Firebase уже давно как. У самого huawei телефон, но еще с гугл сервисами, проверить не могу. Если вам не трудно, то как проверите можно попросить вас написать о результате?
                        +1

                        Не все функуиональности от Firebase зависят от сервисов Google Play.
                        Например, Firebase аналитика будет работать, но не в полном объеме.
                        Подробно можно почитать здесь

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

      Самое читаемое