公司项目选择了umeng的更新功能和,统计插件,而由于版本的管理,使得需要针对某些版本进行强制更新。比如上个版本出现了重大问题,必须进行版本升级才能修复,产品架构有了重大调整,数据结构发生了变化导致原先的app无法解析等等情况。但是查过umeng的产品文档,点击跳转地址为:
坑爹的umeng竟然没有强制更新功能,在目前的方法中无法实现强制更新。想想都开始打算做一个下载接口了,自己实现强制更新了。。。
再查了次umeng的替代方案,发现有一个这样方式,通过在后台设置在线参数,然后在app中对在线参数进行处理,将升级对话框中响应事件设置监听器,完成强制更新的功能。
首先看下后台设置在线参数地址:点击跳转
然后在app中嵌入一下代码,参考
1 UmengUpdateAgent.setUpdateOnlyWifi(false); 2 String upgrade_mode = MobclickAgent.getConfigParams(this, "upgrade_mode"); 3 4 if(TextUtils.isEmpty(upgrade_mode)){ 5 return; 6 } 7 String[] upgrade_mode_array = upgrade_mode.split(";"); 8 UmengUpdateAgent.setUpdateOnlyWifi(false); 9 UmengUpdateAgent.update(MainActivity.this); 10 UmengUpdateAgent.forceUpdate(MainActivity.this);//这行如果是强制更新就一定加上 11 for(String mode:upgrade_mode_array){ 12 String versionName = ((MyApplication)getApplication()).getVersionName(); 13 versionName = versionName + "f"; 14 if(mode.equals(versionName)){ 15 //进入强制更新 16 UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() { 17 18 @Override 19 public void onUpdateReturned(int updateStatus, UpdateResponse updateResponse) { 20 21 } 22 }); 23 UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() { 24 @Override 25 public void onClick(int status) { 26 27 switch (status) { 28 case UpdateStatus.Update: 29 30 break; 31 default: 32 //退出应用 33 MyApplication.base_logs.shortToast(getString(R.string.force_update_toast_string)); 34 ((MyApplication) getApplication()).AppExit(MainActivity.this); 35 } 36 } 37 }); 38 break; 39 } 40 }
这里
UmengUpdateAgent.forceUpdate(MainActivity.this); 这行很重要,不加上这条,看看界面如何:
这里可以选择忽略改版,然后即使代码规定点击以后再说,也不会退出应用程序。
反过来加上这句代码看看界面如何:
这里没有忽略改版,然后点击以后再说,就会退出应用程序。
再次吐槽umeng的东西现在体验性不友好啊。