Android Kotlin语言全栈API开发指南

1. sdk安装

打开云眼控制台(app.eyeofcloud.com),登录后点击“业务优化”,业务优化界面打开后再点击“SDK下载与安装”。

AB测试使用手册-APP-安装sdk
AB测试使用手册-APP-安装sdk

在新打开的页面中,选择“Android SDK安装”标签,再从下方的标签栏中选择“全栈API SDK安装”。根据下方提示完成SDK的安装。

安装SDK
安装SDK

2. SDK初始化

所有和AB测试相关的接口都是定义在EyeofcloudClient这个类上的,通过这个类才能够版本抽签、触发目标、获取参数从而进行AB测试。同时,SDK还提供了一个EyeofcloudManager类来负责EyeofcloudClient的构造和获取、配置文件(包含AB测试信息)的下载和更新、配置文件的缓存管理等等。 所以,初始化SDK的第一步就是构造一个EyeofcloudManager。建议在Application上设置一个变量保存全局唯一的一个EyeofcloudManager,再将其属性设置private set。

class MyApplication : Application() {

    var eyeofcloudManager: EyeofcloudManager? = null
        private set
}

在Application的onCreate方法中,构造EyeofcloudManager并赋值给eyeofcloudManager。Kotlin语言的代码如下所示:

override fun onCreate() {
    super.onCreate()
    eyeofcloudManager = EyeofcloudManager.builder(PROJECT_ID).build()
}

参数PROJECT_ID可以从“SDK下载与安装”界面中查到。

PROJECT_ID

如果您在使用私有部署的云眼系统,在创建完EyeofcloudManager对象后,还需要用Kotlin语言调用相关接口设置几个URL。云平台用户则不需要设置。

override fun onCreate() {
    super.onCreate()
    eyeofcloudManager = EyeofcloudManager.builder(PROJECT_ID).build()
    eyeofcloudManager!!.setConfigUrlFormat(CONFIG_URL_FORMAT)
    eyeofcloudManager!!.setServerHost(SERVER_HOST)
}

CONFIG_URL_FORMAT和SERVER_HOST可以在“SDK下载与安装”界面的Android全栈API使用说明中查看。

set-url
set-url

在构造完EyeofcloudManager对象后,我们需要在整个应用的第一个Activity的onStart方法中用Kotlin语言调用eyeofcloudManager!!.initialize方法完成初始化(在之后的Activity中调用会出错)。该initialize方法是一个异步的接口,优先使用本地缓存的配置文件(没有就通过网络获取)构造一个EyeofcloudClient对象并将其保存在eyeofcloudManager中。在之后需要使用SDK的地方,通过eyeofcloudManager!!.eyeofcloud方法获取缓存的EyeofcloudClient对象再来调用相关接口。在异步接口的Listener中打开HomeActivity,从而保证初始化过程已经完成。

override fun onStart() {
    super.onStart()

    application!!.eyeofcloudManager!!.initialize(this) {
        try {
            Thread.sleep(1000)
        } catch (e: InterruptedException) {
            e.printStackTrace()
        }

        val intent = Intent(application!!.baseContext, HomeActivity::class.java)
        startActivity(intent)
    }
}

在调用SDK的接口时,会需要一个唯一的userId来标识用户。另外,如果要使用受众功能,还会需要用户的属性值。为了方便,可以在Application中定义两个属性userName 和attributes 。之后在合适的地方调用这两个属性。

val attributes: Map<String, String>
    get() {
        val attributes = HashMap<String, String>()
        attributes["gender"] = "female"
        return attributes
    }

val userName: String
    get() {
        val sharedPreferences :SharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE)
        var name = sharedPreferences.getString("userName", null)
        if (name == null) {
            name = UUID.randomUUID().toString()
            sharedPreferences.edit().putString("userName", name).apply()
        }
        return name
    }

3. 设计优化方案

