• 8.由于垃圾评论太多,关闭网站评论功能

  • 7.暂时删除 收藏夹  -2020年7月6日20:01:09

  • 6.添加日历小工具

  • 5.工具箱做为单独页面

  • 4.工具箱新增常用工具链接

  • 3.关闭网站内链–20200626

  • 2.代码风格改为 暗色主题–20200626

     

  • 1.取消左侧菜单列表显示 –20200625

  • 网站升级为https

    2020年6月25日21:40:52

app版本更新升级检测工具

APP开发 易天法地 4年前 (2020-08-16) 1350次浏览 扫描二维码
文章目录[隐藏]

1.后台代码

   
 <?php // 示例代码 update.php,此示例代码要求符合如下规则 // 1. manifest.json->基础配置->应用版本名称的值必须是以2个点号分隔开的3组数字,即  "数字.数字.数字" 比如 1.0.2   2.1.3 等,不可含有其他字符,且形式必须符合 数字.数字.数字 的形式
        // 2. 该示例代码文件同目录下有 apk 文件夹,此文件夹下存放以版本号命名的apk包,如 1.0.2.apk  1.2.4.apk
        // 3. 更新检测接口地址 http://a.com/update.php, apk下载url地址 http://a.com/apk/数字.数字.数字.apk    

        //0 不强制更新,1强制更新
        $force=1;
        //更新日志  
        $log='修复已知bug;优化性能';
        // $_POST 请求数据为 [version=>'数字.数字.数字 形式版本号',platform=>'android或ios']
        if($_POST['platform']=='ios'){
            // 如果是ios,则直接填写最新版本号和商店下载地址
            $new='1.0.8';//最新的版本号
            $url='https://appstor.apple.com/xxxxxxxxxxxxxx/xxxxxxxxxx';//苹果商店地址
            // getbig($new,$_POST['version']) 函数会返回 所传入版本号参数中较大的那个
            header('Content-Type:application/json;charset=utf-8');
            if($_POST['version']!=getbig($new,$_POST['version'])){
                // 如果返回值不等于 $_POST['version'],说明 $new 是新版本
                // 返回地址
                echo json_encode([
                    'code'=>0,
                    'msg'=>'ok',
                    'version'=>$new,
                    'url'=>$url,
                    'log'=>$log,
                    'force'=>$force
                ]);
                exit;
            }
            echo json_encode([
                'code'=>1,
                'msg'=>'no'
            ]);
            exit;
        }else{
            // 安卓
            // 存放apk的绝对路径地址
            $path=__DIR__.'/apk/';
            // 此处使用了exec调用linux上系统命令返回目录下所有的apk文件名称,需要php中启用exec函数
            exec("find {$path}/*.apk",$out);
            // $new 存放最大的版本号,初始为 app中传来的版本号
            $new=$_POST['version'];
            foreach ($out as $k=>$v){
                // 循环将最大的版本号赋给$new
                $new=getbig($new,substr(basename($v),0,-4));
            }
            header('Content-Type:application/json;charset=utf-8');
            // 如果 $new 无变化,则无更新
            if($new==$_POST['version']){
                 echo json_encode([
                    'code'=>1,
                    'msg'=>'no'
                 ]);
                 exit;
            }else{
                echo json_encode([
                    'code'=>0,
                    'msg'=>'ok',
                    'version'=>$new,
                    'url'=>'http://a.com/apk/'.$new.'.apk',//注意要替换为自己的域名
                    'log'=>$log,
                    'force'=>$force
                ]);
            }
        }

        // 判断2个版本号的大小,并返回较大的那个,比如 1.0.9  1.1.0 ,则返回 1.1.0
        // 传入由2个点分隔为3组的版本号,返回较大的那个
        // 1.0.3  1.2.9 等
        function getbig($one,$two){
            $onearr=explode('.',$one);
            $twoarr=explode('.',$two);
            if(intval($onearr[0]) !== intval($twoarr[0])){
                return intval($onearr[0])>intval($twoarr[0])?$one:$two;
            }

            if(intval($onearr[1]) !== intval($twoarr[1])){
                return intval($onearr[1])>intval($twoarr[1])?$one:$two;
            }
            if(intval($onearr[2]) !== intval($twoarr[2])){
                return intval($onearr[2])>intval($twoarr[2])?$one:$two;
            }
            return $one;
        }

2.APP端js

checkappupdate.js

