使用QuickTracking Android(A/B Testing)必备操作。
1.集成代码明细
A/B Testing SDK 依赖Android SDKv1.6.4及以上版本,在使用前请确保已经成功集成QuickTracking 统计SDK,并进行了SDK初始化,详情可参考引入&配置SDK。
2.编程实验
2.1集成与初始化SDK
首先您需要使用同步方式初始化QuickTracking 统计SDK。初始化QuickTracking 统计SDK 完成之后,再初始化QuickTracking A/B Testing SDK。在QuickTracking A/B Testing SDK 初始化时需要传入请求分流试验的地址,请联系运营人员获取。
2.1.1同步引入方式
在主 module 的 build.gradle 文件中添加 QT A/B Testing SDK 依赖:
线上包:
dependencies {
implementation fileTree(include:['*.jar'], dir:'libs')
//QuickTracking统计分析SDK
implementation 'com.lydaas.qtsdk:qt-px-common:1.6.4.PX'
// QuickTracking A/B Test SDK
implementation 'com.lydaas.qtsdk:qt-ab-test:1.0.0.PX'
}
本地包:
dependencies {
implementation fileTree(include:['*.jar'], dir:'libs')
//QuickTracking统计分析SDK
implementation files('libs/qt-px-common-1.6.4.PX.aar')
// QuickTracking A/B Test SDK
implementation files('libs/QTABTest-release.aar')
}
2.1.2 SDK初始化
SDK初始化依赖ApplicationContext,请在合适的时候传入对应的参数:
import com.quicktracking.sdk.android.abtest.QTABTest;
import com.quicktracking.sdk.android.abtest.QTABTestConfigOptions;
try {
// QT A/B Testing SDK 初始化
QTABTestConfigOptions config = new QTABTestConfigOptions("实验地址");
// 初始化需要传入Context
QTABTest.startWithConfigOptions(this.getApplicationContext(), config);
} catch (Exception e) {
e.printStackTrace();
}
配置方法:
public QTABTestConfigOptions(String url,int timeInterval)
public QTABTestConfigOptions(String url)
参数 | 类型 | 默认值 | 含义 | 备注 |
url | string | undefined | 实验地址 | 必传参数,需设置非空字符串。 |
timeInterval | int | 10 * 60 *1000 | 缓存更新时常(毫秒) 最大值: 30 * 60 * 1000 最小值: 10 * 1000 | 可选 |
2.2获取实验变量
初始化QuickTracking ABTest SDK 之后,通过 API 获取具体试验的变量值,根据获取试验变量值的方式,可分为下面三种策略:
fetchABTestFromCache :读取本地缓存,缓存不存在时使用默认值
fetchABTestFromServer :忽略本地缓存,从服务端获取数据
fetchABTestFromCacheThenServer :优先读取本地缓存,缓存不存在时从服务端获取数据
2.2.1使用场景说明
API名称 | 场景说明 |
fetchABTestFromCache | 如果对查询性能有要求,可以使用fetchABTestFromCache API 只从本地缓存获取变量值,缺点是无法及时命中最新的实验结果 |
fetchABTestFromServer | 如果您进行时间片轮转实验,且对实验的时效性有要求,可以使用fetchABTestFromServer API 获取实验变量值,缺点是可能会存在一定的网络延迟 |
fetchABTestFromCacheThenServer | 默认情况下,建议使用此API,兼顾查询性能和时效性考虑,该API会优先从本地缓存获取变量值,如果本地缓存不命中结果,则查询AB实验服务端最新数据 |
2.3API 介绍
fetchABTestFromCache
/**
* 从缓存中获取试验结果
*
* @param paramName 参数名
* @param defaultValue 默认值
* @param <T> 返回值类型
* @return the t
*/
<T> T fetchABTestFromCache(String paramName, T defaultValue);
请求参数
参数 | 类型 | 默认值 | 含义 | 备注 |
param_name | string | undefined | 实验参数名 | 必传参数,需设置非空字符串。 |
default_value | String | Boolean | Integer | JSONObject | undefined | 实验参数默认结果值 | 必传参数,需和当前实验值结果类型保持一致。 如参数对应的实验值类型为NUMBER类型,则传入的default_value也必须是number类型,同时返回的result实验结果也是number类型 |
注意:请确保对A/B分流接口中使用的默认值,都做了正常的业务逻辑处理!
返回结果
参数 | 类型 | 默认值 | 含义 | 备注 |
<T> T | String | Boolean | Integer | JSONObject | undefined | 实验参数结果值 | 设置的实验结果值必须要和实验值类型一致,否则sdk会认为是异常实验结果。同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 |
使用示例
import com.quicktracking.sdk.android.abtest.QTABTest;
// 请求返回String参数
String result = QTABTest.shareInstance().fetchABTestFromCache("param_string", "test");
// 请求返回Boolean参数
Boolean result = QTABTest.shareInstance().fetchABTestFromCache(getTextValue(), false);
// 请求返回Number参数
Integer result = QTABTest.shareInstance().fetchABTestFromCache(getTextValue(), 1);
//请求返回JSONObject参数
try{
JSONObject result = QTABTest.shareInstance().fetchABTestFromCache(getTextValue(), null);
}catch (Exception e){
}
fetchABTestFromServer
/**
* 从网络请求试验结果
*
* @param <T> 默认值类型
* @param paramName 参数名
* @param timeoutMillSeconds 超时时间(毫秒)
* @param defaultValue 默认值
* @param callback 回调接口
*/
<T> void fetchABTestFromServer(String paramName, int timeoutSeconds, T defaultValue, OnABTestResultCallBack<T> callback);
请求参数
参数 | 类型 | 默认值 | 含义 | 备注 |
paramName | string | undefined | 实验参数名 | 必传参数,需设置非空字符串。 |
timeoutSeconds | int | 3000 | 分流实验服务端请求超时时间 | 非必传参数 |
defaultValue | String | Boolean | Integer | JSONObject | undefined | 实验参数默认结果值 | 必传参数,需和当前实验值结果类型保持一致。 如参数对应的实验值类型为NUMBER类型,则传入的default_value也必须是number类型,同时返回的result实验结果也是number类型 |
<T> T | String | Boolean | Integer | JSONObject | undefined | 实验参数结果值 | 设置的实验结果值必须要和实验值类型一致,否则sdk会认为是异常实验结果。同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 |
callback | Function | 无 | 分流实验结果值回调函数 | 必传参数 |
Callback说明:
import com.quicktracking.sdk.android.abtest.OnABTestResultCallBack;
public interface OnABTestResultCallBack<T> {
/**
* 请求回调
*
* @param result <T> 默认值类型
*/
void onResult(T result);
}
返回参数:
参数 | 类型 | 默认值 | 含义 | 备注 |
<T> T | String | Boolean | Integer | JSONObject | undefined | 实验参数结果值 | 设置的实验结果值必须要和实验值类型一致,否则sdk会认为是异常实验结果。同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 |
注意:请确保对A/B分流接口中使用的默认值,都做了正常的业务逻辑处理!
返回结果
参数 | 类型 | 默认值 | 含义 | 备注 |
result | String | Boolean | Integer | JSONObject | undefined | 实验参数结果值 | 设置的实验结果值必须要和实验值类型一致,否则sdk会认为是异常实验结果。同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 |
使用示例
import com.quicktracking.sdk.android.abtest.OnABTestResultCallBack;
import com.quicktracking.sdk.android.abtest.QTABTest;
QTABTest.shareInstance().fetchABTestFromServer("", 10 * 1000, null, new OnABTestResultCallBack<JSONObject>() {
@Override
public void onResult(JSONObject result) {
refreshLogView(result.toString());
}
});
fetchABTestFromCacheThenServer
/**
* 如果本地有缓存,则返回缓存数据;否则从网络请求最新的试验数据,可自定义超时时间
*
* @param <T> 默认值类型
* @param paramName 参数名
* @param timeout 超时时间
* @param defaultValue 默认值
* @param callback 回调接口
*/
<T> void fetchABTestFromCacheThenServer(String paramName, int timeout, T defaultValue, OnABTestResultCallBack<T> callback);
请求参数
参数 | 类型 | 默认值 | 含义 | 备注 |
paramName | string | undefined | 实验参数名 | 必传参数,需设置非空字符串。 |
timeoutSeconds | int | 3000 | 分流实验服务端请求超时时间 | 非必传参数 |
defaultValue | String | Boolean | Integer | JSONObject | undefined | 实验参数默认结果值 | 必传参数,需和当前实验值结果类型保持一致。 如参数对应的实验值类型为NUMBER类型,则传入的default_value也必须是number类型,同时返回的result实验结果也是number类型 |
<T> T | String | Boolean | Integer | JSONObject | undefined | 实验参数结果值 | 设置的实验结果值必须要和实验值类型一致,否则sdk会认为是异常实验结果。同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 |
callback | Function | 无 | 分流实验结果值回调函数 | 必传参数 |
Callback说明:
import com.quicktracking.sdk.android.abtest.OnABTestResultCallBack;
public interface OnABTestResultCallBack<T> {
/**
* 请求回调
*
* @param result <T> 默认值类型
*/
void onResult(T result);
}
返回参数:
参数 | 类型 | 默认值 | 含义 | 备注 |
<T> T | String | Boolean | Integer | JSONObject | undefined | 实验参数结果值 | 设置的实验结果值必须要和实验值类型一致,否则sdk会认为是异常实验结果。同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 |
注意:请确保对A/B分流接口中使用的默认值,都做了正常的业务逻辑处理!
返回结果
参数 | 类型 | 默认值 | 含义 | 备注 |
result | String | Boolean | Integer | JSONObject | undefined | 实验参数结果值 | 设置的实验结果值必须要和实验值类型一致,否则sdk会认为是异常实验结果。同时请注意result返回的结果在业务中都做了正常的业务逻辑判断 |
使用示例
import com.quicktracking.sdk.android.abtest.OnABTestResultCallBack;
import com.quicktracking.sdk.android.abtest.QTABTest;
QTABTest.shareInstance().fetchABTestFromCacheThenServer("param_json", 10 * 1000, null, new OnABTestResultCallBack<JSONObject>() {
@Override
public void onResult(JSONObject result) {
}
});
3.调试实验
开启实验后
开启log时会打印出您对应的实验列表