使用QuickTracking macOS(A/B Testing)必備操作。
SDK基本資料
檔案名稱 | 版本號碼 | md5 | 檔案大小 |
QuickTracking macOS SDK | 1.0.0 更新日誌: macOS SDK 更新日誌 | 48db48d7f2c95d97e8adc55540c46091 | 3.2 MB |
QTABTestSDK | 1.4.2 更新日誌:iOS/macOS SDK更新日誌 | b57d92a3a4de3b7b2913a8d67c34ece1 | 1.6 MB |
整合SDK
A/B Testing SDK 依賴macOS SDK,在使用前請確保已經成功整合QuickTracking 統計SDK,並進行了SDK初始化,詳情可參考。
CocoaPods方式(推薦)
在Podfile檔案中添加
pod 'QuickTrackingSDK'
pod 'QTABTest'開啟終端,切換到專案目錄
執行 pod install 或者 pod update
如果拉取不到最新版本,先執行 pod repo update,再執行pod install 或者 pod update
離線整合
向QuickTracking產品營運同學擷取SDK離線包
工程配置
添加如下檔案到應用工程
QuickTrackingSDK.xcframework
QTABTestSDK.xcframework

在Xcode工程 “Build Phase” 選項下,“Link Binary With Libraries” 中添加依賴庫:
QuickTrackingSDK.xcframework
QTABTestSDK.xcframework
libsqlite3.tbd
libz.tbd

