简介
云眼,是国内领先的用户体验优化系统,能够以低成本、高效率的方式实施AB测试,建立闭环改进机制,数据驱动、持续不断的优化用户体验,提高App和Web应用的转化率和留存率,降低迭代风险。
本文介绍Android Java语言在云眼平台进行A/B测试的步骤和具体操作
1. 安装SDK
登录云眼控制台(app.eyeofcloud.com),点击“业务优化”,然后点击“SDK下载与安装”。
从打开的新页面中选择“Android SDK安装”标签,根据提示,下载云眼Android SDK
2. SDK初始化
所有和AB测试相关的接口都是定义在EyeofcloudClient这个类上的,通过这个类才能够版本抽签、触发目标、获取参数从而进行AB测试。同时,SDK还提供了一个EyeofcloudManager类来负责EyeofcloudClient的构造和获取、配置文件(包含AB测试信息)的下载和更新、配置文件的缓存管理等等。 所以,初始化SDK的第一步就是构造一个EyeofcloudManager。建议在Application上设置一个变量保存全局唯一的一个EyeofcloudManager,再设计一个getEyeofcloudManager的接口将其暴露出来。
public class MyApplication extends Application { private EyeofcloudManager eyeofcloudManager; public EyeofcloudManager getEyeofcloudManager() { return eyeofcloudManager; } }
在Application的onCreate方法中,构造EyeofcloudManager并赋值给eyeofcloudManager。
public void onCreate() { eyeofcloudManager = EyeofcloudManager.builder(PROJECT_ID).build(); }
参数PROJECT_ID可以从“SDK下载与安装”界面中查到。
如果您在使用私有部署的云眼系统,在创建完EyeofcloudManager对象后,还需要调用相关接口设置几个URL。云平台用户则不需要设置。
public void onCreate() { eyeofcloudManager = EyeofcloudManager.builder(PROJECT_ID).build(); eyeofcloudManager.setConfigUrlFormat(CONFIG_URL_FORMAT); eyeofcloudManager.setServerHost(SERVER_HOST); }
CONFIG_URL_FORMAT和SERVER_HOST可以在“SDK下载与安装”界面的Android全栈API使用说明中查看。
在构造完EyeofcloudManager对象后,我们需要在整个应用的第一个Activity的onStart方法中调用eyeofcloudManager.initialize方法完成初始化(在之后的Activity中调用会出错)。该initialize方法是一个异步的接口,优先使用本地缓存的配置文件(没有就通过网络获取)构造一个EyeofcloudClient对象并将其保存在eyeofcloudManager中。在之后需要使用SDK的地方,通过eyeofcloudManager.getEyeofcloud方法获取缓存的EyeofcloudClient对象再来调用相关接口。在异步接口的Listener中打开HomeActivity,从而保证初始化过程已经完成。
protected void onStart() { eyeofcloudManager.initialize(this, new EyeofcloudStartListener() { @Override public void onStart(EyeofcloudClient eyeofcloud) { Intent intent = new Intent(myApplication.getBaseContext(), HomeActivity.class); startActivity(intent); } }); }
在调用SDK的接口时,会需要一个唯一的userId来标识用户。另外,如果要使用受众功能,还会需要用户的属性值。为了方便,可以在Application中定义两个属性userName 和attributes 。之后在合适的地方调用这两个属性。
public class MyApplication extends Application { private Map<String,String> attributes; public getAttributes() { return attributes; } public setAttributes(String key, String value) { Attributes.put(key, value); } } public class MyApplication extends Application { private String userName; public getUserName () { return userName; } public setUserName (String userName) { this.userName = userName; } }
3. 创建优化方案
在云眼控制台中点击“业务优化”,等到页面加载完成后点击“创建优化方案”按钮。
平台选择“全栈API”,填写优化方案名称,点击“确认”创建优化方案。创建完成后,点击对应优化方案的“编辑”按钮来打开编辑器。
4.设置流量
在云眼控制台在“版本设置”中根据优化方案设计的情况来添加版本并分配流量,通常情况下均分流量即可。总流量根据实际流量调整,业务流量较大的应用选择部分流量参与测试就足够了。
5.设置目标
根据优化方案设计的情况,将需要用到的衡量指标创建为一个目标。点击“+”号将其添加到优化方案中。
6.设置受众
设置受众可以将优化方案定位到在云眼控制台预先定义的特定受众群体中,云眼将会在激活优化方案时通过属性值评估用户是否满足受众条件,从而决定是否激活优化方案。在云眼控制台中点击“业务优化”,业务优化界面打开后再点击“自定义属性(全栈)”。点击创建自定义属性,输入自定义属性的名称和描述,点击确定按钮。
编辑刚才创建好的优化方案,点击创建受众,输入受众的名称和描述,将右侧已创建好的自定义属性拖拽至受众条件下,点击“保存受众”按钮。
7.参数化AB测试
参数化方案希望的是将应用程序中的一些关键变量动态化,使其不再写死在程序中,而是从一个可变的配置文件中读取对应的值。例如,可以参数化示例中的文本内容,通过修改配置文件的内容达到修改应用程序行为的目的。
7.1选择参数和目标
在将应用程序参数化前,需要考虑哪些变量是需要参数化的以及哪些目标是有可能使用到的。所有将来可能进行AB测试的关键地方,都建议将其参数化,比如关键按钮(注册、购买等)的一些属性、控制应用行为的一些关键参数、甚至是推荐算法的一些参数等。这样,当将来要进行AB测试的时候就不再需要发布新本应用了。目标的选择往往是和业务指标相关的一些行为,比如一些按钮的点击,把可能用来衡量结果的目标都考虑进去。
7.2配置参数化优化方案
参数化优化方案配置和简单API的配置方式基本相同,其中流量分配、设置目标和设置受众的步骤都完全相同,只需要再添加设置变量的步骤。下面介绍变量的创建,在设置变量处,点击“创建变量”。
在创建完变量和目标之后,就要修改我们的应用程序了。首先是变量的改动,可以通过调用eyeofcloudClient.getVariableString、getVariableFloat、getVariableBoolean、getVariableInteger这四个方法去获取变量,然后在程序中使用这些得到的变量。通常情况下,getVariableString这类方法的最后一个参数都设置成true即可。目标的设置方法和非参数化方案相同。
EyeofcloudClient eyeofcloud = myApplication.getEyeofcloudManager().getEyeofcloud(); String userName = myApplication.getUserName(); Map<String,String> attributes = myApplication.getAttributes(); String buttonText = eyeofcloud.getVariableString("buttonText", userName, attributes, true); if (buttonText == null) { buttonText = “defaultText”; } //do something with buttonText
完成应用程序的参数化设置之后,随时都可以在云眼控制台创建优化方案进行AB测试,而这个过程是不需要更新应用程序的。可以在编辑器的“设置变量”中修改变量,并为各个版本填写相应的值,从而产生不同的版本。最后启动实验。
8.简单API中使用参数化API
使用简单API方式可以和参数化API进行配合使用,先调用简单API的activate方法激活一个试验得到版本名称,然后调用参数化API getVariableString/getVariableBoolean/getVariableDouble/getVariableFloat来获取在云眼控制台定义的变量值,需要提供3个参数,分别是变量名称、用户ID、布尔值true/false,其中最后一个参数的布尔值代表是否激活试验,我们只需要获取变量的值进行后续的使用而并不需要激活试验,所以我们最后一个参数传递false。在这种情况下,我们使用activate API激活试验得到的是哪个版本,那么使用参数化API获取到的变量就是我们在云眼控制台设置变量中定义的该版本的值。例如:我们用activate激活试验返回的是优化版本,则我们使用参数化API获取到的变量值也是优化版本中的变量值。
EyeofcloudClient eyeofcloud = eyeofcloudManager.getEyeofcloud(); String userName = myApplication.getUserName(); Map<String,String> attributes = myApplication.getAttributes(); Variation variation = eyeofcloud.activate("experimentName", userName, attributes); Var value = eyeofcloud!!.getVariableString(variableName,username!!,attributes,false) //在对应版本中使用获取到的变量值 if (variation != null) { if (variation.getKey().equals("原始版本")) { //code for variation a } else if (variation.getKey().equals("优化版本#1")) { //code for variation b } } else { //code for default }
9.查看实验结果
当实验运行一段时间后,就可以到云眼控制台查看实验的运行结果。
9、示例程序
付费客户需要Demo,请与客户经理联系…