function check(param={}){
			// 合并默认参数
			param=Object.assign({
				title:"检测到有新版本!",
				content:"请升级app到最新版本!",
				canceltext:"暂不升级",
				oktext:"立即升级"
			},param)
			if(!param.api){
				return false;
			}
			plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
				console.log('version='+widgetInfo.version);
				let platform=plus.os.name.toLocaleLowerCase()
				uni.request({
					url: param['api'],
					data: {
						platform: platform,
						version: widgetInfo.version
					},
					header: {
						'content-type': 'application/x-www-form-urlencoded'
					},
					method: 'POST', 
					dataType: 'json',
					success: (result) => {
						let data = result.data?result.data:null
						//console.log(data);
						if (data && data.code === 0 && data.url) {
							if(platform=='ios'){
								// 如果是ios,则跳转到appstore
								plus.runtime.openURL(result.data.data.url)
								return;
							}
							// android进行如下操作
							uni.showModal({
								title:param.title,
								content:data.log?data.log:param.content,
								showCancel:data.force?false:true,
								confirmText:param.oktext,
								cancelText:param.canceltext,
								success:res=>{
									if(!res.confirm){
										console.log('取消了升级');
										return
									}
									if (data.shichang === 1) {
										//去应用市场更新
										plus.runtime.openURL(data.shichangurl);
										plus.runtime.restart();
									} else  {
										// 开始下载
										// 创建下载任务
									var dtask = plus.downloader.createDownload(data.url, {filename:"_downloads/"}, 
										function(d, status){
											// 下载完成
											if(status == 200){
												plus.runtime.install(d.filename, {
													force: false
												}, function() {
													//进行重新启动;
													plus.runtime.restart();
												}, (e) => {
													uni.showToast({
														title: '安装升级包失败:'+JSON.stringify(e),
														icon: 'none'
														
													}) 
													plus.runtime.openURL(result.data.data.url)
												});
											} else {
												this.tui.toast("下载升级包失败,请手动去站点下载安装,错误码: " + status);
												plus.runtime.openURL(result.data.data.url)
												return;
											}
									});
									
									let view = new plus.nativeObj.View("maskView", {
										backgroundColor:"rgba(0,0,0,.6)",
										left:((plus.screen.resolutionWidth/2)-45)+"px",
										bottom: "80px",
										width: "90px",
										height:"30px"
									})
									view.drawText( '开始下载', {}, {size:'12px',color:'#FFFFFF'} );
									view.show()
									dtask.addEventListener("statechanged", (e)=>{
										if(e && e.downloadedSize>0){
											let jindu=((e.downloadedSize/e.totalSize)*100).toFixed(2)
											view.reset();
											view.drawText( '进度:'+jindu+'%', {}, {size:'12px',color:'#FFFFFF'} );
										}
									}, false);
									dtask.start(); 
								}
								}
							})
						}
					},
					fail: (res) => {}
				})
			});
		}
export default {
	check
}

3.APP端调用

4638c6d3822af933a4b250ebb83bb3a9 - app版本更新升级检测工具

			
	
		
	
	
<script>
	import checkappupdate from 'common/wonyes/checkappupdate.js'
	export default {
		data() {
			return {
				version: '',
				newversion: '',
				platform: '',
				log: ''
			}
		},
		onLoad: function() {
			checkappupdate.check({
				//  {} 里配置参数, 默认如下,其中api是接口地址,必须填写
				api: 'https://XXXXXXX/update.php',
			})
			console.log('about App checkappupdate');
			uni.getSystemInfo({
				success: (e) => {
					plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
						//console.log(JSON.stringify(wgtinfo));
						//console.log(wgtinfo.version);//应用版本号
						this.platform = plus.os.name.toLocaleLowerCase();
						this.version = wgtinfo.version;
						console.log(this.version); //应用版本号
					})
					uni.request({
						url: 'https://XXXXXXX/update.php',
						data: {
							platform: this.platform,
							version: this.version
						},
						header: {
							'content-type': 'application/x-www-form-urlencoded'
						},
						method: 'POST',
						dataType: 'json',<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>
						success: (result) => {
							let data = result.data ? result.data : null
							if (data && data.code === 0) {
								this.newversion = result.data.version;
								this.log = result.data.log;
								console.log(this.newversion);
								console.log(this.log);
							}
						},
						fail: (res) => {}
					})
				}
			})

		}
	}
</script>



<style>
	.after {
		content: '';
		position: absolute;
		background-color: #333333;<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>
		/* display: block; */
		z-index: 1;
		top: auto;
		position: relative;
		width: 100%;
		height: 1PX;
		-webkit-transform-origin: 50% 100%;
		-ms-transform-origin: 50% 100%;
		transform-origin: 50% 100%;
		-webkit-transform: scaleY(0.33);
		-ms-transform: scaleY(0.33);
		transform: scaleY(0.33);
	}
</style>

 

 

 


本站文章如无特殊说明均为原创
文章标题: app版本更新升级检测工具
转载请注明原文链接:https://www.zylearning.top/911.html
喜欢 (3)