編程實驗
SDK初始化
完整樣本
#import <QuickTrackingSDK/QuickTrackingSDK.h>
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
QTSDKConfig *sdkConfig;
// 初始化SDK配置
sdkConfig = [[QTSDKConfig alloc] initWithAppkey:@"您的應用唯一標識"
trackDomain:@"https://您的收數網域名稱"
launchOptions:nil];
// 設定應用發布渠道,例如:appstore
sdkConfig.channel = @"您的應用發布渠道";
// 初始化 SDK
[QuickTrackingSDK initWithConfig:sdkConfig];
//初始化ABTest配置
QTABTestConfigOptions *configOptions;
configOptions = [[QTABTestConfigOptions alloc] initWithURL:@"https://您的收數網域名稱/abtest_results?appkey=您的應用唯一標識"];
// SDK主動輪詢最新實驗結果間隔時間,單位秒
// 預設600s,即10分鐘
// 最小間隔 10s,最大間隔 1800s(即30分鐘),超過範圍使用預設間隔時間
//configOptions.updateInterval = 300;
// ABTest 日誌開關,預設關閉,即 NO
configOptions.enableLog = YES;
// ABTest 屬性變更回調,
configOptions.onABTestPropertyChangedBlock = ^(NSArray * _Nonnull result) {
/** 輸出樣本
[
{"gid": xxx, "expid": xxx},
{"gid": xxx, "expid": xxx}
]
**/
NSLog(@"-----%@", result);
};
// ABTest SDK 初始化
[QTABTest startWithConfigOptions:configOptions];
}QTABTestConfigOptions說明
名稱 | 類型 | 描述 |
URL | NSString | 擷取實驗結果的url。需要設定為有效實驗結果擷取地址。 形如:https://您的收數網域名稱/abtest_results?appkey=您的應用唯一標識 |
updateInterval | NSTimeInterval | SDK 主動輪詢最新實驗結果的時間間隔(單位:秒)。 預設值為 600 秒,最小支援 10 秒,最大支援 1800 秒,超出範圍使用預設值。 |
enableLog | BOOL | 是否啟用日誌記錄,預設為NO。 設定為 YES 啟用日誌記錄功能。 |
onABTestPropertyChangedBlock | OnABTestPropertyChangedBlock | A/B 測試屬性更改時的回調塊,包含一個 NSArray 類型的參數 result。 |
開啟日誌
介面函數
/// 設定是否在console輸出SDK的日誌資訊
/// @param enable 開啟/關閉調試日誌輸出; YES:開啟, NO:關閉,預設為 NO
+ (void)setLogEnabled:(BOOL)enable;完整樣本
[QTABTest setLogEnabled:YES];擷取實驗變數
初始化QuickTracking ABTest SDK 之後,通過 API 擷取具體實驗的變數值,根據擷取實驗變數值的方式,可分為下面三種策略:
fetchABTestFromCache :讀取本機快取,緩衝不存在時使用預設值
fetchABTestFromServer :忽略本機快取,從服務端擷取資料
fetchABTestFromCacheThenServer :優先讀取本機快取,緩衝不存在時從服務端擷取資料
使用情境說明
API名稱 | 情境說明 |
fetchABTestFromCache | 如果對查詢效能有要求,可以使用fetchABTestFromCache API 只從本機快取擷取變數值,缺點是無法及時命中最新的實驗結果 |
fetchABTestFromServer | 如果您進行時間片輪轉實驗,且對實驗的時效性有要求,可以使用fetchABTestFromServer API 擷取實驗變數值,缺點是可能會存在一定的網路延遲 |
fetchABTestFromCacheThenServer | 預設情況下,建議使用此API,兼顧查詢效能和時效性考慮,該API會優先從本機快取擷取變數值,如果本機快取不命中結果,則查詢AB實驗服務端最新資料 |
API 介紹
fetchABTestFromCache
介面函數
//讀取本機快取擷取實驗,緩衝不存在時使用預設值
/// @param paramName 實驗參數名
/// @param defaultValue 預設結果
/// @return 實驗值
- (nullable id)fetchABTestFromCacheWithParamName:(NSString*)paramName
defaultValue:(id)defaultValue;參數說明
參數 | 類型 | 含義 | 備忘 |
paramName | NSString | 實驗參數名 | 必傳參數,需設定非Null 字元串。 |
defaultValue | NSString | BOOL | NSNumber | NSDictionary | 實驗參數預設結果值 | 必傳參數,需和當前實驗值結果類型保持一致。 如參數對應的實驗實值型別為NUMBER類型,則傳入的defaultValue也必須是number類型,同時返回的result實驗結果也是number類型 |
傳回值說明
參數 | 類型 | 預設值 | 含義 | 備忘 |
<T> T | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
完整樣本
#import "QTABTest.h"
// 請求返回NSString參數
NSString *result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"test_string" defaultValue:@"111"];
// 請求返回Boolean參數
BOOL result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"test_bool" defaultValue:@(YES)];
// 請求返回Number參數
NSNumber result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"test_number" defaultValue:@1];
//請求返回JSONObject參數
NSDictionary *dict = @{
@"param1" : @"1"
};
NSDictionary *result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"test_json" defaultValue:dict];使用注意:
請確保對A/B分流介面中使用的預設值,都做了正常的商務邏輯處理!
fetchABTestFromServer
介面函數
//忽略本機快取,從服務端擷取資料,非同步從服務端擷取最新實驗結果
/// @param paramName 實驗參數名
/// @param defaultValue 預設結果
/// @param timeoutInterval 逾時時間,單位為秒
/// @param completionHandler 主線程回調,返回實驗結果
- (void)fetchABTestFromServerWithParamName:(NSString*)paramName
defaultValue:(id)defaultValue
timeoutInterval:(NSTimeInterval)timeoutInterval
completionHandler:(void (^)(id _Nullable result))completionHandler;參數說明
參數 | 類型 | 預設值 | 含義 | 備忘 |
paramName | NSString | nil | 實驗參數名 | 必傳參數,需設定非Null 字元串。 |
timeoutInterval | NSTimeInterval | 600 | 分流實驗服務端請求逾時時間 | 非必傳參數 |
defaultValue | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數預設結果值 | 必傳參數,需和當前實驗值結果類型保持一致。 如參數對應的實驗實值型別為NUMBER類型,則傳入的defaultValue也必須是number類型,同時返回的result實驗結果也是number類型 |
<T> T | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
callback | callback | 無 | 分流實驗結果值回呼函數 | 必傳參數 |
Callback說明
typedef void (^QTABCompletionHandler)(id _Nullable result);傳回值說明
參數 | 類型 | 預設值 | 含義 | 備忘 |
<T> T | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
完整樣本
NSDictionary *dict = @{
@"param1" : @"1"
};
NSString *paramName = @"test_json";
[[QTABTest sharedInstance] fetchABTestFromServerWithParamName:paramName defaultValue:dict timeoutInterval:10 completionHandler:^(id _Nullable result) {
if (result) {
NSLog(@"======result:%@", result);
}
}];使用注意:
請確保對A/B分流介面中使用的預設值,都做了正常的商務邏輯處理!
fetchABTestFromCacheThenServer
介面函數
//優先讀取本機快取,緩衝不存在時從服務端擷取資料
/// @param paramName 實驗參數名
/// @param defaultValue 預設值
/// @param timeoutInterval 逾時時間,單位為秒
/// @param completionHandler 主線程回調,返回實驗結果
- (void)fetchABTestFromCacheThenServerWithParamName:(NSString*)paramName
defaultValue:(id)defaultValue
timeoutInterval:(NSTimeInterval)timeoutInterval
completionHandler:(void (^)(id _Nullable result))completionHandler;參數說明
參數 | 類型 | 預設值 | 含義 | 備忘 |
paramName | NSString | nil | 實驗參數名 | 必傳參數,需設定非Null 字元串。 |
timeoutInterval | NSTimeInterval | 600 | 分流實驗服務端請求逾時時間 | 非必傳參數 |
defaultValue | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數預設結果值 | 必傳參數,需和當前實驗值結果類型保持一致。 如參數對應的實驗實值型別為NUMBER類型,則傳入的default_value也必須是number類型,同時返回的result實驗結果也是number類型 |
<T> T | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
callback | callback | 無 | 分流實驗結果值回呼函數 | 必傳參數 |
傳回值說明
參數 | 類型 | 預設值 | 含義 | 備忘 |
result | NSString | BOOL | NSNumber | NSDictionary | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
完整樣本
NSString *defaultValue = @"111";
NSString *paramName = @"test_string";
[[QTABTest sharedInstance] fetchABTestFromCacheThenServerWithParamName:paramName defaultValue:defaultValue timeoutInterval:10 completionHandler:^(id _Nullable result) {
if (result) {
NSLog(@"======result:%@", result);
}
}];使用注意:
請確保對A/B分流介面中使用的預設值,都做了正常的商務邏輯處理!
3.調試實驗
開啟實驗後
