一个专注于性能的轻量级A/B测试和功能标志Swift库
使用
示例
要运行示例项目,请克隆仓库,然后首先从示例目录运行pod install
。
安装
Tesfy通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中:
pod 'Tesfy'
初始化
使用数据文件导入和实例化它。数据文件是一个json
文件,用于定义可用的实验和功能。理想情况下,该文件应托管在您的应用程序之外(例如在S3上),以便在启动时或每过一段时间进行获取。这样可以让您在不部署应用程序的情况下更改该文件。
import Tesfy
let datafile = """
{
"experiments": {
"experiment-1": {
"id": "experiment-1",
"percentage": 90,
"variations": [{
"id": "0",
"percentage": 50
}, {
"id": "1",
"percentage": 50
}]
},
"experiment-2": {
"id": "experiment-2",
"percentage": 100,
"variations": [{
"id": "0",
"percentage": 100
}],
"audience": {
"==": [{ "var": "countryCode" }, "us"]
}
}
},
"features": {
"feature-1": {
"id": "feature-1",
"percentage": 50
}
}
}
"""
let tesfy = Tesfy(datafile: datafile)
实验
检查实验的哪个变异被分配给了用户。
let userId = "676380e0-7793-44d6-9189-eb5868e17a86"
let experimentId = "experiment-1"
tesfy.getVariationId(experimentId: experimentId, userId: userId) // "1"
功能标志
检查功能是否对用户启用。
let userId = "676380e0-7793-44d6-9189-eb5868e17a86"
let featureId = "feature-1"
tesfy.isFeatureEnabled(featureId: featureId, userId: userId) // true
受众
通过使用JsonLogic,使用属性来定位特定的受众。
let userId = "676380e0-7793-44d6-9189-eb5868e17a86"
let experimentId = "experiment-2"
tesfy.getVariationId(experimentId: experimentId, userId: userId, attributes: "{ \"countryCode\": \"ve\" }") // nil
tesfy.getVariationId(experimentId: experimentId, userId: userId, attributes: "{ \"countryCode\": \"us\" }") // "0"
粘性桶分配
当根据 TesfyStorable
协议创建 tesfy 时,可选择性地添加存储层。这一层可以是您想要的任何东西(UserDefaults、Keychain、Core Data、SQLite、等)。这样,即使用户的分配或属性发生变化,也会保持与同一变异捆绑在一起。
class TesfyStorage: TesfyStorable {
var storage: [String: String]
init(storage: [String: String]? = [:]) {
self.storage = storage ?? [:]
}
func get(id: String) -> String? {
return storage[id]
}
func store(id: String, value: String?) {
self.storage[id] = value
}
}
let tesfyStorage = TesfyStorage()
let tesfy = Tesfy(datafile: datafile, storage: tesfyStorage)
let userId = "676380e0-7793-44d6-9189-eb5868e17a86"
let experimentId = "experiment-2"
tesfy.getVariationId(experimentId: experimentId, userId: userId, attributes: "{ \"countryCode\": \"us\" }") // "0"
tesfy.getVariationId(experimentId: experimentId, userId: userId, attributes: "{ \"countryCode\": \"ve\" }") // "0"
集成
Tesfy 也适用于不同语言的 Android 或 JavaScript(纯 JavaScript 和 React)
反馈
欢迎拉取请求、功能想法和错误报告。我们非常欢迎任何反馈。
作者
许可证
Tesfy遵循MIT许可证。请参阅LICENSE文件了解更多信息。