Перейти к основному содержимому

Библиотека и Android-приложение

Краткое содержание
  • Подходит для библиотек, интегрируемых в приложения с МТС Аналитикой, и приложений, передающих данные в МТС Аналитику.
  • Ранее SDK мог вызывать конфликты версий, но новый способ позволяет избежать этого, встраивая SDK только в приложение через интерфейс AnalyticsHostDelegate.

Порядок действий для библиотек

  • Шаг 1. Добавьте интерфейс AnalyticsHostDelegate в публичный API, заменив префикс на название продукта для избежания конфликтов.
  • Шаг 2. Добавьте метод setAnalyticsHostDelegate для инициализации делегата на стороне приложения.
  • Шаг 3. Передавайте события через делегат после получения технического задания от МТС.

Порядок действий для приложений

  • Шаг 1. Реализуйте интерфейс AnalyticsHostDelegate, предоставленный библиотекой.
  • Шаг 2. Инициализируйте делегат через метод SDK, например, ecoSdk1Api.setAnalyticsHostDelegate(this).
  • Шаг 3. Подготовьте конфигурацию МТС Аналитики для каждой библиотеки с указанием flowId.
  • Шаг 4. Отправляйте события в МТС Аналитику через реализованные методы делегата, используя MTSAnalytics.

Такой способ интеграции подходит для:

  1. Библиотек, которые интегрируются в приложения с МТС Аналитикой.
  2. Приложений, библиотекам которых необходимо передать свои данные в МТС Аналитику.

Если библиотека встраивается в приложение вне экосистемы МТС, интеграция с МТС Аналитикой проходит стандартным образом.

Как это работает

Ранее SDK Аналитики встраивался и в библиотеку, и в приложение. Из-за этого могли возникнуть конфликты версий библиотек и зависимостей. Описанный ниже способ позволяет этого избежать.

Библиотека предоставляет интерфейс AnalyticsHostDelegate, возможность установить его instance и передаёт данные событий разметки в delegate. Приложение реализует предложенный интерфейс, передаёт instance делагата в библиотеку и обрабатывает данные от делегата. Так, SDK МТС Аналитики будет встроен только в приложение.

Порядок действий для библиотек

Шаг 1. Добавить API

Добавьте в пакет публичного API интерфейс

interface MyProductAnalyticsHostDelegate {
fun sendEvent(flowId: String, eventName: String, data: Map<String, Any?>?) // Стандартные события
fun sendError(flowId: String, error: Throwable, errorMessage: String?, data: Map<String, Any?>?) // События ошибок
suspend fun getHostSessionQueryAsync(url: String): String // События кросс-платформенных сессий
fun getHostSessionQuery(url: String): String
}

Замените префикс MyProduct на название своего продукта. Например

interface EcoSdk1AnalyticsHostDelegate

Это позволит избежать конфликта имён классов в приложении при добавлении нескольких библиотек. Приложение сможет легко найти название библиотеки для дальнейшей интеграции.

Шаг 2. Добавить метод

Добавьте в публичное API метод для инициализации делегата

fun setAnalyticsHostDelegate(delegate: EcoSdk1AnalyticsHostDelegate)

Приложение проинициализирует делегат на своей стороне.

Шаг 3. Передавать события

Важно

Если вы планируете отслеживать определённые события, например, клики на конкретные кнопки, направьте на analytics.support@mts.ru бизнес-требование для получения технического задания на разметку.

После получения технического задания передайте его команде разработки. Для экосистемных продуктов рекомендуем использовать экосистемную разметку МТС, так как это гарантирует корректную передачу событий в МТС Аналитику.

Начните отправлять данные событий разметки через методы делагата. События будут передаваться в делегат, а затем — в Аналитику только после того, как приложение проинициализирует делегат.

Порядок действий для приложений

Требования
  • Завершена интеграция с МТС Аналитикой
  • Библиотека предоставила интерфейс AnalyticsHostDelegate. Если библиотека добавила данный публичный интерфейс, он будет отображаться в её пакете

Шаг 1. Реализовать API библиотеки

Реализуйте публичный интерфейс

interface EcoSdk1AnalyticsHostDelegate

Шаг 2. Инициализировать делегат

Проинициализируйте делегат через публичный метод SDK. Например,

ecoSdk1Api.setAnalyticsHostDelegate(this)

Шаг 3. Подготовить конфигурацию SDK Аналитики

Для каждой библиотеки подготовьте стандартную конфигурацию МТС Аналитики, используя flowId библиотеки. Например,

private fun defaultMTSAConfigFor(flowId: String): MtsAnalyticsConfig {
return MtsAnalyticsConfig.Builder(flowId = flowId)
// LogLevel.ERROR, or LogLevel.VERBOSE for debug
.setLogLevel(LogLevel.OFF)
.build()
}

Шаг 4. Отправлять события

Начните передавать в МТС Аналитику данные, полученные от делегата. Например,

class EcoSystemSdkAnalyticsWrapper(
private val context: Context,
private val ecoSdk1Api: EcoSdk1Api,
private val ecoSdk2Api: EcoSdk2Api,
) : EcoSdk1AnalyticsHostDelegate,
EcoSdk2AnalyticsHostDelegate {

init {
ecoSdk1Api.setAnalyticsHostDelegate(this)
ecoSdk2Api.setAnalyticsHostDelegate(this)
}

override fun sendEvent(flowId: String, eventName: String, data: Map<String, Any?>?) {
runCatching {
MTSAnalytics.getInstance(context.applicationContext, defaultMTSAConfigFor(flowId))
.track(eventName, data ?: emptyMap())
}
}

override fun sendError(
flowId: String,
error: Throwable,
errorMessage: String?,
data: Map<String, Any?>?
) {
}

override suspend fun getHostSessionQueryAsync(url: String) = withContext(Dispatchers.IO) {
}

override fun getHostSessionQuery(url: String): String {
return
}

private fun defaultMTSAConfigFor(flowId: String): MtsAnalyticsConfig {
return MtsAnalyticsConfig.Builder(flowId = flowId)
// LogLevel.ERROR, or LogLevel.VERBOSE for debug
.setLogLevel(LogLevel.OFF)
.build()
}
}

Семантика AnalyticsHostDelegate одинакова для всех SDK, поэтому при интеграции нескольких библиотек можно унаследоваться от нескольких интерфейсов, а методы не изменяются.