Android SDK
Установка
Для подключения SDK проект должен использовать AndroidX, иметь minSdk 21 и compileSdk 36.1 или выше. Добавьте разрешение android.permission.INTERNET в AndroidManifest.xml.
Убедитесь, что Maven Central подключён в settings.gradle.kts:
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}
Добавьте зависимость Android SDK в файл модуля приложения.
dependencies {
implementation("io.trisigma:sdk:0.1.0")
}
Если проект объявляет репозитории зависимостей в корневом build.gradle, убедитесь, что Maven Central подключён в allprojects.repositories:
allprojects {
repositories {
google()
mavenCentral()
}
}
И добавьте зависимость Android SDK в файл модуля приложения.
dependencies {
implementation "io.trisigma:sdk:0.1.0"
}
Quickstart
Инициализируйте SDK один раз, затем используйте созданный client в нужных сценариях.
Инициализация SDK
Передайте ключ проекта, тег, участника эксперимента и параметры подключения к Splitter.
import io.trisigma.sdk.external.Trisigma
import io.trisigma.sdk.external.models.TrisigmaOptions
import io.trisigma.sdk.external.models.TrisigmaParticipant
val client = Trisigma.initialize(
context = context,
key = clientKey,
tag = "app-name",
participant = TrisigmaParticipant(userId = 42L),
options = TrisigmaOptions(
host = "https://client.example.trisigma.io",
platformVersion = "1.0.0",
),
)
initialize - suspend-функция, поэтому вызывайте её из корутины. Метод загружает конфигурацию экспериментов и запускает её фоновое обновление. HTTP-ошибка или тайм-аут первой загрузки не блокируют запуск приложения: checkFeature возвращает defaultGroup, пока конфигурация недоступна.
Получение группы эксперимента
Получите назначенную группу и выберите соответствующий вариант интерфейса.
val group = client.checkFeature(
label = "new_checkout_flow", // Лейбл эксперимента
defaultGroup = "control",
)
when (group) {
"test" -> showNewCheckout()
else -> showCurrentCheckout()
}
SDK возвращает defaultGroup, если не находит эксперимент или доступную конфигурацию.
Регистрация экспозиции
Зарегистрируйте экспозицию после того, как пользователь увидел экспериментальную функциональность.
client.logExposure(
label = "new_checkout_flow", // Лейбл эксперимента
)
SDK сохраняет событие в локальную очередь и отправляет события пакетами. SDK отправляет очередь автоматически при достижении exposureQueueMaxSize или по истечении exposureFlushInterval. Перед завершением работы с клиентом вызовите shutdown(): метод пытается отправить оставшиеся экспозиции в пределах shutdownTimeout.
Регистрируйте exposure, когда пользователь дошёл до показа варианта и назначенный вариант начинает влиять на его опыт. Вызывайте logExposure симметрично для control и test, до действий и событий, зависящих от варианта.
Не ставьте exposure в зависимость от клика, конверсии и т.д.: это искажает рез ультаты эксперимента.
Типовые сценарии
| Сценарий | Действие разработчика | Причина |
|---|---|---|
| Группа получена заранее, но пользователь не дошёл до экспериментальной функциональности | Не вызывать logExposure | SDK не может определить, увидел ли пользователь вариант, и добавляет событие в очередь при наличии назначения |
| Exposure вызывается только после клика, конверсии или другого действия пользователя | Не использовать такое действие как условие | SDK не распознаёт статистическую ошибку и добавляет событие в очередь при наличии назначения |
| Exposure вызывается только после успешного отображения фичи | Не ставить вызов в зависимость от успеха отображения | Асимметричный триггер отправки приводит к SRM |