引入神策 Flutter 插件
在 pubspec.yaml 中添加 A/B Testing Flutter 插件:
dependencies:
abtesting_sdk_flutter: ^0.0.2
初始化 SDK
在神策分析中创建 A/B Testing 后,会生成分流试验请求 URL,通过该 URL 初始化 A/B Testing SDK:
import 'package:abtesting_sdk_flutter/abtesting_sdk_flutter.dart';
// 注意需要在埋点 SDK 初始化后初始化 A/B Testing SDK
// A/B Testing SDK 初始化
SensorsABTest.startWithConfigOptions("分流试验请求地址");
Flutter 中获取试验变量
初始化 SDK 之后,通过 API 获取具体试验的变量值,根据获取试验变量值的方式,可分为下面三种策略:
- fetchCacheABTest :读取本地缓存,缓存不存在时使用默认值
- asyncFetchABTest :忽略本地缓存,从服务端获取数据
- fastFetchABTest :优先读取本地缓存,缓存不存在时从服务端获取数据
如何确定应该选择哪个API获取试验变量值?
1.一般情况下,我们推荐使用fastFetchABTest获取试验变量值。
2.如果您对性能有要求,可以使用fetchCacheABTest, 只从本地缓存中获取变量值,但可能导致用户无法及时命中最新的试验。
3.如果您进行时间片轮转试验,且对时效性有要求,可以使用asyncFetchABTest 获取试验变量值,但会存在一定的网络延迟。
1. 请确保对A/B分流返回的 result 结果 & 接口中使用的默认值,都做了正常的业务逻辑处理!
2. 请确保默认值 default_value 和当前试验值类型相同。比如参数对应试验值为 Int 类型,则传入的 default_value 也必须是 Int 类型,同时返回的试验结果 result 也是 Int 类型.
以 fastFetchABTest 为例,可在相应的业务逻辑中添加如下代码:
import 'package:abtesting_sdk_flutter/abtesting_sdk_flutter.dart';
// int 类型试验(第二个参数 0,表示未命中试验时,会返回此默认值,请根据业务需要更改此处的值)
int? result = await SensorsABTest.fastFetchABTest("具体的 paramName", 0);
// TODO 根据 result 处理相应逻辑
switch (result) {
case 0:
break;
case 1:
// 试验组 1 的处理逻辑
break;
case 2:
// 试验组 2 的处理逻辑
break;
// ……
// ……
default:
// 其他情况的处理逻辑
}
注意
如果您的项目不支持 Null safety ,请使用如下方式获取实验结果:
int result = await SensorsABTest.fastFetchABTest("具体的 paramName", 0); // TODO 根据 result 处理相应逻辑
获取设备主体试验变量
SDK支持使用设备主体进行分流。需要您在初始化SDK时,将匿名ID设置为公共属性。初始化并设置公共属性的具体方式如下:
// Android 端 A/B Testing SDK 初始化相关代码
import com.sensorsdata.abtest.SensorsABTest;
import com.sensorsdata.abtest.SensorsABTestConfigOptions;
import com.sensorsdata.abtest.OnABTestReceivedData;
必须先初始化神策分析 SDK(参考文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_android_basic-27726353.html)
// A/B Testing SDK 初始化(试验上线前,请检查试验的分流服务的 url 是否正确)
SensorsABTestConfigOptions abTestConfigOptions = new SensorsABTestConfigOptions("http://10.129.26.177:8202/api/v2/abtest/online/results?project-key=6C6658034A6581A9C3CC3D888B3DEFB6CDB6606C");
SensorsABTest.startWithConfigOptions(this, abTestConfigOptions);
//设备主体分流需要将匿名ID设置为公共属性
try {
JSONObject properties = new JSONObject();
properties.put("anonymous_id", SensorsDataAPI.sharedInstance().getAnonymousId());
SensorsDataAPI.sharedInstance().registerSuperProperties(properties);
} catch (JSONException e) {
e.printStackTrace();
}
// iOS 端 A/B Testing SDK 初始化相关代码
#import <SensorsABTest.h>
必须先初始化神策分析 SDK(参考文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_ios_use-27724338.html)
// A/B Testing SDK 初始化
SensorsABTestConfigOptions *abtestConfigOptions = [[SensorsABTestConfigOptions alloc] initWithURL:@"http://10.129.26.177:8202/api/v2/abtest/online/results?project-key=6C6658034A6581A9C3CC3D888B3DEFB6CDB6606C"];
[SensorsABTest startWithConfigOptions:abtestConfigOptions];
//设备主体分流需要将匿名ID设置为公共属性
NSString *anonymousId = [[SensorsAnalyticsSDK sharedInstance] anonymousId];
[[SensorsAnalyticsSDK sharedInstance] registerSuperProperties:@{@"anonymous_id" : anonymousId}];
后续可以使用
- fetchCacheABTest :读取本地缓存,缓存不存在时使用默认值
- asyncFetchABTest :忽略本地缓存,从服务端获取数据
- fastFetchABTest :优先读取本地缓存,缓存不存在时从服务端获取数据
三种方式同Flutter中获取试验变量
调试试验
对于 iOS 需要在 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;
}
先将设备录入到调试设备管理列表中,在创建试验时,直接将指定调试设备录入到对应试验分组。
- 录入前请确保 App 已正确配置 Scheme(Android)
- 录入前请确保 App 已正确配置 Scheme(iOS)
- 调试设备在调试状态和正式上线阶段都会生效