Skip to content

Интеграция Firebase Analytics

Andrey edited this page Oct 20, 2016 · 21 revisions

Интеграция Firebase Analytics

Получение файла конфигурации

Для встраивания fireBase в свой проект вам понадобится файл конфигурации для данного проекта. Его можно получить следующим образом:

  1. Создайте проект в консоли FireBase

  2. Нажмите на значок шестеренки и выберите Настройки проекта.

  3. Откройте карту Ваши приложения и найдите на ней идентификатор пакета приложения, файл конфигурации которого нужно скачать.

  4. Нажмите иконку скачивания google-services.json.

Далее скопируйте данный файл в каталог app/. вашего приложения

Добавление SDK

Для подключения sdk к вашему проекту вам необходимо в корневой файл build.gradle добавить библиотеку гугл сервисов

buildscript {
    // ...
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

Далее в файл проекта app/build.gradle нужно добавить :

apply plugin: 'com.android.application'

android {
  // ...
}

dependencies {
  // ...
  compile 'com.google.firebase:firebase-core:9.6.1'
  // Getting a "Could not find" error? Make sure you have
  // the latest Google Repository in the Android SDK manager
}

// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'

Инициализация аналитики

Для дальнейшего удобства опишем класс настройки объекта аналитики и его получения

public class FirebaseAnalyticsInstance {
    private final FirebaseAnalytics mAnalytics;

    public FirebaseAnalyticsInstance(MyApplication application) {
        mAnalytics = FirebaseAnalytics.getInstance(application.getApplicationContext());
        configurFirebaseAnalytics(application);
    }

    public FirebaseAnalytics getAnalyticsInstance() {
        return mAnalytics;
    }

    private void configurFirebaseAnalytics(MyApplication application) {
        // userId - идентификатор пользователя , для более удобного и информативного треккинга
        String userId = Integer.toString(application.getUserID());
        mAnalytics.setUserId(userId);
    }
}

Его инициализацию необходимо произвести в вашем классе Application, в методе onCreate()

@Override
public void onCreate() {
    super.onCreate();
    mFirebaseAnalyticsInstance = new FirebaseAnalyticsInstance(this);
}

Также в Application необходимо описать метод получения объекта аналитики:

public FirebaseAnalytics getmFirebaseAnalytics() {
    return mFirebaseAnalyticsInstance.getAnalyticsInstance();
}

Автоматически собираемые события

Следующий список событий будет отправляться автоматически и не требует вмешательства разработчика:

Наименование события Когда происходит
first_open Первый раз когда пользователь открывает приложение после установки/переустановки приложения.
in_app_purchase При inApp оплате пользователем через App Store на iTunes или Google Play. product ID, product name, currency, и quantity отправляются в качестве параметров. Такие события как возврат денег не отслеживаются, поэтому данные в Google Play Developer Console и аналитике могут отличаться
user_engagement Периодически, когда работает приложение
session_start Когда пользователь включает приложение на длительность превышающую минимальную длительность сессии, после простоя, приведшего к таймаут сессии.
app_update Когда происходит апдейт на новую версию и запуск приложения. Id предыдущей версии отправляется как параметр
app_remove Когда приложение удалено с устройства. This event is different from the Daily uninstalls by device and Daily uninstalls by user metrics, which are both reported by Google Play Developer Console. The app_remove event counts the removal of application packages, regardless of the installation source, and the count changes depending on the date range you are using for the report. The Daily uninstalls by device and Daily uninstalls by user metrics count the removal of application packages only when they were installed from Google Play, and are reported on a daily basis.
os_update Когда пользователь обновляет ОС. Предыдущая версия отправляется в качестве параметра
app_clear_data Когда пользователь чистит или сбрасывает данные приложения, сбрасывает настройки.
app_exception Когда приложение выбрасывает исключение.
notification_foreground Когда нотификация, отправленная при помощи Firebase Notifications, принята, и приложение запущено.
notification_receive Когда нотификация, отправленная при помощи Firebase Notifications, принята, и приложение свернуто.
notification_open Когда пользователь открывает нотификацию, отправленную при помощи Firebase Notifications.
notification_dismiss Когда пользователь отменяет нотификацию, отправленную при помощи Firebase Notifications.
dynamic_link_first_open Когда пользователь в первый раз открывает приложение через dynamic link.
dynamic_link_app_open Когда пользователь открывает приложение через dynamic link
dynamic_link_app_update Когда пользователь обновляет приложение через dynamic link

Обработка собственных событий

Для удобства обработки собственных событий введем новый класс описывающий событие:

public class FirebaseEvent {
    final String mEventName;
    final Map<String, String> mEventValues;

    public FirebaseEvent(Builder builder) {
        mEventName = builder.mEventName;
        mEventValues = builder.mEventValues;
    }

    public static class Builder {
        final String mEventName;
        final Map<String, String> mEventValues;

        Builder (String eventName) {
            mEventName = eventName;
            mEventValues = new HashMap<>();
        }

        public FirebaseEvent.Builder addParameter(String parameterName, String value) {
            mEventValues.put(parameterName, value);
            return this;
        }

        public FirebaseEvent create() {
            return new FirebaseEvent(this);
        }
    }

    public void commit(MyApplication application) {
        Bundle params = new Bundle();
        for (Map.Entry<String, String> entry : mEventValues.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            params.putString(key, value);
        }
        FirebaseAnalytics analytics = application.getmFirebaseAnalytics();
        analytics.logEvent( mEventName, params );
    }
}

Пример использования в приложении с использованием событий встроенных в FireBase:

new FirebaseEvent.Builder(FirebaseAnalytics.Event.SELECT_CONTENT)
    .addParameter(FirebaseAnalytics.Param.ITEM_ID, mId)
    .addParameter(FirebaseAnalytics.Param.ITEM_NAME, mName)
    .addParameter(FirebaseAnalytics.Param.CONTENT_TYPE, mContent)
    .create()
    .commit(getApplication());

Пример использования в приложении с использованием собственных событий:

new FirebaseEvent.Builder("image_info")
    .addParameter("image_name", mName)
    .addParameter("image_size", mSize)
    .create()
    .commit(getApplication());

Треккинг открытия экрана

Для отслеживания переходов на экраны можно отправлять следующее событие из метода onCreate интересующих нас экранов:

new FirebaseEvent.Builder(FirebaseAnalytics.Event.SELECT_CONTENT)
    .addParameter(FirebaseAnalytics.Param.CONTENT_TYPE, "screen")
    .addParameter(FirebaseAnalytics.Param.ITEM_ID, НАИМЕНОВАНИЕ_ЭКРАНА)
    .create()
    .commit(getApplication());

Или, если нам необходимо отслеживать открытие всех активити, в методе у Application, который implements Application.ActivityLifecycleCallbacks

@Override
public void onActivityStarted(Activity activity) {
     new FirebaseEvent.Builder(FirebaseAnalytics.Event.SELECT_CONTENT)
        .addParameter(FirebaseAnalytics.Param.CONTENT_TYPE, "screen")
        .addParameter(FirebaseAnalytics.Param.ITEM_ID, НАИМЕНОВАНИЕ_ЭКРАНА)
        .create()
       .commit(getApplication());
}

Предустановленные типы событий и их параметры

Существует список событий (перечислены в классе FirebaseAnalytics.Event) и соответствующих им параметров (перечислены в классе FirebaseAnalytics.Param). Вот некоторые из них, которые могут быть полезны:

Базовые события применимые ко всему приложению

Наименование Когда использовать Соответствующие параметры
FirebaseAnalytics.Event.SELECT_CONTENT Когда юзер открывает какой-то контент в приложении. можно использовать для треккинга открытия экрана FirebaseAnalytics.Param.CONTENT_TYPE, FirebaseAnalytics.Param.ITEM_ID
FirebaseAnalytics.Event.SHARE Когда пользователь делится какой-то информацией в приложении FirebaseAnalytics.Param.CONTENT_TYPE, FirebaseAnalytics.Param.ITEM_ID
FirebaseAnalytics.Event.SIGN_UP Когда пользователь регистрируется в системе. Позволяет увидеть способ регистрации (Google account, email address, итп.) FirebaseAnalytics.Param.SIGN_UP_METHOD
FirebaseAnalytics.Event.SEARCH Когда пользователь ищет что-либо в приложении FirebaseAnalytics.Param.SEARCH_TERM

Электронная торговля

Наименование Когда использовать Соответствующие параметры
FirebaseAnalytics.Event.ADD_PAYMENT_INFO Когда пользователь вводит billing информацию без параметров
FirebaseAnalytics.Event.VIEW_ITEM Когда пользователь просматривает конкретный товар/предложение FirebaseAnalytics.Param.ITEM_ID, FirebaseAnalytics.Param.ITEM_LOCATION_ID
FirebaseAnalytics.Event.VIEW_ITEM_LIST Когда пользователь просматривает список товаров/предложений FirebaseAnalytics.Param.ITEM_CATEGORY
FirebaseAnalytics.Event.VIEW_SEARCH_RESULTS Когда пользователь просматривает результат поиска FirebaseAnalytics.Param.SEARCH_TERM
FirebaseAnalytics.Event.ECOMMERCE_PURCHASE Когда пользователь совершает оплату FirebaseAnalytics.Param.COUPON, FirebaseAnalytics.Param.CURRENCY, FirebaseAnalytics.Param.VALUE, FirebaseAnalytics.Param.TAX, FirebaseAnalytics.Param.SHIPPING, FirebaseAnalytics.Param.TRANSACTION_ID
FirebaseAnalytics.Event.PURCHASE_REFUND Когда произошел возврат FirebaseAnalytics.Param.QUANTITY, FirebaseAnalytics.Param.CURRENCY, FirebaseAnalytics.Param.VALUE, FirebaseAnalytics.Param.TRANSACTION_ID
FirebaseAnalytics.Event.ADD_TO_CART Когда пользователь добавляет в корзину FirebaseAnalytics.Param.QUANTITY, FirebaseAnalytics.Param.ITEM_CATEGORY, FirebaseAnalytics.Param.ITEM_NAME, FirebaseAnalytics.Param.ITEM_ID, FirebaseAnalytics.Param.ITEM_LOCATION_ID, FirebaseAnalytics.Param.VALUE, FirebaseAnalytics.Param.PRICE, FirebaseAnalytics.Param.CURRENCY
FirebaseAnalytics.Event.BEGIN_CHECKOUT Когда пользователь начинает оплату FirebaseAnalytics.Param.COUPON, FirebaseAnalytics.Param.CURRENCY, FirebaseAnalytics.Param.VALUE
FirebaseAnalytics.Event.ADD_TO_WISHLIST Когда пользователь добавляет вещь в wishlist FirebaseAnalytics.Param.QUANTITY, FirebaseAnalytics.Param.ITEM_CATEGORY, FirebaseAnalytics.Param.ITEM_NAME, FirebaseAnalytics.Param.ITEM_ID, FirebaseAnalytics.Param.ITEM_LOCATION_ID, FirebaseAnalytics.Param.VALUE, FirebaseAnalytics.Param.PRICE, FirebaseAnalytics.Param.CURRENCY
FirebaseAnalytics.Event.GENERATE_LEAD FirebaseAnalytics.Param.VALUE, FirebaseAnalytics.Param.CURRENCY

Данные о пользователе

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

Наименование Тип Описание
Age Text Identifies users by six categories: 18-24, 25-34, 35-44, 45-54, 55-64, and 65+
App Store Text The store from which the app was downloaded and installed.
App Version Text The versionName (Android) or the Bundle version (iOS)
Country Text The country the user resides in.
Device Brand Text The brand name of the mobile device (e.g. Motorola, LG or Samsung)
Device Category Text The category of the mobile device (e.g. mobile or tablet)
Device Model Text The mobile device model name (e.g. iPhone 5s or SM-J500M)
First Open Time Number The time (in microseconds, UTC) at which the user first opened the app
Gender Text Identifies users as either male or female.
Interests Text Lists the interests of the user, e.g. "Arts & Entertainment, Games, Sports"
Language Text The language setting of the device OS (e.g. en-us or pt-br)
New/Established N/A New: First opened the app within the last 7 days. Established: First opened the app more than 7 days ago.
OS Version Text The version of the device OS (e.g. 9.3.2 or 5.1.1)

Также можно добавлять и собственные данные о пользователе. Для этого необходимо:

  • Зарегистрировать данное свойство в консоли FireBase
  • Добавить передачу данного свойства. Для этого необходимо в классе FirebaseAnalyticsInstance в методе configurFirebaseAnalytics добавить запись свойства:
mFirebaseAnalytics.setUserProperty(НАИМЕНОВАНИЕ_СВОЙСТВА, ЗНАЧЕНИЕ_СВОЙСТВА);