项目上有这样的需求:对指定的版本要求强制升级,同时其它的版本可以选择性升级。
友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位。
不过友盟的开发人员也给出了勉强可行的方案:
使用友盟在线参数来控制哪些版本需要强制更新,哪些版本不需要
相关的内容如下:
1.在线参数配置:
http://dev.umeng.com/analytics/android/advanced-integration-guide#3
2.强制更新官方代码:
https://github.com/nxzhou91/umeng-android-sdk-theme/blob/master/blogs/articles/force_update.md
3.我的做法:
配置在线参数,参数值配置规则:版本号,强制更新标志,版本号,强制更新标志,版本号,强制更新标志...
关键代码:
private void prepare4UmengUpdate() {
MobclickAgent.updateOnlineConfig( MyApplication.getContext() );
//获取友盟在线参数
String update_mode = MobclickAgent.getConfigParams( MyApplication.getContext(), "upgrade_mode" );
Log.d(TAG, "MainActivity.prepare4UmengUpdate, update_mode = " + update_mode);
if(StringUtils.isEmpty(update_mode)) {
return;
}
//转换为数组
mUpdateModeArray = StringUtils.convertStrToArray(update_mode);
UmengUpdateAgent.setUpdateOnlyWifi(false); //在任意网络环境下都进行更新自动提醒
UmengUpdateAgent.update(this); //调用umeng更新接口
String curr_version_name = null;
try {
curr_version_name = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
}
catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0; i<mUpdateModeArray.length; i+=2 ) {
if(StringUtils.isEquals(mUpdateModeArray[i], curr_version_name)) {
if(StringUtils.isEquals(mUpdateModeArray[i + 1], "F")) {
//对话框按键的监听,对于强制更新的版本,如果用户未选择更新的行为,关闭app
UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {
@Override
public void onClick(int status) {
switch (status) {
case UpdateStatus.Update:
break;
default:
//友盟自动更新目前还没有提供在代码里面隐藏/显示更新对话框的
//"以后再说"按钮的方式,所以在这里弹个Toast比较合适
Toast.makeText(MyApplication.getContext(),
"非常抱歉,您需要更新应用才能继续使用", Toast.LENGTH_LONG).show();
}
}
});
}
break; //只要找到对应的版本号,即结束循环
}
}
}