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

Trisigma.initialize

static func initialize(
key: String,
tag: String,
participant: TrisigmaParticipant,
options: TrisigmaOptions
) async throws -> TrisigmaClientProtocol

Создаёт клиент Trisigma, загружает начальную конфигурацию экспериментов и запускает фоновые обновления. SDK разрешает использовать каждую пару host и tag один раз за время работы процесса. Значения participant.visitorId, включая nil, должны совпадать у всех клиентов процесса.

Параметры

ПараметрТипОбязательностьПримерОписание
keyStringДа"project-key"Ключ авторизации Trisigma.
tagStringДа"checkout"Тег для фильтрации конфигурации экспериментов. Например, тег ограничивает конфигурацию экспериментами вашего приложения.
participantTrisigmaParticipantДаTrisigmaParticipant(userId: 42)Участник эксперимента.
optionsTrisigmaOptionsДаTrisigmaOptions(host: ..., platformVersion: ...)Адрес сервера, версия приложения, интервалы, кеш, очередь экспозиций и логирование.

TrisigmaParticipant

TrisigmaParticipant описывает участника эксперимента. Все поля структуры необязательны. Если visitorId равен nil, SDK создаёт стабильный UUID и сохраняет его между запусками приложения.

ПараметрТипОбязательностьПо умолчаниюПримерОписание
userIdInt?Нетnil42Стабильный идентификатор авторизованного пользователя.
visitorIdString?Нетnil"device-7f3a"Идентификатор анонимного пользователя. Если значение не задано, SDK создаёт его автоматически.
attributes[String: String]Нет[:]["city": "moscow"]Атрибуты пользователя для фильтрации аудитории эксперимента.

TrisigmaOptions

TrisigmaOptions задаёт подключение к Splitter, кеширование, фоновые обновления, отправку экспозиций и логирование. host и platformVersion обязательны. Все числовые значения должны быть больше нуля и задаются в секундах, кроме exposureQueueMaxSize.

ПараметрТипОбязательностьПо умолчаниюПримерОписание
hostStringДа-
"https://client.example.trisigma.io"
Базовый HTTPS URL Splitter.
platformVersionStringДа-"1.0.0"Версия приложения в формате semver.
sourceNameString?Нетnil"checkout-app"Значение заголовка X-Source. SDK использует CFBundleDisplayName, CFBundleName, bundle identifier или "Unknown", если значение не задано.
cacheEnabledBoolНетtruefalseВключает сохранение конфигурации экспериментов на устройстве.
cacheTTLIntНет8640043200Срок актуальности сохранённой конфигурации экспериментов в секундах.
requestTimeoutIntНет12Тайм-аут сетевого запроса в секундах.
featuresRefreshIntervalIntНет180300Интервал обновления конфигурации экспериментов в секундах.
exposureQueueMaxSizeIntНет50100Количество экспозиций в очереди до автоматической отправки.
exposureFlushIntervalIntНет3060Интервал автоматической отправки экспозиций в секундах.
shutdownTimeoutIntНет510Максимальное время выполнения flush() внутри shutdown() в секундах.
logLevelLogLevelНет.error.debugМинимальный уровень логирования: .none, .error, .warning или .debug.
logHandler((LogLevel, String) -> Void)?НетnilhandleTrisigmaLogПользовательский обработчик логов. При nil SDK использует os_log.

Возвращаемое значение

ТипОписание
TrisigmaClientProtocolИнициализированный клиент. При сетевой ошибке первой загрузки SDK возвращает клиент в режиме fail-open.

Клиент в режиме fail-open продолжает работать. Метод checkFeature использует кеш или возвращает defaultGroup, а SDK записывает ошибку в лог.

Ошибки

ОшибкаКогда возникает
Validation errorkey или tag пустой; host не является HTTPS URL; platformVersion не соответствует semver; строковая или числовая опция не проходит проверку.
Validation error пары клиентовSDK уже использовал эту пару host и tag в текущем процессе.
Validation error участникаЗначение participant.visitorId, включая nil, отличается от других клиентов процесса.
Ошибка локального хранилищаSDK не может создать или прочитать хранилище событий экспозиции.
CancellationErrorЗадача инициализации отменена во время операции с локальным хранилищем.

SDK записывает сетевые и серверные ошибки первой загрузки в лог и не передаёт их в вызывающий код.

Использование

import TrisigmaSDK

let participant = TrisigmaParticipant(userId: 42)
let options = TrisigmaOptions(
host: "https://client.example.trisigma.io",
platformVersion: "1.0.0"
)

do {
let client = try await Trisigma.initialize(
key: "project-key",
tag: "checkout",
participant: participant,
options: options
)
} catch {
// Исправьте параметры и повторите инициализацию.
}

Для кода без Swift Concurrency используйте перегрузку с completion. SDK вызывает completion в главном потоке:

Trisigma.initialize(
key: "project-key",
tag: "checkout",
participant: participant,
options: options
) { result in
switch result {
case .success(let client):
use(client)
case .failure(let error):
handle(error)
}
}