友盟在线参数+自动更新升级SDK实现指定版本强制更新升级-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

友盟在线参数+自动更新升级SDK实现指定版本强制更新升级

简介:
+关注继续查看

项目上有这样的需求:对指定的版本要求强制升级,同时其它的版本可以选择性升级。

友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位。

不过友盟的开发人员也给出了勉强可行的方案:

使用友盟在线参数来控制哪些版本需要强制更新,哪些版本不需要

相关的内容如下:

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;  //只要找到对应的版本号,即结束循环  
            }  
        }  
  
    }  


另一种实现方式:


UmengUpdateAgent.setUpdateOnlyWifi(false);
        String upgrade_mode = MobclickAgent.getConfigParams(this, "upgrade_mode");
 
        if(TextUtils.isEmpty(upgrade_mode)){
            return;
        }
        String[] upgrade_mode_array = upgrade_mode.split(";");
        UmengUpdateAgent.setUpdateOnlyWifi(false);
        UmengUpdateAgent.update(MainActivity.this);
        UmengUpdateAgent.forceUpdate(MainActivity.this);//这行如果是强制更新就一定加上
        for(String mode:upgrade_mode_array){
            String versionName = ((MyApplication)getApplication()).getVersionName();
            versionName = versionName + "f";
            if(mode.equals(versionName)){
                //进入强制更新
                UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() {

                    @Override
                    public void onUpdateReturned(int updateStatus, UpdateResponse updateResponse) {
                        
                    }
                });
                UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {
                    @Override
                    public void onClick(int status) {

                        switch (status) {
                            case UpdateStatus.Update:

                                break;
                            default:
                                //退出应用
                                MyApplication.base_logs.shortToast(getString(R.string.force_update_toast_string));
                                ((MyApplication) getApplication()).AppExit(MainActivity.this);
                        }
                    }
                });
                break;
            }
        }

这里

UmengUpdateAgent.forceUpdate(MainActivity.this); 这行很重要,不加上这条,看看界面如何:

这里可以选择忽略改版,然后即使代码规定点击以后再说,也不会退出应用程序。
反过来加上这句代码看看界面如何:
这里没有忽略改版,然后点击以后再说,就会退出应用程序。

有网友反应说点击返回按钮后就不起效果,这里稍微做下修改,如下代码:

if(mode.equals(versionName)){
                UmengUpdateAgent.forceUpdate(this);//这行如果是强制更新就一定加上
                // 强制更新
                UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {

                    @Override
                    public void onClick(int status) {
                        switch (status) {
                            case UpdateStatus.Update:
                                break;
                            default:
                                // close the app
                                AppToast.showShortText(MainUIActivity.this, "非常抱歉,您需要更新应用才能继续使用");
                                MainUIActivity.this.finish();
                        }
                    }
                });
                break;
            }else {
                UmengUpdateAgent.update(this);
            }


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
客户端自动升级的一个代码例子【C/S】
经常看到有问客户端自动更新问题,把一个以前看到的常用的方法整理了一下,放在网上供大家使用。 详细代码下载地址 http://cid-56b433ad3d1871e3.office.live.com/self.
552 0
AIX 5.3下 升级补丁到10.2.0.5步骤
转自同事ROBIN的博客       环境AIX5.3, 原oracle版本 10.2.0.1 1 停止OEM/isqlplus/监听/DB实例$ emctl stop dbconsole$ isqlplusctl stop$ lsnrctl sto...
585 0
实现滑动菜单(富文本版本)
所谓的滑动菜单就是将一些菜单选项隐藏起来,而不是放置在主屏幕上,然后可以通过滑动的方式将菜单显示出来。这种方式既节省了屏幕空间,又实现了非常好的动画效果。
521 0
手动升级X-Scan–通过nessus nasl脚本更新X-Scan漏洞库
    http://www.netxsec.com/index.php/html/216.html 没测试过,转过来备用。
1073 0
Fundebug录屏插件更新至0.5.0,新增domain参数
摘要: 通过配置domain来保证“视频”的正确录制 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 BUG,提高 Debug 效率。
865 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载