根据想到的假设,设计出AB测试的方案。我们需要考虑好有哪些版本,衡量结果的唯一主目标是什么。设计优化方案时最好提出一种明确的假设,比如“橙色按钮比起黑色按钮更能引起注意从而带来更多注册”,而不是“按钮的颜色可能会影响注册”这种模糊的假设。明确的假设能让测试的成功率更高。

4. 配置优化方案

在云眼控制台中点击“业务优化”,等到页面加载完成后点击“创建优化方案”按钮。平台选择“全栈API”,填写优化方案名称,点击“确认”创建优化方案。创建完成后,点击对应优化方案的“编辑”按钮来打开编辑器。

AB测试使用手册-全栈API-创建优化方案
AB测试使用手册-全栈API-创建优化方案

在“版本设置”中根据优化方案设计的情况来添加版本并分配流量,通常情况下均分流量即可。总流量根据实际流量调整,业务流量较大的应用选择部分流量参与测试就足够了。

AB测试使用手册-全栈API-流量分配
AB测试使用手册-全栈API-流量分配

根据优化方案设计的情况,将需要用到的衡量指标创建为一个目标。点击“+”号将其添加到优化方案中。

AB测试使用手册-全栈API-设置目标
AB测试使用手册-全栈API-设置目标

启动优化方案,完成配置工作。

AB测试使用手册-全栈API-启动试验
AB测试使用手册-全栈API-启动试验

5. 设置受众

设置受众可以将优化方案定位到在云眼控制台预先定义的特定受众群体中,云眼将会在激活优化方案时通过属性值评估用户是否满足受众条件,从而决定是否激活优化方案。在云眼控制台中点击“业务优化”,业务优化界面打开后再点击“自定义属性(全栈)”。点击创建自定义属性,输入自定义属性的名称和描述,点击确定按钮。

设置属性
设置属性

编辑刚才创建好的优化方案,点击创建受众,输入受众的名称和描述,将右侧已创建好的自定义属性拖拽至受众条件下,点击“保存受众”按钮。

创建受众
创建受众
添加受众属性
添加受众属性

6. 非参数化AB测试方案

非参数化方法使用SDK的版本抽签接口得到一个版本名称,依据版本名称编写if-else的分支代码,不同版本执行不同的代码从而产生版本差异。该方案灵活性较差,每次进行新的测试都需要更新应用程序,只有在参数化方案无法满足需求时才推荐使用。

修改应用程序

对于非参数化方案,给出两种常见的使用方式来产生多个版本。

第一种方式是在打开新的Activity前,进行版本抽签,依据抽签结果创建不同的Intent从而打开不同的Activity形成不同的版本。这种方式比较适合版本差异较大的情况,直接制作多个Activity作为不同的版本。

var application = getApplication() as MyApplication
var userName = application!!.userName
var attributes = application!!.attributes
var eyeofcloud = application!!.eyeofcloudManager!!.eyeofcloud

val openButton = findViewById<View>(R.id.button) as Button
openButton.setOnClickListener {
    var intent = Intent(application!!.baseContext, DefaultActivity::class.java)
    val variation: Variation? = eyeofcloud!!.activate("android-fullstack-activate-intent", userName!!, attributes!!)
    if (variation != null) {
        if (variation.key == "优化版本A") {
            intent = Intent(application!!.baseContext, VariationAActivity::class.java)
        } else if (variation.key == "优化版本B") {
            intent = Intent(application!!.baseContext, VariationBActivity::class.java)
        }
    }
    startActivity(intent)
}

第二种方式是在需要体现版本差异的地方进行版本抽签,依据抽签结果进入不同的代码逻辑,从而使得应用的界面或者行为变得不同。例如,通过代码修改界面的样式。

var application = getApplication() as MyApplication
var userName = application!!.userName
var attributes = application!!.attributes
var eyeofcloud = application!!.eyeofcloudManager!!.eyeofcloud

