- PVSM.RU - https://www.pvsm.ru -

Минус одна система аналитики данных

Количество систем аналитики и визуализации данных, необходимых для повседневной работы, давно превысило все разумные пределы. С появлением Firebase их стан пополнился на одну. В данной статье мы расскажем как подружить мобильную платформу от Google с другим, более привычным инструментом аналитики — Google Analytics. Площадкой для экспериментов стал наш новый продукт Tviggo (мобильное приложение + набор мессенджер ботов для международных звонков по GSM — www tviggo. net).

Минус одна система аналитики данных - 1

Насколько вам известно, Google Tag Manager (GTM) в декабре 2016 выпустил обновление — GTM V5 для iOS и Android, заточенное под работу с Firebase. В настоящее время, реальных примеров кода использования 5 версии практически нет, поэтому помимо достаточно скудного напутствия на странице Quick Start необходимо собирать информацию по крупицам. Так, одним из важных отличий от v4 и более ранних версий является порядок инициализации GTM. Теперь от разработчика не требуется писать никакого boilerplate кода по инициализации и надо забыть о loadContainerPreferNonDefault. В то же время, можно сосредоточиться только на отправке событий в Firebase, не забыв при этом поместить в assets/containers JSON файл с базовой версией контейнера, который можно скачать из GTM сразу после первой публикации.

Firebase может передавать GTM любое имя события и параметры (помимо всех штатных [1] которые генерируются приложением автоматически) для сбора аналитических данных по приложению.

Посредством логики GTM, данные события могут транслироваться во внешние системы, такие как Google Analytics.
Для осуществления подобной манипуляции, необходимо в коде, в местах, принципиальных для контроля аналитикой, расставить параметры для выгрузки данных в Firebase (например, отгрузка события “Start” с параметрами A=1, B=2).

Далее, в GTM необходимо завести переменные A и B, настроить конфигурацию переменной, затем завести триггер (например, “запуск приложения”), и создать тег (например, как только Firebase вызовет событие Start — необходимо выгрузить в GA заданный контент).

Теперь визуально и пошагово:

1. Заводим пользовательскую переменную

Минус одна система аналитики данных - 2

2. Прописываем конфигурацию переменной

Минус одна система аналитики данных - 3

3. Заводим триггер

Минус одна система аналитики данных - 4

4. Создаем тег

Минус одна система аналитики данных - 5

В коде приложения аналогично описываем, заведенные в GTM параметры и события в удобной для дальнейшего использования обертке:

class TviggoAnalytics(context: Context) {

   val TviggoStart = Event("TviggoStart")

   object Params {
       val call_uid = Param("call_uid")
       val call_medium = Param("call_medium")
   }

   private val firebase: FirebaseAnalytics = FirebaseAnalytics.getInstance(context)

   inner class Event(val name: String) {

       fun push(vararg params: Pair<Param, Any?>) {
           push(HashMap<Param, Any>() + params)
       }

       fun push(baseParams: Map<Param, Any?>, vararg params: Pair<Param, Any?>) {
           push(baseParams + params)
       }

       fun push(params: Map<Param, Any?>) {
           val bundle = Bundle()
           params.forEach {
               if (it.value != null) {
                   when (it.value) {
                       is String -> bundle.putString(it.key.name, it.value as String)
                       is Int -> bundle.putInt(it.key.name, it.value as Int)
                       is Long -> bundle.putLong(it.key.name, it.value as Long)
                       is Float -> bundle.putFloat(it.key.name, it.value as Float)
                       is Byte -> bundle.putByte(it.key.name, it.value as Byte)
                       is Short -> bundle.putShort(it.key.name, it.value as Short)
                       is Double -> bundle.putDouble(it.key.name, it.value as Double)
                       is Boolean -> bundle.putBoolean(it.key.name, it.value as Boolean)
                       is Char -> bundle.putChar(it.key.name, it.value as Char)
                       else -> bundle.putString(it.key.name, it.value.toString())
                   }
               }
           }
           firebase.logEvent(name, bundle)
       }
   }

   class Param(val name: String)
}

И далее, допустим в классе Application, при создании экземпляра приложения, прописываем отправку в Firebase события с параметром Идентификатора звонка равным 2.

val analytics = TviggoAnalytics(applicationContext)

override fun onCreate() {
   super.onCreate()
   analytics.TviggoStart.push(
           TviggoAnalytics.Params.call_uid to 2,
           TviggoAnalytics.Params.call_medium to "GSM"
   )
}

Параметр “идентификатор звонка” использован для примера — на самом деле никакого идентификатора звонка в момент старта еще нет.

Что получаем в итоге:
1. Выполнено некоторое действие в приложении, отчет о выполнении которого мы и видим в GA, посредством трансформации исходного события Firebase через контейнер Google Tag Manager.

Минус одна система аналитики данных - 6

2. Если проанализировать еще глубже, мы увидим, что в Label отобразился созданный нами параметр со значением 2 (именно так как это указано в теге).

Минус одна система аналитики данных - 7

3. При этом, все оригинальные события в начальном виде также загружаются в Firebase.

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

Подобная система позволяет оперативно править выгрузки в GA без пересборки приложения.

Надеюсь, объяснение было понятным и полезным для хабро-сообщества.

P.S. да, наш проект написан на Kotlin, поэтому Android код будет выглядеть не совсем привычно, но, думаю, Вы справитесь :)

С радостью отвечу на ваши вопросы!

Автор: janet03

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/kotlin/233132

Ссылки в тексте:

[1] штатных: https://support.google.com/firebase/answer/6317485?hl=ru

[2] Источник: https://habrahabr.ru/post/319504/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best