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 "ru.expf-team.sigma:kotlin-sdk:VERSION"
...
}
VERSION
замените актуальной версией Sigma-SDK.
Инициализация SigmaSDK
Для инициализации SigmaSDK в классе, унаследованном от класса Application
, в теле
переопределенного метода onCreate()
добавьте вызов статического метода Sigma.initializeClient()
.
Данный метод принимает следующие параметры:
- application - объект класса приложения.
- projectToken - токен проекта (указан в панели управления).
- initialUserProperties - необязательный параметр, лямбда для назначения свойств пользователя.
- cacheTtlMillis - необязательный параметр, время жизни кеша полученного конфига из сети (по умолчанию равен 60 секундам, также если указать значение меньшее 10 секундам, то оно будет проигнорировано и будет использовано значение по умолчанию.).
- retryCount - необязательный параметр, количество повторных попыток запрашивания конфига при неудачном запросе (по умолчанию равен 3).
- 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("...") },
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("***", "***")
Пример использования SigmaUserPropertiesSetter
val client = Sigma.getClient()
client.setUserProperties {
setUserId("id")
setCustomProperty { "length" to "10" }
setAppVersion("7.2.1")
}
Изменение свойств пользователя
Если необходимо добавить или удалить конкретные свойст ва пользователя или добавить новые используется интерфейс SigmaUserPropertiesEditor
. Получить реализацию этого интерфейса можно с вызвав:
SigmaClient.editUserProperties { ... }
Работа с ним происходит аналогично с SigmaUserPropertiesSetter
, но, в отличии от него, данный интерфейс обладает методами для удаления пользовательских свойств.
Пример:
import ru.expf.sigma.Sigma
...
val client = Sigma.getClient()
client.editUserProperties {
setGeoCountry("USA")
removeEmail()
removeOsVersion()
removeCustomProperty("myProperty")
}
Для удаления всех свойств пользователя используется метод SigmaClient.clearUserProperties()
.
Пример вызова метода:
import ru.expf.sigma.Sigma
...
val client = Sigma.getClient()
client.clearUserProperties()
Время жизни свойств пользователя
Каждое назначенное свойство
пользователя используется Sigma-SDK в течении 24 часов.
По истечению этого времени оно будет игнорироваться при расчетах.
Важно!
При редактировании свойства
отчет этого промежутка времени начинается заново.
Получение значения Feature Flag
Для получения значения Feature Flag используется метод: SigmaClient.checkFlag()
Данный метод принимает следующие параметры:
- name - название Feature Flag.
- jClass - необязательный параметр при использовании
SigmaClient
extension-функции с аналогичным названием, java-класс типа в который преобразуется значение получаемого Feature Flag (Float
,Long
,Int
,Double
,String
,Boolean
), (JSON-класс
- см.SigmaJsonAdapter
) или null - callback - необязательный параметр при использовании suspend версии метода, объект
интерфейса
SigmaCheckFlagCallback
реализующий его методыonSuccess()
иonError()
.
Примеры вызова метода:
Без использования kotlin.coroutines
import ru.expf.sigma.*
...
val client = Sigma.getClient()
client.checkFlag(
name = "***",
callback = object: SigmaCheckFlagCallback<String> {
override fun onSuccess(value: String?) {
/** Some code with received value */
}
override fun onError(throwable: Throwable) {
/** Some code with received error */
}
}
)
С использованием kotlin.coroutines
import ru.expf.sigma.*
...
async {
val client = Sigma.getClient()
val flagValue = client.checkFlag<String>(name = "***")
}.await()
Стоит обратить внимание на то, что в случае несоответсвия ни одному условию в правилах результат
работы метода будет равен null.
Также, если в данный метод передать тип значения Feature Flag, который не поддерж ивается со стороны SDK, то он вернет ошибку InvalidParameterSpecException
.
Получение эксперимента
Для получения эксперимента используется метод SigmaClient.getExperiment()
.
Данный метод принимает следующие параметры:
- id - идентификатор эксперимента.
- callback - необязательный параметр при использовании suspend версии метода, объект
интерфейса
SigmaGetExperimentCallback
реализующий его методыonSuccess()
иonError()
.
Примеры вызова метода:
Без использования kotlin.coroutines
import ru.expf.sigma.Sigma
import ru.expf.sigma.SigmaExperiment
import ru.expf.sigma.SigmaGetExperimentCallback
...
val client = Sigma.getClient()
client.getExperiment(
id = "***",
callback = object : SigmaGetExperimentCallback {
override fun onSuccess(experiment: SigmaExperiment?) {
/** Some code with received experiment */
}
override fun onError(throwable: Throwable) {
/** Some code with received error */
}
}
)