使用QuickTracking iOS(A/B Testing)必備操作。
SDK基本資料
檔案名稱 | 版本號碼 | md5 | 檔案大小 |
QuickTracking ABTest SDK | 1.4.2 更新日誌:iOS/macOS SDK更新日誌 | b57d92a3a4de3b7b2913a8d67c34ece1 | 1.6 MB |
1.整合代碼明細
A/B Testing SDK 依賴iOS SDKv1.6.0及以上版本,在使用前請確保已經成功整合QuickTracking 統計SDK,並進行了SDK初始化,詳情可參考引入&配置SDK。
2.編程實驗
2.1整合與初始化SDK
首先您需要使用同步方式初始化QuickTracking 統計SDK。初始化QuickTracking 統計SDK 完成之後,再初始化QuickTracking A/B Testing SDK。在QuickTracking A/B Testing SDK 初始化時需要傳入請求分流實驗的地址,請聯絡營運人員擷取。
整合QuickTracking SDK
CocoaPods 方式(推薦)
在Podfile 檔案中添加
pod 'QTABTest'開啟終端,切換到專案目錄
執行 pod install 或者 pod update
如果拉取不到最新版本,先執行 pod repo update,再執行pod install 或者 pod update
手動整合
請聯絡QuickTracking產品營運同學擷取QTABTest SDK離線包:QTABTestSDK.xcframework檔案。
工程配置
添加
QTABTestSDK.xcframework檔案到應用工程

