ym88659208ym87991671
Порядок подключения СберВизор в мобильное-приложение (Android) | Документация для разработчиков

Порядок подключения СберВизор в мобильное-приложение (Android)

Обновлено 20 декабря 2023

Мы рекомендуем придерживаться описанного порядка и настроек при подключении сервиса СберВизор.

Инициализация библиотеки на Android

Для подключения мобильного приложения на базе Android к SberVisor (старое название "СберАналитика") нужно скачать и включить в свой проект SDK (https://sberbank.ru/dl/sa/androidsdk.zip).

SDK для Android представляет из себя подключаемый .aar модуль.

Как подключить

implementation(name: 'clickstreamlib-X.X.X', ext: 'aar')

implementation('com.squareup.okhttp3:okhttp:4.9.1')

implementation('com.fasterxml.jackson.core:jackson-databind:2.9.8')

Описание классов:

Все основные сущности SDK находятся в пакете ru.sberbank.mobile.clickstream

Основные классы:

КлассОписаниеПакет
SberbankAnalyticsБазовый класс сбербанк аналитикиru.sberbank.mobile.clickstream.boundary
AnalyticsProfileCollectorКласс для хранения информации о профиле пользователя в отправляемых данныхru.sberbank.mobile.clickstream.meta
AnalyticsMetaCollectorКласс для хранения метаинформации об отправляемых данныхru.sberbank.mobile.clickstream.meta
SberbankAnalyticsEventСобытие для его передачи в систему аналитикиru.sberbank.mobile.clickstream.models.data
SberbankAnalyticsConstantsКлючи для настройки событияru.sberbank.mobile.clickstream
DefaultNetworkFactoryКласс для работы аналитики с сетью. Реализует интерфейс NetworkFactory.ru.sberbank.mobile.clickstream.factory

Блок импорта основных классов

import ru.sberbank.mobile.clickstream.SberbankAnalyticsConstants; import ru.sberbank.mobile.clickstream.boundary.ISberbankAnalytics; import ru.sberbank.mobile.clickstream.boundary.SberbankAnalytics; import ru.sberbank.mobile.clickstream.configuration.SberbankAnalyticsConfigurator; import ru.sberbank.mobile.clickstream.configuration.SberbankAnalyticsDefaultConfigurator; import ru.sberbank.mobile.clickstream.configuration.SberbankAnalyticsDefaultConfiguratorManager;

import ru.sberbank.mobile.clickstream.factory.DefaultNetworkFactory; import ru.sberbank.mobile.clickstream.network.AnalyticsEventSender; import ru.sberbank.mobile.clickstream.network.OkHttpAnalyticsEventSender; import ru.sberbank.mobile.clickstream.network.parser.AnalyticsJacksonParser; import ru.sberbank.mobile.clickstream.meta.AnalyticsMetaCollector; import ru.sberbank.mobile.clickstream.meta.AnalyticsProfileCollector; import ru.sberbank.mobile.clickstream.models.data.SberbankAnalyticsEvent;

Принцип использования

  • Создать необходимые объекты AnalyticsMetaCollector, AnalyticsProfileCollector, DefaultNetworkFactory

  • Создать экземпляр класса SberbankAnalytics.Builder, передав в конструктор контекст приложения

  • У Builder вызвать set-методы для созданных объектов и необходимых опций

  • Вызвать метод buildи получить экземплярSberbankAnalytics

  • Создать экземпляр класса SberbankAnalyticsEvent и настроить событие

  • Отправить созданное событие c помощью метода sendEventилиSberbankAnalytics.sendSensetiveEvent

Пример использования (в Application классе)

//Инициализация необходимых объектов
AnalyticsMetaCollector metaCollector = new AnalyticsMetaCollector();
AnalyticsProfileCollector profileCollector = new AnalyticsProfileCollector();
DefaultNetworkFactory networkFactory = new DefaultNetworkFactory();
//Создание объекта аналитики
ISberbankAnalytics sberbankAnalytics = new SberbankAnalytics.Builder(this)
.setAnalyticsMetaCollector(metaCollector, profileCollector)
.setNetworkFactory(networkFactory)
.setAnalyticsDbEnabled(false)
.setCustomUrl("https://someurl")
.build();
//Добавление мета и профайл данных в коллекторы
Map<String, String> profileData = new HashMap<>();
profileData.put("someKey", "someValue");
Map<String, String> metaData = new HashMap<>();
metaData.put("someKey", "someValue");
profileCollector.update(profileData);
metaCollector.update(metaData);
...
// Создание объекта события
SberbankAnalyticsEvent event = new SberbankAnalyticsEvent("eventName");
Map<String, String> eventParams = new HashMap<>();
eventParams.put("someParamKey", "someParamValue");
event.addData(eventParams);
//Отправление события
sberbankAnalytics.sendEvent(event);

Настройка основных параметров класса SberbankAnalytics:

Настройка объекта аналитики производится вызовом методов класса SberbankAnalytics.Builder. Настройки указываются через следующие методы конфигуратора:

НастройкаМетодОписаниеТип значения
Коллектор мета-данных и данных профиляsetAnalyticsMetaCollectorЗадает хранилище мета-данных для отправкиAnalyticsMetaCollector + AnalyticsProfileCollector
Сетевой слой аналитикиsetNetworkFactoryПредоставляет возможность задать свою фабрику для сетевого слоя аналитики. Рекомендуется использовать DefaultNetworkFactory.NetworkFactory
Адрес для отправки событийsetCustomUrlАдрес сервера сервиса, куда будут отправляться события. Задается так как может отличаться.Строка
Использование БД для хранения событийsetAnalyticsDbEnabledвключает БД для хранения нечувствительных событий; false - отключает БД, т.е. вообще никакие события не будут сохраняться в БДЛогическое значение
Время хранения событий в базе данных при ее использованииsetClearDaysCountПредоставляет возможность установить количество дней, в течение которых события будут храниться в БДЧисло

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

Событие состоит из блоков с редко меняющейся информацией metaиprofile. Для их настройки используются специализированные коллекторы. Важно - в текущей версии SDK задавать данные коллекторов меты и профиля (методы update) нужно послевыполнения методаSberbankAnalytics.Builder! Иначе данные коллекторов не попадут в пакеты.

Коллекторы профиля и метаинформации

Коллекторы служат для хранения необходимой для пакета информации. Для этого используются классы AnalyticsProfileCollectorиAnalyticsMetaCollector. После создания и настройки их необходимо передать в SberbankAnalytics.Builder. Настройка коллекторов производится вызовом метода update с передачей Map\<string, string> в качестве аргумента.

Параметры, задаваемые с помощью meta коллектора

Ключ параметраОписаниеСпособ заполненияОбязателен?
systemLanguageСистемный язык на устройствеimport java.util.Locale; Locale.getDefault().toString()да
screenSizeРазмер экрана устройстваDisplayMetrics metrics = context.getResources().getDisplayMetrics(); metrics.heightPixels + "x" + metrics.widthPixels;да
sberIdУникальный код SberId, выдаваемый партнерупродукту системой SberbankIDПри инициализациида
platformПлатформа в которой работает sdk= "MOBILE"да
operationSystemVersionВерсия операционной системыString.valueOf(android.os.Build.VERSION.SDK_INT)да
operationSystemТип операционной системы"Android"да
deviceVendorПроизводитель устройстваString.valueOf(Build.MANUFACTURER)да
deviceModelМодель устройстваString.valueOf(Build.MODEL)да
deviceMemorySizeКоличество памяти в устройствеimport android.os.Environment; String.valueOf(Environment.getExternalStorageDirectory().getTotalSpace())да
browserНе несет полезной нагрузки, но нужно заполнить"Android"да
apiKeyУникальный идентификатор продукта (выдается командой Сбервизор)При инициализациида

Пример указания параметра

AnalyticsMetaCollector metaCollector = new AnalyticsMetaCollector();

/** Передача в аналитику коллектора метаинформации */
builder.setAnalyticsMetaCollector(metaCollector, profileCollector);

/** Заполнение метаинформации */
Map<String, String> metaMap = new Hashmap<>();
metaMap.put("apiKey", "45834096-5765746893075477-6576")
metaCollector.update(metaMap);

Параметры, задаваемые с помощью profile коллектора

Ключ параметраОписаниеСпособ заполненияБудет автоматизировано в будущих версиях
deviceIdУникальный ID установки приложения на устройствоmProfileCollector.updateвероятно
sessionIdID сессииmProfileCollector.update
appIdИдентификатор клиента в системе партнераmProfileCollector.update
subIdИдентификатор, который выдает единый сервис sberbank в процессе авторизации через SberbankIDmProfileCollector.update
adIdДополнительный Идентификатор клиента партнера Рекламный идентификатор. iOS - IDFA Android - gaidmProfileCollector.update
appVersionВерсия приложенияmProfileCollector.updateвероятно
applicationLanguageЯзык в приложенииcontext.getResources(). getConfiguration(). locale.getLanguage()да

Указание параметров в профайл-коллекторе аналогично мета-коллектору.

Настройка события

В качестве события используется класс SberbankAnalyticsEvent, который принимает Map\<String, String> для настройки. Строго определенные ключи хранятся в классе SberbankAnalyticsConstants.

Те ключи, которые не соответствуют ключам из класса SberbankAnalyticsConstants попадают в свойства события, которые представляют собой элемент "Ключ-значение".

идентификатор параметра событияОписание параметраКлюч**из SberbankAnalyticsConstants**Способ заполнения
eventActionНазвание событияОтсутствует, так как задается в конструктореРучной, в зависимости от бизнеса
eventTypeТип событияEVENT_TYPEРучной, в зависимости от бизнеса
valueЗначение событияVALUEРучной, в зависимости от бизнеса
eventCategoryКатегория событияEVENT_CATEGORYРучной, в зависимости от бизнеса
geoLatitudeШирота устройстваGEO_LATITUDELocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { return manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); } else if (manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { return manager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } else if (manager.isProviderEnabled(LocationManager.PASSIVE_PROVIDER)) { return manager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); } String.valueOf(location.getLatitude())
geoLongitudeДолгота устройстваGEO_LONGITUDE// Аналогично geoLatitude String.valueOf(location.getLongitude()
cellularProviderИнтернетпровайдерCELLULAR_PROVIDERTelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String carrierName = manager.getNetworkOperatorName();
batteryLevelУровень заряда аккумулятораBATTERY_LEVELimport android.os.BatteryManager; // Intent.ACTION_BATTERY_CHANGED int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); String.valueOf(100 * level / (float) scale)
connectionTypeТип интернет соединенияCONNECTION_TYPE"CELLULAR" | "WIFI"
appVersionВерсия приложенияAPP_VERSION
internalIPIP адрес устройстваINTERNAL_IP

