Клиентские SDK Trisigma
Клиентский SDK получает группы пользователя, хранит их локал ьно и позволяет приложению определять участие пользователя в эксперименте без выполнения сетевых запросов. Также SDK позволяет логировать события участия пользователя в эксперименте.
Как выполняется сплит и логируется участие в эксперименте
Приложение инициализирует SDK и получает конфигурацию эксперимента. Метод checkFeature возвращает группу из конфигурации эксперимента. Если конфигурация недоступна, checkFeature возвращает defaultGroup. Метод logExposure добавляет событие в очередь для фоновой отправки батча событий экспозиции.
Не вызывайте logExposure до того, как пользователь увидит фичу на экране: преждевременное событие искажает результат эксперимента.
Основные концепции
Участники эксперимента
Participant описывает участника эксперимента, для которого SDK получает назначение. Если пользователь авторизован, передавайте его стабильный числовой идентификатор в userId.
Анонимного пользователя SDK идентифицирует по visitorId. Этот параметр необязателен: если не передать visitorId, SDK создаёт стабильный UUID и сохраняет его между запусками. Метод getVisitorId() возвращает явно заданный или сгенерированный visitorId текущего клиента.
Не меняйте participant у уже созданного client: создайте новый client с новым participant с учётом ограничения SDK на уникальность пары host и tag. Не передавайте секреты и персональные данные, если они не нужны для условий эксперимента.
attributes - необязательные пары String-String. SDK передаёт их в Splitter как массив randomizationUnits:
| Параметр | Тип | Описание |
|---|---|---|
type | string | Название параметра, например geo.code или geo.city. |
value | string | Значение параметра, например RU или Moscow. |
Обязательность randomizationUnits зависит от настроек конкретного эксперимента. Если в эксперименте есть условия на эти параметры, а приложение их не передало, сервер не возвращает фичу по этому эксперименту и не сообщает об ошибке. Параметры, на которые в эксперименте нет условий, не влияют на результат сплитования.
За заполнение randomizationUnits отвечает разработчик. Передавайте весь доступный контекст пользователя, который может использоваться в условиях эксперимента, например код страны "geo.code" и город "geo.city". Не включайте токены, пароли, e-mail и другие лишние чувствительные данные.
Evaluation и exposure
Evaluation - вызов checkFeature, который выбирает группу из override, памяти, локального кеша или возвращает defaultGroup. Сам вызов не означает, что пользователь увидел вариант.
Exposure - отдельное событие показа. Вызывайте logExposure только после успешной отрисовки элемента. Не отправляйте экспозицию, если экран закрыт, отрисовка завершилась ошибкой или элемент остался за пределами видимой области.
Повторный logExposure создаёт повторное событие: SDK не дедуплицирует вызовы на уровне публичного API. Ответственность за семантику одного показа лежит на приложении.
flush передаёт накопленные события фоновому механизму отправки. shutdown пытается сделать это в пределах shutdownTimeout, прекращает фоновые задачи и возвращает true, если постановка событий на отправку уложилась в таймаут.
Cache и fail-open
Fail-open означает, что сбой Trisigma не должен ломать приложение. defaultGroup - фолбек, который SDK возвращает, если не может получить конфигурацию или найти эксперимент. В большинстве случаев в качестве defaultGroup используют группу "control".
Порядок выбора значения и влияние cacheEnabled при ошибке первой загрузки смотрит е в документации каждой платформы.