使用QuickTracking Android(A/B Testing)必備操作。
SDK基本資料
檔案名稱 | 版本號碼 | md5 | 檔案大小 |
QuickTracking ABTest SDK | 1.1.0 更新日誌:Android SDK更新日誌 | 118558e221e439f429c05d61200037ed | 61KB |
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.8.6.PX'
// QuickTracking A/B Test SDK
implementation 'com.lydaas.qtsdk:qt-ab-test:1.1.0'
}當地套件:
dependencies {
implementation fileTree(include:['*.jar'], dir:'libs')
//QuickTracking統計分析SDK
implementation files('libs/qt-px-common-1.8.6.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 初始化---完全依賴採集SDK上報資料
QTABTestConfigOptions config = new QTABTestConfigOptions("您的收數服務地址/abtest_results?appkey=xxxxx");
// QT A/B Testing SDK 初始化---非完全依賴採集SDK上報資料,僅使用AB實驗
QTABTestConfigOptions config = new QTABTestConfigOptions("您的收數服務地址/abtest_results?appkey=xxxxx",10 * 60 * 1000,"自訂的裝置id", new IQTABTestPropertyChanged() {
@Override
public void onPropertyChanged(JSONArray abParams) {
Log.d("ABTest", "onPropertyChanged: " + abParams.toString());
}
});
// 初始化需要傳入Context
QTABTest.startWithConfigOptions(this.getApplicationContext(), config);
} catch (Exception e) {
e.printStackTrace();
}
配置方法:
public QTABTestConfigOptions(String url,int timeInterval)
public QTABTestConfigOptions(String url)
public QTABTestConfigOptions(String url,int timeInterval, String customDeviceId, IQTABTestPropertyChanged iQTABTestPropertyChanged)參數 | 類型 | 預設值 | 含義 | 備忘 |
url | string | undefined | 實驗地址 | 必傳參數,需設定非Null 字元串。 |
timeInterval | int | 10 * 60 *1000 | 緩衝更新時常(毫秒) 最大值: 30 * 60 * 1000 最小值: 10 * 1000 | 可選 |
custom_id | string | undefined | 自訂裝置id(用於只接入AB實驗,而不接入採集模組時使用) | 可選 |
iQTABTestPropertyChanged | IQTABTestPropertyChanged | undefined | AB參數變更回調 | 可選 |
import com.quicktracking.sdk.android.abtest;
/**
* 定義了一個介面 IQTABTestPropertyChanged,用於監聽屬性變化的事件。
*
* <p>該介面包含一個方法 {@link #onPropertyChanged(JSONArray)},當屬性發生變化時會被調用。
*
* @see JSONArray
*/
public interface IQTABTestPropertyChanged {
/**
* 當屬性發生變化時觸發的回調方法。
*
* @param abParams 包含屬性變化相關資訊的 JSON 數組。
* 該參數通常用於傳遞屬性變化的具體資料或上下文資訊。
*/
void onPropertyChanged(JSONArray abParams);
}2.1.3 混淆配置
如果您的應用使用了代碼混淆,請添加如下配置,以避免Quick Tracking和A/B Testing的SDK被錯誤混淆導致SDK不可用。
-keep class com.umeng.** {*;}
-keep class org.repackage.** {*;}
-keep class com.quick.qt.** {*;}
-keep class rpk.quick.qt.** {*;}
# for AB
-keep class com.quicktracking.sdk.android.abtest.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}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 | 實驗參數名 | 必傳參數,需設定非Null 字元串。 |
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 | 實驗參數名 | 必傳參數,需設定非Null 字元串。 |
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 | 實驗參數名 | 必傳參數,需設定非Null 字元串。 |
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時會列印出您對應的實驗列表
