1.依赖
在当前工程的 build.gradle 文件中添加依赖
compile('com.taobao.android:orange:2.0.1-emas')
2.Service声明
AndroidManifest.xml中加入下面代码
android:name="com.taobao.orange.service.OrangeApiService"
android:exported="false">
3.初始化
该方法需要尽可能早的调用, 以便尽可能早从本地缓存或者服务端拿到最新配置
OConfigconfig=newOConfig.Builder()
.setAppKey(StringappKey)//必选
.setAppSecret(StringappSecret)//必选
.setAppVersion(StringappVersion)//必选, 当前应用版本号
.build();
OrangeConfig.getInstance().init(Contextcontext,OConfigconfig);
4.检查更新
检查服务端是否有更新, 建议前台后切换进行检查, 防止过度轮询导致不必要的资源浪费, SDK内部强制限制20s之内不能连续检查更新
OrangeConfig.getInstance().forceCheckUpdate();
5.添加自定义条件
第一次添加自定义条件必须确保在init()接口调用之前, 后续更新自定义条件则不限制调用时机, 以达到动态匹配条件的目的
Stringkey="${customer_key}";//自定义key
Stringvalue="${customer_value}";//自定义value
OrangeConfig.getInstance().addCandidate(newOCandidate(key,value));
6.获取配置配置类型, 根据值类型不同, 分为STANDARD和CUSTOM两种类型
STANDARD类型: key-value形式
CUSTOM类型: string形式
配置级别, 为了减轻服务端压力, 分为DEFAULT和HIGH两种级别
HIGH级别: 首次启动应用时SDK默认只会拉取HIGH级别的配置
DEFAULT级别: 首次启动应用时不会主动拉取DEFAULT级别的配置,只有业务方手动调用以下getConfig/getConfigs/getCustomConfig接口才会触发SDK拉取
获取配置, 通过以下异步接口获取
//OrangeConfig.getInstance()获取单例对象
//STANDARD类型namespace配置key对应value, 如果不存在或者还未从文件中反序列化完成返回defaultVal
StringgetConfig(Stringnamespace,Stringkey,StringdefaultVal);
//STANDARD类型namespace配置所有key的键值对
MapgetConfigs(Stringnamespace);
//CUSTOM类型namespace配置的值, 如果不存在或者还未从文件中反序列化完成返回defaultVal
StringgetCustomConfig(Stringnamespace,StringdefaultVal)
监听配置更新, 由上可知获取配置接口都是异步的, 并不能保证获取的就是文件中序列化的值或者是服务端最新下发的值, 所以为了及时感知配置变更, 需要注册配置监听接口
//OrangeConfig.getInstance()获取单例对象
//注册namespace配置的listener监听器
voidregisterListener(String[]namespaces,OConfigListenerlistener);
//去注册namespace配置的listener监听器
voidunregisterListener(String[]namespaces,OConfigListenerlistener);
//注销namespaces配置组的所有监听器
voidunregisterListener(String[]namespaces);
同一个namespace最多支持只10个监听器对象, 后续如果又添加一个监听器对象会覆盖最旧的监听器对象, 以此类推, 不需要监听配置更新之后, 最好务必去注册该监听器, 防止潜在的OOM
publicinterfaceOConfigListener{
//namespace:配置组名称 args:可变参数(可拓展), 当前存在两个key,
//1. fromCache->配置缓存读取(true)or服务端下发最新(false)
//2. configVersion->当前配置版本号
voidonConfigUpdate(Stringnamespace,Mapargs);
}
7、接入主动推送配置能力(如有)
(1)在AndroidMenfest.xml文件中声明OrangeAccsService
android:name="com.taobao.orange.accssupport.OrangeAccsService"
android:exported="false">
(2)通道服务初始化代码中绑定OrangeAccsService, 即在IAppReceiver的getService接口实现中加入远程配置的Service
put("orange","com.taobao.orange.accssupport.OrangeAccsService");
IAppReceiver实现示例
privateIAppReceivermAppReceiver=newIAppReceiver(){
privateStringTAG="mAppReceiver";
...
...
@Override
publicStringgetService(StringserviceId){
Stringservice=SERVICES.get(serviceId);
returnservice;
}
@Override
publicMapgetAllServices(){
returnSERVICES;
}
};
最佳实践classA{
privateOConfigListenerlistener=newOConfigListener(){
@Override
publicvoidonConfigUpdate(Stringnamespace,Mapargs){
if("test_namespace".equals(namespace)){
value=OrangeConfig.getInstance().getConfig("test_namespace","test_key","default");
}
}
};
privateStringvalue=initValue();
privateStringinitValue(){
OrangeConfig.getInstance().registerListener(newString[]{"test_namespace"},listener);
returnOrangeConfig.getInstance().getConfig("test_namespace","test_key","default");
}
publicStringgetValue(){
returnvalue;
}
}