Tesfy 1.0.1

Tesfy 1.0.1

Pedro Valdivieso维护。



 
依赖
MurmurHash-Swift= 1.0.13
jsonlogic= 1.0.0
 

Tesfy 1.0.1

  • gringox

logo

一个专注于性能的轻量级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)

反馈

欢迎拉取请求、功能想法和错误报告。我们非常欢迎任何反馈。

作者

Pedro Valdivieso (gringox)

许可证

Tesfy遵循MIT许可证。请参阅LICENSE文件了解更多信息。