C++ A/B Testing SDK 依赖于神策分析 SDK,在使用前请确保已经成功集成神策分析 SDK,并进行了 SDK 初始化,详情可参考 SDK 集成 (C++)

SDK 版本需要 v1.0.0 及以上。

集成 SDK

A/B Testing SDK 源文件可从 https://github.com/sensorsdata/abtesting-sdk-cpp/releases 获取。使用时可以将代码直接集成到目标项目中,或先编译为库再引入,SDK 源代码包括:

./include/sensors_abtest_sdk.h
./include/sensors_json.hpp
./src/sensors_abtest_sdk.cpp
CODE

初始化 SDK

在神策分析中创建 A/B Testing 后,会生成分流试验请求 URL,通过该 URL 初始化 A/B Testing SDK:

#include "sensors_analytics_sdk.h"
#include "sensors_abtest_sdk.h"

// 需要先初始化 SA SDK
sensors_analytics::Sdk::Init(staging_file_path,
                             server_url,
                             distinct_id,
                             is_login_id,
                             max_staging_record_size);


// 初始化 A/B testing SDK
// api_url: 分流地址
sensors_abtest::Sdk::Init(api_url);
CODE

A/B Testing  SDK 会将请求到的实验结果进行缓存,也会将当前用户已触发实验的触发事件做标记进行缓存。当程序退出时会将相关内容暂时保存至本地文件(文件路径和 SA 暂存文件路径一致,文件名为 “sensors_abtesting_experiments”)中,当下次启动时会再次读取。

获取试验变量 

初始化 SDK 之后,通过 API 获取具体试验的变量值,根据获取试验变量值的方式,可分为下面三种策略:

  • FetchCacheABTest :读取本地缓存,缓存不存在时使用默认值
  • AsyncFetchABTest 忽略本地缓存,从服务端获取数据
  • FastFetchABTest 优先读取本地缓存,缓存不存在时从服务端获取数据

请确保对A/B分流返回的 result 结果 & 接口中使用的默认值,都做了正常的业务逻辑处理!

FastFetchABTest 为例,可在相应的业务逻辑中添加如下代码:

// Number 类型试验(第二个参数 0,表示未命中试验时,会返回此默认值,请根据业务需要更改此处的值)
int main(int argc, const char * argv[]) {  
    // 初始化 A/B Testing SDK
    sensors_abtest::Sdk::Init("分流试验请求地址"); 
	
    sensors_abtesting::Sdk::FastFetchABTest("具体的试验参数", 0, [](const sensors_abtesting::json &value) {
        int result = value.get<int>();    
        // TODO 请根据 result 进行自己的试验
    });
    return 0;
} 
CODE

使用示例

void InitSDK() {
    // 暂存文件路径,该文件用于进程退出时将内存中未发送的数据暂存在磁盘,下次发送时加载
    const string staging_file_path = "./staging_file";

    // 服务端数据接收地址
    const string server_url = "神策分析数据接收地址";

    // 随机生成 UUID 作为 distinct_id
    // 注意:这里只是作为 demo 演示,随机生成一个 ID,如果正式使用,可以生成使用其他格式的设备 ID,并且自己保存下来,下次构造 SDK 时使用之前相同的 ID 以标识同一设备。
    const string distinct_id = "ccc-cccc-cccc-cccccccc-cccc";
    // 神策 ID 分为 “设备 ID” 和 “登录 ID” 两种,随机生成的是 “设备 ID”
    const bool is_login_id = false;

    // 本地最多暂存(未调用 Flush 发送)的数据条数,超过该数值时,将从队首淘汰旧的数据
    const int max_staging_record_size = 200;

    // 初始化 SA SDK
    Sdk::Init(staging_file_path, server_url, distinct_id, is_login_id, max_staging_record_size);

    // A/B Testing SDK 初始化
    sensors_abtest::Sdk::Init("分流试验请求地址");

    // A/B Testing SDK 通过 FastFetchABTest 获取实验变量      
    sensors_abtesting::Sdk::FastFetchABTest("具体的试验参数", 0, [](const sensors_abtesting::json &value) {
        int result = value.get<int>();    
        // TODO 请根据 result 进行自己的试验
    });
  }   
CODE

 调试试验

可以通过录入白名单的方式,把 C++ 用户加入白名单;加入白名单后,会强制命中当前试验指定的分组(白名单只在试验调试状态有效)。

集成神策分析 C++ SDK 后,在控制台中查看任意一条数据,可以获取当前用户的 distinct_id。


将此 distinct_id 对应的值复制录入试验白名单