val variation :Variation? = eyeofcloud!!.activate("android-fullstack-activate-normal", userName!!, attributes!!)
if (variation != null) {
    if (variation.key == "优化版本A") {
       //code for variation a
    } else if (variation.key == "优化版本B") {
       //code for variation b
    }
}

完成版本差异化的代码之后,添加触发目标的代码。

conversionButton.setOnClickListener {
    eyeofcloud!!.track("click", userName!!, attributes!!)
    val intent = Intent(application!!.baseContext, EventConfirmActivity::class.java)
    startActivity(intent)
}

通过eyeofcloudManager!!.eyeofcloud方法得到的EyeofcloudClient对象是在应用启动时创建的。在这之后,本地缓存的配置文件是会自动定时更新的,如果想要从最新的缓存配置文件重新构造EyeofcloudClient对象,可以调用同步的initialize方法。该方法使用本地缓存生成新的EyeofcloudClient对象并将其更新到eyeofcloudManager中。之后就和正常情况下一样通过eyeofcloudManager!!.eyeofcloud方法获取EyeofcloudClient对象就可以了。参数context可以是任意context。

var eyeofcloud: EyeofcloudClient? = eyeofcloudManager.initialize(context);

7. 参数化AB测试方案

参数化方案希望的是将应用程序中的一些关键变量动态化,使其不再写死在程序中,而是从一个可变的配置文件中读取对应的值。例如,可以参数化一个广告轮播图的播放速度,通过修改配置文件的内容达到修改应用程序行为的目的。

7.1. 选择参数和目标

在将应用程序参数化前,需要考虑哪些变量是需要参数化的以及哪些目标是有可能使用到的。所有将来可能进行AB测试的关键地方,都建议将其参数化,比如关键按钮(注册、购买等)的一些属性、控制应用行为的一些关键参数、甚至是推荐算法的一些参数等。这样,当将来要进行AB测试的时候就不再需要发布新本应用了。目标的选择往往是和业务指标相关的一些行为,比如一些按钮的点击,把可能用来衡量结果的目标都考虑进去。

7.2. 配置优化方案

在选择完参数和目标后,要在编辑器中创建这些选出的参数和目标。目标的创建和上面介绍的一样。下面介绍参数的创建,在设置变量处,点击“创建变量”。

AB测试使用手册-全栈API-设置变量

在弹出的界面中填写变量名称,选择变量类型和默认值,点击“保存”完成创建。

AB测试使用手册-全栈API-设置变量2

7.3. 修改应用程序

在创建完变量和目标之后,就要修改我们的应用程序了。首先是变量的改动,可以通过调用eyeofcloudClient.getVariableString、getVariableFloat、getVariableBoolean、getVariableInteger这四个方法去获取变量,然后在程序中使用这些得到的变量。通常情况下,getVariableString这类方法的最后一个参数都设置成true即可。

var title = eyeofcloud!!.getVariableString("home-title", userName!!, attributes!!, true)
if (title == null) {
    title = "原始版本界面"
}
//do something with title

目标的设置方法和非参数化方案相同。

7.4. 设计试验并配置

完成应用程序的参数化并添加触发目标的代码之后,随时都可以在云眼控制台创建优化方案进行AB测试,而这个过程是不需要更新应用程序的。在假设的基础上设计试验后,可以在编辑器的“设置变量”中添加需要使用的变量,并为各个版本填写相应的值,从而产生不同的版本。之后再添加需要的目标并保存就可以完成试验的配置,最后启动试验。

AB测试使用手册-全栈API-设置变量3
AB测试使用手册-全栈API-设置变量3

8. DEMO代码

下载demo代码(包含三个demo对应文中的三种方式)
AndroidFullStackActivateIntent:非参数化第一种方案
AndroidFullStackActivateNormal:非参数化第二种方案
AndroidFullStackParameter:参数化方案

 

免费试用,转化率提升就是这样简单快速 立即试用