A/B Testing SDK 依赖于神策分析微信小程序 SDK v1.14.7 及以上版本,在使用前请确保已经成功集成依赖于神策分析微信小程序 SDK,并进行了 SDK 初始化,详情可参考 SDK 集成 (微信小程序)

集成和初始化 SDK

首先您需要集成神策分析微信小程序 SDK。在 A/B Testing 插件初始化时需要传入请求分流试验的地址,请联系运营人员获取(创建具体的试验后,可下载 SDK 说明文档/复制具体代码示例)。

同步引入方式:

import sensors from './dist/wechat/sensorsdata.esm.js';
import abtest from './dist/wechat/plugin/abtesting-sdk-miniprogram/wechat/abtest.esm.min.js';

// 微信小程序 SDK 初始化参数配置
sensors.setPara({
  server_url: '数据接收地址',
})

// 完成小程序 SDK 的初始化
sensors.init();

// A/B Testing 插件集成
sensors.usePlugin(abtest, {
  url: "分流试验请求地址"
});

App({
  onLaunch() {
   
  }
})
JS
  • 数据接收地址( server_url )与分流试验请求地址( url )域名均需配置到微信公众平台--开发管理--开发设置--服务器域名-- requrest 合法域名中

A/B Testing SDK API

获取试验变量 API

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

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

如何确定应该选择哪个API获取试验变量值?

1.一般情况下,我们推荐使用fastFetchABTest获取试验变量值。

2.如果您对性能有要求,可以使用fetchCacheABTest, 只从本地缓存中获取变量值,但可能导致用户无法及时命中最新的试验。

3.如果您进行时间片轮转试验,且对时效性有要求,可以使用asyncFetchABTest 获取试验变量值,但会存在一定的网络延迟。

1. asyncFetchABTest 和 fastFetchABTest 接口会在主线程回调试验变量值,fetchCacheABTest 接口会在当前线程返回试验变量值

2. 请确保默认值 default_value 和当前试验值类型相同。比如参数对应试验值为 Int 类型,则传入的 default_value 也必须是 Int 类型,同时返回的试验结果 result 也是 Int 类型

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

// abtest 为初始化 A/B Testing 插件时指定的全局变量
// Number 类型试验(第二个参数 0,表示未命中试验时,会返回此默认值,请根据业务需要更改此处的值)
abtest.fastFetchABTest({
    param_name:"具体的试验参数",
    default_value: 0,
    value_type: "Number",
	timeout_milliseconds: 3000, // 获取试验结果的超时时间,超时后返回 default_value,默认 3000ms
    callback: function(result){
     // TODO 请根据 result 进行自己的试验
    }
});
JS

携带自定义属性获取试验变量

v0.0.11 及以上版本 支持自定义属性扩充受众筛选能力,可以通过 API 添加自定义属性获取具体试验的变量值,根据获取试验变量值的方式,可分为下面 2 种策略:

  • asyncFetchABTest 忽略本地缓存,从服务端获取数据
  • fastFetchABTest 优先读取本地缓存,缓存不存在时从服务端获取数据

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

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

// abtest 为初始化 A/B Testing 插件时指定的全局变量
// Number 类型试验(第二个参数 0,表示未命中试验时,会返回此默认值,请根据业务需要更改此处的值)
abtest.fastFetchABTest({
    param_name:"具体的试验参数",
    default_value:0,
    value_type:"Number",
	timeout_milliseconds: 3000, // 获取试验结果的超时时间,超时后返回 default_value,默认 3000ms  
	custom_properties: { // 自定义属性 
      '自定义属性对应英文名': "自定义属性对应 value"
    },
    callback: function(result){
     // TODO 请根据 result 进行自己的试验
    }
});
JS

自定义属性值支持字符串、字符串数组、数值、布尔和日期时间格式,并且属性名支持英文、数字、下划线,且不能以数字开头

获取设备主体试验变量

SDK支持使用设备主体进行分流。需要您在初始化SDK时,将匿名ID设置为公共属性。初始化并设置公共属性的具体方式如下:

import sensors from './dist/wechat/sensorsdata.esm.js';
import abtest from './dist/wechat/plugin/abtesting-sdk-miniprogram/wechat/abtest.esm.min.js';

// 微信小程序 SDK 初始化参数配置
sensors.setPara({
  server_url: '数据接收地址',
})

//设备主体分流需要将匿名ID设置为公共属性
sensors.registerApp({
	anonymous_id: sensors.getAnonymousID()
});

// A/B Testing 插件集成
sensors.usePlugin(abtest, {
  url: "分流试验请求地址"
})

// 完成小程序 SDK 的初始化
sensors.init();

App({
  onLaunch() {
   
  }
})
JS

后续可以使用

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

三种方式同获取试验变量

使用示例

// 神策埋点 SDK 初始化
// import 从 GitHub 中下载的最新的 sensorsdata.es6.min.js,及 abtest.esm.min.js 文件
import sensors from './utils/sensorsdata.min.js';
import abtest from './utils/abtest.min.js';

sensors.setPara({
  server_url: '数据接收地址',
})

// A/B Testing 插件集成
sensors.usePlugin(abtest, {
  url: "请求分流试验的地址"
})

// 完成小程序 SDK 的初始化
sensors.init();

App({
	onLaunch(){
		
	},
	onShow(){
		// 获取试验结果,abtest 对象在页面中使用时需要像 app.js 页面中一样先引入此对象
		abtest.fastFetchABTest({
  			param_name: "具体的试验参数",
  			default_value: 0,
  			value_type: "Number",
  			callback: function(result){
    			// 获取用户命中的试验结果,针对用户可能命中的试验进行处理
    			switch(result){
      			case 0:
        			break;
      			case 1:
        			// 试验组 1 的处理逻辑
        			break;
      			case 2:
        			// 试验组 2 的处理逻辑
        			break;
      			// ……
      			// ……
     			 default:
      				// 其他情况的处理逻辑
        			break;
    			}
  			}
		});
	}
});
JS

调试试验

可以通过录入调试设备的方式,把小程序用户加入调试设备;在试验调试状态下,会强制命中当前试验指定的分组调试设备在调试状态和正式上线阶段都会生效

集成神策分析微信小程序 SDK 后,在开发者工具控制台中查看任意一条数据,可以获取当前用户的 distinct_id(设备ID)。在开发版及体验版中,通过手机打开控制台也可以通过类似方式获取到 distinct_id。

将此 distinct_id (设备ID)添加到调试设备中。