SDK初始化
/** 初始化QuickTracking ABTest iOS SDK
@param configOptions 初始化配置
*/
+ (void)startWithConfigOptions:(QTABTestConfigOptions *)configOptions;QTABTestConfigOptions類
#import <Foundation/Foundation.h>
typedef void (^OnABTestPropertyChangedBlock)(NSArray * _Nonnull result);
NS_ASSUME_NONNULL_BEGIN
@interface QTABTestConfigOptions : NSObject
/// 擷取實驗結果 url
@property (nonatomic, copy) NSURL *baseURL;
/// SDK 主動輪詢最新實驗結果間隔時間(單位:秒),預設10分鐘,最小支援10秒,最大支援30分鐘,超出使用預設值
@property (nonatomic) NSTimeInterval updateInterval;
/// 本機快取實驗結果資料變化回調
@property (nonatomic, copy) OnABTestPropertyChangedBlock onABTestPropertyChangedBlock;
- (instancetype)init NS_UNAVAILABLE;
/** 初始化方法
@param urlString 地址連結URL
@return 執行個體對象
*/
- (instancetype)initWithURL:(NSString *)urlString NS_DESIGNATED_INITIALIZER;
@end
NS_ASSUME_NONNULL_END樣本:
#import <QTABTestSDK/QTABTestSDK.h>
QTABTestConfigOptions *configOptions = [[QTABTestConfigOptions alloc] initWithURL:@"您的收數服務地址/abtest_results?appkey=xxxxx"];
// 主動每30秒輪詢最新實驗結果
configOptions.updateInterval = 30;
// 本機快取實驗結果資料變化回調
// 方式1:初始化配置中設定
configOptions.onABTestPropertyChangedBlock = ^(NSArray * _Nonnull result) {
NSLog(@"---------result: %@",result);
/** 返回結果資料樣本
[
{"gid": xxx, "expid": xxx,},
{"gid": xxx, "expid": xxx,},
...
]
**/
};
[QTABTest startWithConfigOptions:configOptions];開啟日誌
/// 設定是否在console輸出SDK的日誌資訊
/// @param enable 開啟/關閉調試日誌輸出; YES:開啟, NO:關閉,預設為 NO
+ (void)setLogEnabled:(BOOL)enable;樣本:
[QTABTest setLogEnabled:YES];2.1.1 主動設定本機快取實驗結果資料變化回調API
API 名稱 | 情境說明 |
setAbPropertyChangedBlock | 開發人員設定AB SDK本機快取實驗結果資料變化監聽回調 |
使用樣本
#import <QTABTestSDK/QTABTestSDK.h>
// 本機快取實驗結果資料變化回調
// 方式2:開發人員設定
[[QTABTest sharedInstance] setAbPropertyChangedBlock:^(NSArray * _Nonnull result) {
NSLog(@"---------result: %@",result);
/** 返回結果資料樣本
[
{"gid": xxx, "expid": xxx,},
{"gid": xxx, "expid": xxx,},
...
]
**/
}];2.2擷取實驗變數
初始化QuickTracking ABTest SDK 之後,通過 API 擷取具體實驗的變數值,根據擷取實驗變數值的方式,可分為下面三種策略:
fetchABTestFromCache :讀取本機快取,緩衝不存在時使用預設值
fetchABTestFromServer :忽略本機快取,從服務端擷取資料
fetchABTestFromCacheThenServer :優先讀取本機快取,緩衝不存在時從服務端擷取資料
使用情境說明
API名稱 | 情境說明 |
fetchABTestFromCache | 如果對查詢效能有要求,可以使用fetchABTestFromCache API 只從本機快取擷取變數值,缺點是無法及時命中最新的實驗結果 |
fetchABTestFromServer | 如果您進行時間片輪轉實驗,且對實驗的時效性有要求,可以使用fetchABTestFromServer API 擷取實驗變數值,缺點是可能會存在一定的網路延遲 |
fetchABTestFromCacheThenServer | 預設情況下,建議使用此API,兼顧查詢效能和時效性考慮,該API會優先從本機快取擷取變數值,如果本機快取不命中結果,則查詢AB實驗服務端最新資料 |
2.3 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類型 |
注意:請確保對A/B分流介面中使用的預設值,都做了正常的商務邏輯處理!
返回結果
參數 | 類型 | 預設值 | 含義 | 備忘 |
<T> T | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
使用樣本
#import "QTABTest.h"
// 請求返回NSString參數
NSString *result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"ios_test_string" defaultValue:@"111"];
// 請求返回Boolean參數
BOOL result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"ios_test_bool" defaultValue:@(YES)];
// 請求返回Number參數
NSNumber result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"ios_test_number" defaultValue:@1];
//請求返回NSDictionary參數
NSDictionary *dict = @{
@"param1" : @"1"
};
NSDictionary *result = [[QTABTest sharedInstance] fetchABTestFromCacheWithParamName:@"ios_test_json" defaultValue:dict];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返回的結果在業務中都做了正常的商務邏輯判斷 |
注意:請確保對A/B分流介面中使用的預設值,都做了正常的商務邏輯處理!
返回結果
參數 | 類型 | 預設值 | 含義 | 備忘 |
result | NSString | BOOL | NSNumber | NSDictionary | nil | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
使用樣本
NSDictionary *dict = @{
@"param1" : @"1"
};
NSString *paramName = @"ios_test_json";
[[QTABTest sharedInstance] fetchABTestFromServerWithParamName:paramName defaultValue:dict timeoutInterval:10 completionHandler:^(id _Nullable result) {
if (result) {
NSLog(@"======result:%@", result);
}
}];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 | 無 | 分流實驗結果值回呼函數 | 必傳參數 |
注意:請確保對A/B分流介面中使用的預設值,都做了正常的商務邏輯處理!
返回結果
參數 | 類型 | 預設值 | 含義 | 備忘 |
result | NSString | BOOL | NSNumber | NSDictionary | 實驗參數結果值 | 設定的實驗結果值必須要和實驗實值型別一致,否則sdk會認為是異常實驗結果。同時請注意result返回的結果在業務中都做了正常的商務邏輯判斷 |
使用樣本
NSString *defaultValue = @"111";
NSString *paramName = @"ios_test_string";
[[QTABTest sharedInstance] fetchABTestFromCacheThenServerWithParamName:paramName defaultValue:defaultValue timeoutInterval:10 completionHandler:^(id _Nullable result) {
if (result) {
NSLog(@"======result:%@", result);
}
}];3.調試實驗
開啟實驗後

開啟log時會列印出您對應的實驗列表