Настройка отправляемого события:

SberbankAnalyticsEvent event = new SberbankAnalyticsEvent("eventName");
Map<String, String> eventParams = new HashMap<>();
eventParams.put(SberbankAnalyticsConstants.EVENT_TYPE, UserActionEventType.CLICK);
eventParams.put(SberbankAnalyticsConstants.VALUE, "someValue");
eventParams.put("someParamKey", "someParamValue");
event.addData(eventParams);

Разметка приложения

Разметка приложения представляет собой вызов метода sendEventилиsendSensetiveEvent при совершении целевого действия. Метод sendSensetiveEvent используется для отправки событий, содержащих чувствительную для пользователя информацию. При его использовании событие не будет сохранено в БД, а при поступлении такого события все накопленные до этого момента события будут отправлены немедленно.

Пример отправки события

ISberbankAnalytics sberbankAnalytics = new SberbankAnalytics.Builder(this)
.setAnalyticsMetaCollector(metaCollector, profileCollector)
.setNetworkFactory(networkFactory)
.setAnalyticsDbEnabled(true)
.setCustomUrl("https://someurl")
.build();
SberbankAnalyticsEvent event = new SberbankAnalyticsEvent("event");
sberbankAnalytics.sendEvent(event);

В качестве параметров события помимо кастомных используются:

  • EVENT_NAME - имя события

  • EVENT_TYPE - тип события, опционально

  • EVENT_VALUE - значение события, опционально

