推送实验包含如下图所示的三个步骤。具体实施可以分为两个部分:AB实验配置和编程实现。
一、实验配置
实验配置需要先完成创建编程实验项目,创建事件,创建指标,创建受众等准备工作,具体操作步骤参见AB实验用户手册。
然后创建一个编程实验。通过菜单:实验管理->实验列表,点击“创建实验”,选择创建编程实验。
在实验编辑页面通过点击“变量”,设置推送模板及推送消息内容,例如:template作为推送模板,message作为消息内容,并给变量设置缺省值。
点击左侧菜单的“实验版本”,点击添加按钮,设置实验版本。
在实验编辑页面通过点击“添加规则”,选择A/B测试,创建实验规则。
编辑规则页面,指标中添加之前设置的指标,版本选择中设置待推送的版本,设置流量分配策略,并保存。
二、编程实现
编程过程中,需要用到SDKKey,flagKey,eventKey,这些参数在前面实验配置中可以找到。
SDKKey的获取通过菜单点击项目设置获取,如下图所示。
flagKey为创建实验时设置的key。
eventKey为创建事件时设置的事件key。可以触发多个事件。
2.1 调用decide获取变量值
根据已知策略获取到需要接收推送的用户列表,调用AB系统的分桶服务,并将分桶结果写入指定格式的文件中,将文件发送给推送实施方,由实施方完成推送,以下所有的代码介绍的时如何实现分桶,在对应的服务中完成该实现。
AB系统提供两种方式实现分桶:
方式1:SDK API
以下代码实现为Java中SDK的使用示例,其他语言请参考SDK API手册。
//参数设置
String sdkKey = "2_06aacd900bbd5a74";
String userId = "user123";
String flagKey = "tuisongshiyanceshi";
String eventKey = "tuisongshijian";
String eventEndpoint = "http://serverIP:serverPort/v1/eventss";
String configUrl = "https://serverIP:serverPort/datafiles/%s.json";
//SDK初始化
NotificationCenter notificationCenter = new NotificationCenter();
HttpProjectConfigManager.Builder builder;
builder = HttpProjectConfigManager.builder()
.withFormat(configUrl)
.withNotificationCenter(notificationCenter)
.withEyeofcloudHttpClient(null)
.withSdkKey(sdkKey);
Eyeofcloud eyeofcloud = EyeofcloudFactory.newDefaultInstance(builder.build(), notificationCenter);
//分桶
EyeofcloudUserContext user = eyeofcloud.createUserContext(userId);
EyeofcloudDecision decision = user.decide(flagKey);
//获取推送版本
String variationKey = decision.getVariationKey();
//获取设置的变量
EyeofcloudJSON variables = decision.getVariables();
//获取在AB系统中设置的推送模板
JSONObject template = variables.getValue("template", JSONObject.class);
//获取在AB系统中设置的推送参数
String paramter = variables.getValue("paramater", String.class);
//根据推送参数生成单个用户的推送设置
...
//循环调用以上代码,生成所有用户的推送信息并保存到指定文件中
参数中除在AB系统中设置的的参数外,包括已部署服务的访问接口,eventEndpoint 为事件接收器服务的访问地址,configUrl 为实验配置文件的获取地址,如果已将文件同步至CDN可以使用CDN地址,否则使用属性服务的地址,格式为:”https://属性服务IP:属性服务端口/文根/datafiles/%s.json”;
方式2:分桶服务接口
接口调用地址:http://分桶服务域名/文根/decide
请求类型: 如果不需传用户属性等参数,发送GET请求,如果需要设置用户属性如客群等需要使用POST方式
接口参数:GET请求不需传参,POST请求参数如下:
{
"sdkKey":"2_06aacd900bbd5a74",
"userId":"user5",
"flag":"tuisongshiyanceshi",
"fetchAttribute":true,
"attribute":{
"hoby":"read"
}
}
参数说明:
sdkkey为AB系统生成的项目配置Key
userId为用户的标识
flag为实验的Key
fetchAttribute为是否获取API或数据库中属性并合并,默认仅使用参数中attribute
attribute为用户的属性
接口返回值:
返回参数说明:
varitionKey当前版本
variables中payload为AB系统中的变量设置,template和paramater为在已设置的模板和参数
2.2推送
更加分桶获得的变量值,组装消息并发送。组装和发送可能有多种实现方案,比如获取分桶结果后立即组装发送,也可能将组装好的信息分发给消息队列或暂存为文件,由另外的发送系统再负责发送等等。
2.3触发转化事件
分桶事件在2.1分桶时已自动触发,其他转化事件可以在特定位置触发,触发方式包括通过SDK API和服务接口调用两种方式。
方式1:SDK API
//初始化参照分桶代码,触发推送事件
eventKey = “event_key”
Map<String, Object> tags = new HashMap<>();
tags.add(“count”, 1);
user.trackEvent(eventKey, tags);
方式2:服务接口
调用地址:http://分桶服务域名/文根/trackEvent
参数说明:url添加参数sdkKey,userId,eventKey body中添加需要保存的事件属性,例如:
{
“count”: 1
}