iOS/macOS SDK 集成(A/B Testing)
|
收藏
A/B Testing SDK 依赖于神策分析 SDK 4.2.0 及以上版本,在使用前请确保已经成功集成神策分析 SDK,并进行了 SDK 初始化,详情可参考 SDK 集成 (iOS)、SDK 集成(macOS)
SDK 集成
- 在 Podfile 文件中添加 pod 'SensorsABTesting'
- 打开终端,切换到项目目录
- 执行 pod install 或 pod update
注:如果执行 pod update 无法检测到最新版本,可以先执行 pod cache clean SensorsABTesting 清除本地缓存。
- 从 GitHub 获取 SDK 的源代码
- 将源代码中 SensorsABTest 目录导入 App 项目,并选中 Copy items if needed
初始化 SDK
在神策分析中创建 A/B Testing 后,会生成分流试验请求 URL,通过该 URL 初始化 A/B Testing SDK:
#import <SensorsABTest.h>
// 必须先初始化神策分析 SDK(参考文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_ios_use-16285756.html)
// A/B Testing SDK 初始化
SensorsABTestConfigOptions *abtestConfigOptions = [[SensorsABTestConfigOptions alloc] initWithURL:@"分流试验请求地址"];
[SensorsABTest startWithConfigOptions:abtestConfigOptions];
#import "SensorsABTest.h"
// 必须先初始化神策分析 SDK(参考文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_ios_use-16285756.html)
// A/B Testing SDK 初始化
SensorsABTestConfigOptions *abtestConfigOptions = [[SensorsABTestConfigOptions alloc] initWithURL:@"分流试验请求地址"];
[SensorsABTest startWithConfigOptions:abtestConfigOptions];
获取试验变量
初始化 SDK 之后,通过 API 获取具体试验的变量值,根据获取试验变量值的方式,可分为下面三种策略:
- fetchCacheABTest:读取本地缓存,缓存不存在时使用默认值
- asyncFetchABTest:忽略本地缓存,从服务端获取数据
- fastFetchABTest:优先读取本地缓存,缓存不存在时从服务端获取数据
如何确定应该选择哪个API获取试验变量值?
1.一般情况下,我们推荐使用fastFetchABTest获取试验变量值。
2.如果您对性能有要求,可以使用fetchCacheABTest, 只从本地缓存中获取变量值,但可能导致用户无法及时命中最新的试验。
3.如果您进行时间片轮转试验,且对时效性有要求,可以使用asyncFetchABTest 获取试验变量值,但会存在一定的网络延迟。
1. asyncFetchABTest 和 fastFetchABTest 接口会在主线程回调试验变量值,fetchCacheABTest 接口会在当前线程返回试验变量值
2. 请确保对A/B分流返回的 result 结果 & 接口中使用的默认值,都做了正常的业务逻辑处理!
3. 请确保默认值 default_value 和当前试验值类型相同。比如参数对应试验值为 Int 类型,则传入的 default_value 也必须是 Int 类型,同时返回的试验结果 result 也是 Int 类型
以 fastFetchABTest 为例,可在相应的业务逻辑中添加如下代码:
#import <SensorsABTest.h>
// Integer 类型试验(第二个参数 0,表示未命中试验时,会返回此默认值,请根据业务需要更改此处的值)
[[SensorsABTest sharedInstance] fastFetchABTestWithParamName:@"具体的试验参数" defaultValue:@(0) completionHandler:^(id _Nullable result) {
if ([result isKindOfClass:NSNumber.class]) {
NSNumber *number = (NSNumber *)result;
NSInteger integerResult = [number integerValue];
// TODO 请根据 integerResult 进行自己的试验
}
}];
携带自定义属性获取试验变量
v0.1.5 及以上版本 SDK 支持自定义属性扩充受众筛选能力,可以在初始化 SDK 后,通过 API 添加自定义属性获取具体试验的变量值,根据获取试验变量值的方式,可分为下面 2 种策略:
- asyncFetchABTest:忽略本地缓存,从服务端获取数据
- fastFetchABTest:优先读取本地缓存,缓存不存在时从服务端获取数据
asyncFetchABTest 和 fastFetchABTest 接口会在主线程回调试验变量值
以 fastFetchABTest 为例,可在相应的业务逻辑中添加如下代码:
#import <SensorsABTest.h>
// Integer 类型试验(第二个参数 0,表示未命中试验时,会返回此默认值,请根据业务需要更改此处的值)
SensorsABTestExperiment *experiment = [SensorsABTestExperiment experimentWithParamName:@"具体的试验参数" defaultValue:@(0)];
NSMutableDictionary *properties = [NSMutableDictionary dictionary];
properties[@"自定义属性对应英文名"] = @"自定义属性对应 value"; // 自定义属性
experiment.properties = properties;
[[SensorsABTest sharedInstance] fastFetchABTestWithExperiment:experiment completionHandler:^(id _Nullable result) {
if ([result isKindOfClass:NSNumber.class]) {
NSNumber *number = (NSNumber *)result;
NSInteger integerResult = [number integerValue];
// TODO 请根据 integerResult 进行自己的试验
}
}];
自定义属性值支持字符串、字符串数组、数值、布尔和日期时间格式,并且属性名支持英文、数字、下划线,且不能以数字开头。
获取设备主体试验变量
SDK支持使用设备主体进行分流。需要您在初始化SDK时,将匿名ID设置为公共属性。初始化并设置公共属性的具体方式如下:
#import <SensorsABTest.h>
// 必须先初始化神策分析 SDK(参考文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_ios_use-16285756.html)
// A/B Testing SDK 初始化
SensorsABTestConfigOptions *abtestConfigOptions = [[SensorsABTestConfigOptions alloc] initWithURL:@"分流试验请求地址"];
[SensorsABTest startWithConfigOptions:abtestConfigOptions];
//设备主体分流需要将匿名ID设置为公共属性
NSString *anonymousId = [[SensorsAnalyticsSDK sharedInstance] anonymousId];
[[SensorsAnalyticsSDK sharedInstance] registerSuperProperties:@{@"anonymous_id" : anonymousId}];
后续可以使用
- fetchCacheABTest :读取本地缓存,缓存不存在时使用默认值
- asyncFetchABTest :忽略本地缓存,从服务端获取数据
- fastFetchABTest :优先读取本地缓存,缓存不存在时从服务端获取数据
三种方式同获取试验变量
携带自定义主体获取试验变量
v0.2.1及以上版本SDK支持使用自定义主体进行分流。在接入前,需要您确认以下几点:
- 确认您要使用的自定义主体参数名(例如 phone_number, account等,支持自定义)。
- 在神策元数据管理将该自定义主体设置为公共属性。
- 将自定义主体参数名提供给神策,由神策技术人员将其配置到分流服务后台。
在SDK初始化后,将您使用的自定义主体设置为公共属性,并在调用获取试验变量API时,手动将其添加到接口请求参数custom_ids字典中。具体方式如下:
#import <SensorsABTest.h>
// 必须先初始化神策分析 SDK(参考文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_ios_use-16285756.html)
// A/B Testing SDK 初始化
SensorsABTestConfigOptions *abtestConfigOptions = [[SensorsABTestConfigOptions alloc] initWithURL:@"分流试验请求地址"];
[SensorsABTest startWithConfigOptions:abtestConfigOptions];
//自定义主体分流需要将自定义主体名设置为公共属性,并将其加入分流请求中
[[SensorsAnalyticsSDK sharedInstance] registerSuperProperties:@{@"custom_id1" : @"myCustomId1"}];
[SensorsABTest.sharedInstance setCustomIDs:@{@"custom_id1": @"myCustomId1"}];
后续可以使用
- fetchCacheABTest :读取本地缓存,缓存不存在时使用默认值
- asyncFetchABTest :忽略本地缓存,从服务端获取数据
- fastFetchABTest :优先读取本地缓存,缓存不存在时从服务端获取数据
三种方式同获取试验变量
调试试验
在 AppDelegate 的 - application:openURL:options: 方法中调用 -handleOpenURL: 对神策 A/B Testing Scheme 进行处理:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
if ([[SensorsABTest sharedInstance] handleOpenURL:url]) {
return YES;
}
return NO;
}
在 AppDelegate 的 - application: openURLs: 方法中调用 -handleOpenURL: 对神策 A/B Testing Scheme 进行处理:
- (void)application:(NSApplication *)application openURLs:(NSArray<NSURL *> *)urls {
for (NSURL *url in urls) {
if ([SensorsABTest.sharedInstance handleOpenURL:url]) {
return;
}
}
}
可先将设备录入到调试设备管理列表中,在创建试验时,直接将指定调试设备录入到对应试验分组。
- 录入前请确保 App 已正确配置 Scheme
- 调试设备在调试状态和正式上线阶段都会生效
- 由于 Mac 设备不方便直接扫码,建议通过扫码工具获取二维码对应链接,然后在 safari 打开链接。然后点击落地页 H5 按钮,即可跳转打开 App,自动上传 distinctId 作为白名单。
注:本文档内容为神策产品使用和技术细节说明文档,不包含适销类条款;具体企业采购产品和技术服务内容,以商业采购合同为准。