Доступные типы событий (из UserActionEventType):

  • CLICK - клик по элементу пользовательского интерфейса

  • SHOW - показ экрана

  • COPY - копирование информации из поля

  • DELETE - удаление информации из поля

  • FOCUS - фокусировка на элементе

  • INPUT - ввод информации в редактируемое поле

  • PASTE - вставка информации в редактируемое поле

  • START_DRAGGING - начало движения слайдера

  • STOP_DRAGGING - конец движения слайдера

  • UNFOCUS - смена фокусировки внимания с элемента

  • UNKNOWN - неизвестный тип

Использование совместно с SberID SDK (Sberbank SDK)

Если у вас в проекте уже используется Sberbank SDK, то вам не не нужно подключать SberVisor SDK (он уже встроен), так как иначе будет конфликт имен. Нужно следовать инструкции, за исключением подключения самого файла SDK.

Использование proguard

-dontwarn com.squareup.okhttp3.** -keep class com.squareup.okhttp3.* { *;}

Зафиксированные проблемы и их решения

Зафиксированная проблемаРешение
1зависимости от Yandex . Metrica
2При подставке продовского адреса в конфигурации, Вылетает ошибка 2022-03-18 18:26:40.023 4537-4654/ru.sberins.insureapp.android.debug W/System.err: java.util.concurrent.ExecutionException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.SortedMap ru.sberbank.mobile.clickstream.db.processor.entities.SberbankAnalyticsMetaDBEntity.getMetaMap()' on a null object referenceОтключить БД в AndroidSDK с помощью метода setAnalyticsDbEnabled( false )
3Конфликт с Sberbank SDKИсключить AndroidSDK из проекта , но все import’ы оставить, так как Sberbank SDK уже содержит все классы Andriod SDK.
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.