使用QuickTracking Windows(A/B Testing)必备操作。
1.引用和初始化SDK
集成代码明细
A/B Testing SDK 依赖,在使用前请确保已经成功集成Windows C++ SDK,并进行了SDK初始化,详情可参考引入&配置SDK。
2.编程实验
2.1集成与初始化SDK
首先您需要使用同步方式初始化QuickTracking 统计SDK。初始化QuickTracking 统计SDK 完成之后,再初始化QuickTracking A/B Testing SDK。在QuickTracking A/B Testing SDK 初始化时需要传入请求分流试验的地址,请联系运营人员获取。
离线引入方式
请参考统计引入&配置SDK 快速集成描述引入。
2.2ABTest SDK初始化
接口函数
//ABTest 初始化
QTFORPC_API QT_VOID initABTest(QT_CSTR serverUrl, QT_MAP options);
参数
参数 | 类型 | 描述 | 是否必填 |
serverUrl | const char * | 服务端地址 | 是 |
options | const char * | 属性参数,参数需要传入json字面量模板字符串
| 是 |
示例
std::string abOptions = R"({
"experiment_file_path": "D:\\xxxx\\abcache\\ab_cache.txt",
"update_interval_seconds": 10
})";
qtInterface->initABTest("http://xxxxx", abOptions.c_str());
开启日志
请参考统计SDK 基础集成功能描述开启
2.3获取实验变量
初始化QuickTracking ABTest SDK 之后,通过 API 获取具体试验的变量值,根据获取试验变量值的方式,可分为下面三种策略:
fetchABTestFromCache :读取本地缓存,缓存不存在时使用默认值
fetchABTestFromServer :忽略本地缓存,从服务端获取数据
fetchABTestFromCacheThenServer :优先读取本地缓存,缓存不存在时从服务端获取数据
使用场景说明
API名称 | 场景说明 |
fetchABTestFromCache | 如果对查询性能有要求,可以使用fetchABTestFromCache API 只从本地缓存获取变量值,缺点是无法及时命中最新的实验结果 |
fetchABTestFromServer | 如果您进行时间片轮转实验,且对实验的时效性有要求,可以使用fetchABTestFromServer API 获取实验变量值,缺点是可能会存在一定的网络延迟 |
fetchABTestFromCacheThenServer | 默认情况下,建议使用此API,兼顾查询性能和时效性考虑,该API会优先从本地缓存获取变量值,如果本地缓存不命中结果,则查询AB实验服务端最新数据 |
2.4API 介绍
ABTest 请求缓存实验
接口函数:fetchABTestFromCache
//ABTest 请求缓存实验
QTFORPC_API QT_VOID fetchABTestFromCache(QT_CSTR paramName, QT_CSTR valueType, QT_MAP defaultValue, QT_AB_CB handler);
参数
参数 | 类型 | 描述 | 是否必填 |
paramName | const char * | 参数名称 | 是 |
valueType | const char * | 值类型
| 是 |
defaultValue | const char * | 默认值
| 是 |
handler | void | 回调方法,同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 | 是 |
示例
qtInterface->fetchABTestFromCache("y_number", "NUMBER", "1", [](const string &result){
std::cout << result << std::endl;
});
注意:请确保对A/B分流接口中使用的默认值,都做了正常的业务逻辑处理!
ABTest 请求服务端实验
接口函数:fetchABTestFromServer
//ABTest 请求服务端实验
QTFORPC_API QT_VOID fetchABTestFromServer(QT_CSTR paramName, QT_CSTR valueType, QT_MAP defaultValue, QT_AB_CB handler, QT_INT timeout_seconds);
参数
参数 | 类型 | 描述 | 是否必填 |
paramName | const char * | 参数名称,非空字符串 | 是 |
valueType | const char * | 值类型
| 是 |
defaultValue | const char * | 默认值
| 是 |
handler | void | 回调方法,同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 | 是 |
timeout_seconds | int | 超时时间,默认超时时间为3秒 | 否 |
示例
qtInterface->fetchABTestFromServer("y_json", "JSON", R"({"a":1})", [](const string &result){
std::cout << result << std::endl;
}, 3);
注意:请确保对A/B分流接口中使用的默认值,都做了正常的业务逻辑处理!
ABTest 先请求本地缓存实验结果,如果没有再请求服务端实验结果
接口函数:fetchABTestFromCacheThenServer
//ABTest 先请求本地缓存实验结果,如果没有再请求服务端实验结果
QTFORPC_API QT_VOID fetchABTestFromCacheThenServer(QT_CSTR paramName, QT_CSTR valueType, QT_MAP defaultValue, QT_AB_CB handler, QT_INT timeout_seconds);
参数
参数 | 类型 | 描述 | 是否必填 |
paramName | const char * | 参数名称 | 是 |
valueType | const char * | 值类型
| 是 |
defaultValue | const char * | 默认值
| 是 |
handler | void | 回调方法,同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 | 是 |
timeout_seconds | int | 超时时间,默认超时时间为3秒 | 否 |
示例
qtInterface->fetchABTestFromServerThenCache("y_boolean", "BOOLEAN", "false", [](const string &result){
std::cout << result << std::endl;
}, 3);
注意:请确保对A/B分流接口中使用的默认值,都做了正常的业务逻辑处理!
3.调试试验
开启实验后