SigmaSDK - iOS
Sigma 是一个用于实验的平台,它使您能够快速评估新功能的影响,并提供您的客户喜欢的产品。
要求
- iOS 11+
SDK 安装
Cocoapods
如果您的项目使用 Cocoapods,请在 Podfile 中添加 SigmaSDK
依赖
use_frameworks!
target 'MyApp' do
pod 'SigmaSDK', '~> X.Y.Z'
# ...
end
Swift Package Manager
如果您的项目使用Swift包管理器,请通过Xcode
添加SigmaSDK
包
文件 > 添加包 > 搜索或输入包URL > https://github.com/expfdev/sigma_ios
或者手动在Package.swift
文件中添加
dependencies: [
.package(url: "https://github.com/expfdev/sigma_ios"),
],
targets: [
.target(name: "MyApp", dependencies: ["SigmaSDK"])
],
使用SDK
初始化SDK
要使用SDK,需要创建一个类型为SigmaUser
的对象。它存储有关用户的信息,例如其唯一标识符。
创建SigmaUser
对象的示例
import SigmaSDK
let user = SigmaUser.Builder()
.setUserId("123")
.setCustomProperty(true, key: "isAuthorized")
.setEmail("[email protected]")
.build()
SigmaUser.Builder
具有以下方法
func setUserId(_ id: String) -> SigmaUser.Builder
- 分配匿名用户的ID。用于分发实验和功能标志。(如果没有分配,则不会按userId进行拆分实验)。func setProfileId(_ id: String) -> SigmaUser.Builder
- 分配已认证用户的ID(例如,在个人中心)。(如果没有分配,则不会按profileId进行拆分实验)。func setDeviceId(_ id: String) -> SigmaUser.Builder
- 重写SDK定义的Device ID。func setEmail(_ email: String) -> SigmaUser.Builder
- 分配名为email的用户参数。func setAppVersion(_ version: String) -> SigmaUser.Builder
- 重写SDK定义的应用程序版本。func setOsName(_ name: String) -> SigmaUser.Builder
- 重写SDK定义的操作系统的名称。func setOsVersion(_ version: String) -> SigmaUser.Builder
- 重写SDK定义的操作系统的版本。func setGeoCode(_ code: String) -> SigmaUser.Builder
- 重写SDK定义的地理编码。func setGeoCountry(_ country: String) -> SigmaUser.Builder
- 重写SDK定义的国家。func setGeoState(_ state: String) -> SigmaUser.Builder
- 重写SDK定义的地区。func setGeoCity(_ code: String) -> SigmaUser.Builder
- 重写SDK定义的城市。func setCustomProperty<Value: CustomStringConvertible>(_ value: Value, key: String) -> SigmaUser.Builder
- 分配用户的自定义参数(所有此类参数的名称都带有custom.前缀)。
创建对象SigmaUser
后,需要调用初始化SDK的方法
import SigmaSDK
do {
let client = try Sigma.initializeClient(projectToken: token, initialUser: user)
} catch let error {
// Handle error
}
方法initializeClient
具有以下参数
projectToken: String
- 项目令牌(在控制面板中指定)。initialUser: SigmaUser?
-SigmaUser
对象。可选参数。如果没有提供,SDK将自动创建一个SigmaUser
对象,并为其生成一个随机标识符。cacheTTL: UInt
- 从网络请求配置的频率(以秒为单位)。可选参数。默认值为10秒。retryCount: UInt
- 请求配置失败时的重试次数。可选参数。默认值为3。标签: 字符串
- Sigma客户端的标签。非必需参数。默认值为"default"。创建多个SigmaClient实例时必需。
使用 Sigma.getClient(tag: String)
方法获取 SigmaClient
客户端。使用 Sigma.removeClient(tag: String)
方法结束客户端的工作。
在初始化已初始化的客户(已存在标签的客户)时,将抛出 SigmaError.initializationOfExistingClient
错误。
获取特征标志值
获取特征标志值使用以下 SigmaClient
方法
func checkFlag<T: SigmaPropertyType>(flagName: String, onSuccess: SigmaSuccessCallback<T?>?, onError: SigmaErrorCallback?)
func checkFlag<T: SigmaPropertyType>(flagName: String) async throws -> T?
FeatureFlag的值可能为 Bool
、Int
、Double
、String
或 [String: Any]
类型。
获取特征标志值的示例
import SigmaSDK
guard let client = Sigma.getClient() else { return }
// Callback версия
client.checkFlag(
flagName: "my_first_flag",
onSuccess: { (value: Bool?) in
// Обработка значения Feature Flag
},
onError: { error in
// Обработка ошибки
}
)
// Async-await версия
do {
let firstFlag: Bool? = try await client.checkFlag(flagName: "my_first_flag")
// Обработка значения Feature Flag
} catch let error {
// Обработка ошибки
}
尽管获取Feature Flag的方法在无错误时也可能抛出错误,但即便如此,返回值可能为
获取实验
使用以下 SigmaClient
方法获取用户参与的所有实验。
func getAllUserExperiments(onSuccess: SigmaSuccessCallback<[SigmaExperiment]>?, onError: SigmaErrorCallback?)
func getAllUserExperiments() async throws -> [SigmaExperiment]
使用以下 SigmaClient
方法按名称获取实验。
func getExperiment(name: String, onSuccess: SigmaSuccessCallback<SigmaExperiment?>?, onError: SigmaErrorCallback?)
func getExperiment(name: String) async throws -> SigmaExperiment?
上述所有方法仅返回用户参与过的实验。
获取实验的示例
import SigmaSDK
guard let client = Sigma.getClient() else { return }
let flagName = "my_first_flag"
// Callback версии
client.getAllUserExperiments(
onSuccess: { experiments in
// Обработка всех экспериментов, в которые попал пользователь
},
onError: { error in
// Обработка ошибки
}
)
client.getExperiment(
name: "my_first_experiment",
onSuccess: { experiment in
// Обработка эксперимента
},
onError: { error in
// Обработка ошибки
}
)
// Async-await версии
do {
let allExperiments = try await client.getAllUserExperiments()
// Обработка всех экспериментов, в которые попал пользователь
} catch let error {
// Обработка ошибки
}
do {
let userExperiment = try await client.getExperiment(name: "my_first_experiment")
// Обработка эксперимента
} catch let error {
// Обработка ошибки
}
从实验中获取信息
获取实验后,实验信息从 SigmaExperiment
对象的方法中可用。
func getParamValue<T: SigmaPropertyType>(name: String) -> T?
func getFeatureFlagValue<T: SigmaPropertyType>(flagName: String) throws -> T?
FeatureFlag或实验参数的值可能为 Bool
、Int
、Double
、String
或 [String: Any]
类型。
SDK端自动确定参数列表
appVersion
- 用户应用程序的版本。deviceId
- 设备的唯一标识符。os.version
- 用户设备上的iOS版本号。os.name
- 用户操作系统的名称(iOS
/macOS
/watchOS
/tvOS
)。time
- 用户当前时间。date
- 用户当前日期。geo.country
- 用户所在国家。geo.state
- 用户所在地区。geo.city
- 用户所在城市。geo.ip
- 用户IP地址。
变更日志
1.2.3
- 支持将[type: Any]类型的String作为功能标志或实验参数的值。
1.2.2
- 支持新的操作符“ starts with”,“ not starts with”,“ ends with”,“ not ends with”,“ contains”,“ not contains”。
1.2.1
- 支持按平台过滤实验和Feature Flag。
- 改进了配置文件的解码,损坏的对象不会破坏整个配置文件。
1.2.0
- 将
SigmaExperiment.getFeatureFlagValue
方法重命名为SigmaExperiment.getFeatureValue
。 - 将
SigmaExperiment.name
和SigmaExperiment.userGroupName
属性标记为过时,并在以后的版本中删除。 - 添加了
SigmaExperiment.groupIndex
属性,返回用户所属实验组的索引。
1.1.0
- 删除了
getExperimentNameByFeatureFlag
方法。 - 将
getUserExperiments
方法重命名为getAllUserExperiments
。 - 将
getUserExperiment
方法重命名为getExperiment
。 - 修复了当Feature Flag在实验中但用户未进入实验时,计算结果的逻辑,原本应回退到实验外部的Feature Flag,但返回了nil。
- 添加了
SigmaUser.Builder
方法:setAppVersion
、setOsName
、setOsVersion
、setGeoCode
、setGeoCountry
、setGeoState
、setGeoCity
。 - 修复了一个错误,当客户端设置了地理定位参数为
code
、country
、state
、city
而不是geo.code
、geo.country
、geo.state
、geo.city
时。
1.0.1
- 支持iOS 11及以上版本。
- 修复了一个错误,当一个空的规则集使用OR操作符时,其被视为总是成功的。
1.0.0
- SDK的初始版本。