SigmaSDK - Android
Sigma - это платформа для экспериментов, которая позволяет вам быстро оценивать влияние новых функций и предлагать продукты, которые нравятся вашим клиентам.
Требования
- Android API level 21+
Настройка Gradle
В файле build.gradle, который находится в корневой папке проекта, нужно добавить репозиторий jitpack. Для этого в конце списка репозиториев добавьте maven { url 'https://jitpack.io' }:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Если ваши репозитории для получения зависимостей объявлены в файле settings.gradle, то добавьте следующий код в dependencyResolutionManagement:
dependencyResolutionManagement {
...
repositories {
...
maven { url "https://jitpack.io" }
}
}
Затем добавьте следующую зависимость в файл build.gradle нужного вам модуля приложения (например, :app):
dependencies {
...
//SigmaSDK
implementation "net.yandexcloud.gitlab.sigma.sigma:kotlin-sdk:VERSION"
...
}
VERSION замените актуальной версией Sigma-SDK.
Инициализация SigmaSDK
Для инициализации SigmaSDK в классе, унаследованном от класса Application, в теле
переопределенного метода onCreate() добавьте вызов статического метода Sigma.initializeClient().
Данный метод принимает следующие параметры:
- application - объект класса приложения.
- projectToken - токен проекта (указан в панели управления).
- initialUserProperties - необязательный параметр, лямбда для назначения свойств пользователя.
- cacheTtlMillis - необязательный параметр, время жизни кеша полученного конфига из сети (по умолчанию равен 60 секундам, также если указать значение меньшее 10 секундам, то оно будет проигнорировано и будет использовано значение по умолчанию.).
- retryCount - необязательный параметр, количес тво повторных попыток запрашивания конфига при неудачном запросе (по умолчанию равен 3).
- fetchTimeoutMillis - необязательный параметр, заранее установленный лимит времени, в течение которого SDK ожидает ответа от сервера (по умолчанию равен 5 секундам, также если указать значение меньшее 500 миллисекунд, то оно будет проигнорировано и будет использовано значение по умолчанию.).
- tag - необязательный параметр, тег клиента Sigma (по умолчанию равен 'default'). Необходим для создания нескольких инстансов SigmaClient.
- sigmaJsonAdapter - необязательный параметр, адаптер, который будет использоваться при получении значений типа JSON в параметрах эксперимента и Feature Flag (по умолчанию равен SigmaGsonAdapter с конструктором по умолчанию).
- apiUrl - необязательный параметр, Web URL который используется SDK для запросов в сеть (по умолчанию равен https://api.expf.ru/api/v1).
Пример вызова метода:
import ru.expf.sigma.Sigma
...
Sigma.initializeClient(
application = this,
projectToken = "projectToken",
initialUserProperties = { setUserId("...") },
fetchTimeoutMillis = 10_000L,
cacheTtlMillis = 20_000L,
retryCount = 10,
)
Получение объекта SigmaClient
Чтобы получить инстанс SigmaClient используется статический метод Sigma.getClient().
Данный метод принимает следующие параметры:
- tag - необязательный параметр, тег клиента Sigma (по умолчанию равен 'default').
Завершение работы клиента
Когда работа с клиентом завершена, рекомендуется освободить память от уже ненужного объекта SigmaClient. Для этого используется статический метод Sigma.removeClient().
Данный ме тод принимает следующие параметры:
- tag - необязательный параметр, тег клиента Sigma (по умолчанию равен 'default').
Пример создания нескольких клиентов Sigma
Инициализация:
import ru.expf.sigma.Sigma
...
const val TAG_1 = "TAG_1"
const val TAG_2 = "TAG_2"
...
Sigma.initializeClient(
application = this,
projectToken = "...",
tag = TAG_1,
)
Sigma.initializeClient(
application = this,
projectToken = "...",
tag = TAG_2,
)
Использование:
import ru.expf.sigma.*
...
val firstClient = Sigma.getClient(TAG_1)
val secondClient = Sigma.getClient(TAG_2)
...
async {
firstClient.getAllUserExperiments()
secondClient.checkFlag<Float>("...")
}.await()
...
firstClient.setUserProperties { setDeviceId("...") }
Свойства пользователя
Назначение свойств пользователя
Для назначения свойств пользователя используется интерфейс SigmaUserPropertiesSetter. Получить реализацию этого интерфейса можно вызвав методы:
Sigma.initializeClient(initialUserProperties = { ... })- назначение свойств пользователя при инициализации клиента Sigma.SigmaClient.setUserProperties { ... }- назначение свойств пользователя в уже сущ ествующем объекте клиента.
В обоих случаях выше - кешированная информация о свойствах пользователя для этого токена проекта + тега инстанса SigmaClient стирается и записывается новая.
Описание методов SigmaUserPropertiesSetter
SigmaUserPropertiesSetter обладает методами для построения набора key-value свойств пользователя. Эти свойства можно разделить на следующие категории:
Идентификаторы использующиеся для назначения вариантов эксперимента:
setUserId()- назначение свойства пользователя с названием userId.setDeviceId()- назначение свойства пользователя с названием deviceId.setProfileId()- назначение свойства пользователя с названием profileId.
Свойства которые определяются на уровне SDK, но могут быть переопределены:
setAppVersion()- назначение cвойства пользователя с названием appVersion.setGeoCode()- назначение cвойства пользователя с названием geo.code.setGeoCountry()- назначение cвойства пользователя с названием geo.country.setGeoState()- назначение cвойства пользователя с названием geo.state.setGeoCity()- назначение cвойства пользователя с названием geo.city.setOsName()- назначение cвойства пользователя с названием os.name.setOsVersion()- назначение cвойства пользователя с названием os.version.
Свойства которые определяются только разработчиком
setEmail()- назначение свойства пользователя с названием email.
Сustom свойства
Такие свойства могут иметь любое название, но при этом к их названию добавится префикс custom.* . (прим. custom.nickname, custom.language).
setCustomProperty()- назначение custom-свойства пользователя
Данный метод принимает название и значения свойства и имеет 3 варианта использования:
setCustomProperty("***" to "***")
setCustomProperty { "***" to "***" }
setCustomProperty("***", "***")