APP版本自动更新的实现方法-ITB运维部落—http://www.itbcn.cn—ITB运维技术交流之家平台
记录工作点滴
分享运维知识

APP版本自动更新的实现方法

APP版本自动更新

前端接口调用获取服务器项目版本号

$.ajax({
						type: 'POST',
						url: url + 'api/user/get_version',
						data: '',
						dataType: 'json',
						timeout: 3000,
						async: false,
						success: function(data) {
							//update_ksd(data.data)
							 if(data.data.user_version === data.data.version){
	           	   	  	           return false;
			           	   	  }else{
					           	   	  	var vv = ismobile();console.log(vv)
					           	   	  	if(vv == 1){
					           	   	  console.log(data.data.apk)
					           	   	         update_ksd(data.data.apk)
					           	   	  	}else{
					           	   	  console.log(data.data.ios)
					           	   	         update_ksd(data.data.ios)
					           	   	  	}
			           	
			           	   	  }
						}
					})

php获取版本号接口

config.php配置文件

  'VERSION'=>
            [
                'apk'=> ['update'=>true,'version'=>'2.0.6','url'=>'http://xiaodishen.ekeli.cn/uploads/H5C63E0E6_0921094109.apk'],

                'ios'=> ['update'=>true,'version'=>'2.0.6','url'=>'itms-services://?action=download-manifest&url=https://xiaodishen.ekeli.cn/uploads/manifest.plist']
            ]
 //获取版本号
    public function get_version(){
        $data = config('VERSION');
        $data['version'] = $data['apk']['version'];
        $data['update'] = $data['apk']['update'];
        $data['url'] = $data['apk']['url'];
        $this->response('查询成功',200,$data);
    }

判断平台

/**
 * [isMobile 判断平台]
 * @param test: 0:iPhone    1:Android
 */
function ismobile(){
    var u = navigator.userAgent, app = navigator.appVersion;
    if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){
     if(window.location.href.indexOf("?mobile")<0){
      try{
       if(/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)){
        return '0';
       }else{
        return '1';
       }
      }catch(e){}
     }
    }else if( u.indexOf('iPad') > -1){
        return '0';
    }else{
        return '1';
    }
};

对比版本号,确认是否更新

function update_ksd(data) //跨域请求后的回调函数
					{
						var new_json = data;
						if(new_json.update) //如果是自动更新,则判断版本号
						{
							$.ajax({
								type: "get",
								url: "manifest.json",
								async: true,
								data: '',
								async: false,
								dataType: 'text',
								success: function(res) {
									var data = res.split('version');
									data = data[1].split('}');
									data = data[0].split('{');
									data = data[1].split('name');
									data = data[1].split(',');
									console.log(data)
									var r = /\d+/g;
									data = data[0].match(r);
									version = data.join('')
									var new_version = new_json.version.replace(/\./g, '');
									localStorage.setItem('version', data.join('.'));
									console.log(new_version + '新版本' + version);
									if(new_version > version) //比对版本号
									{

										mui.plusReady(function() {
											plus.nativeUI.confirm("应用版本已更新,请下载更新", function(event) {

												if(event.index == 1) {

													plus.nativeUI.showWaiting('更新中,请等待...');
													download(new_json.url); //更新函数,在下面
													var UIApplication = plus.ios.import("UIApplication");
													var sharedApplication = UIApplication.sharedApplication();
													var NSURL = plus.ios.import("NSURL");
													sharedApplication.openURL(NSURL.URLWithString('http://qkl.chs518.com/download/download.html'));
													plus.ios.deleteObject(sharedApplication);
												}
											}, '', ['取消', '确认']);
										});

									}
								},
								error: function() {

								}
							});
						}
					}

下载安装

function download(url) {
						//console.log(url);
						//创建下载管理对象
						var dtask = plus.downloader.createDownload(url, {}, function(d, status) {
							// 下载完成
							if(status == 200) { //下载成功后的回调函数
								plus.nativeUI.toast("下载成功,准备安装" + d.filename);
								//console.log(d.filename)
								//安装程序,第一个参数是路径,默认的下载路径在_downloads里面
								plus.runtime.install(d.filename, {}, function() {
									localStorage.removeItem('uid');
									plus.nativeUI.toast('安装成功');
								}, function() {
									plus.nativeUI.toast('安装失败');
								});
								plus.nativeUI.closeWaiting();
							} else {
								alert("下载失败 " + status);

							}
						});
						//dtask.addEventListener( "statechanged", onStateChanged, false );
						dtask.start(); //开始下载任务
					}
未经允许不得转载:ITB运维部落—http://www.itbcn.cn—ITB运维技术交流之家平台 » APP版本自动更新的实现方法

如果文章对你有帮助,欢迎点击上方按钮打赏作者

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址