全部產品
Search
文件中心

Quick Tracking:iOS SDK

更新時間:Nov 08, 2025

使用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 方式(推薦)

  1. 在Podfile 檔案中添加

    pod 'QTABTest'
  2. 開啟終端,切換到專案目錄

  3. 執行 pod install 或者 pod update

  4. 如果拉取不到最新版本,先執行 pod repo update,再執行pod install 或者 pod update

手動整合

請聯絡QuickTracking產品營運同學擷取QTABTest SDK離線包:QTABTestSDK.xcframework檔案。

工程配置

  1. 添加QTABTestSDK.xcframework檔案到應用工程

image

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.調試實驗

開啟實驗後

image

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

image