php 判断app版本更新,app版本更新升级检测工具

更新记录

3.0.0(2020-12-07)

增加wgt热更新

2.0.0(2020-11-30)

增加热更新支持,使用hbx 打包为wgt,即可支持热更新检测和安装

查看更多

检测版本升级 js sdk

版本号: 是指 manifest.json->基础配置->应用版本名称的值,以2个点号分隔的3组数字,如 1.0.0 2.1.9 等

原理

app通过post请求将app版本号发往后端服务器,与服务器上的apk版本号进行比对后,返回最新版本的url下载地址。需自行完成后端比对代码,只要返回符合下列各式的json即可(附带一个php版后端示例代码)

POST 请求数据为

{

version:'数字.数字.数字 形式版本号',

platform:'android或ios'

}

存在新wgt 或android平台下apk,则返回

{

code:0

msg:"ok"

version:1.2.1//版本号

url:'http...apk|wgt'//url下载地址,wgt优先,如果不存在新wgt,并且是ios,则此处为AppStore的地址

log:''//更新文字说明,支持 \n 换行

force:1// 是否强制升级,force=1则是强制升级,用户无法关闭升级提示框

}

如果不存在新apk或wgt,则返回

{

code:1,

msg:"no"

}

后端更新检测示例代码,php版本

+----http://a.com/根目录

+---update.php

+---apk

+----1.0.1.apk

+----1.0.2.apk

+----1.0.3.wgt

// 在此填写ios的最新版本号及在appstore市场的url地址,用于比对是否转向去appstore市场更新

$ios='1.0.8';

$iosurl='https://appstor.apple.com/xxxxxxxxxxxxxx/xxxxxxxxxx';

// 示例代码 update.php,此示例代码要求符合如下规则

// 1. manifest.json->基础配置->应用版本名称的值必须是以2个点号分隔开的3组数字,即 "数字.数字.数字" 比如 1.0.2 2.1.3 等,不可含有其他字符,且形式必须符合 数字.数字.数字 的形式

// 2. 该示例代码文件同目录下有 apk wgt等 文件夹,此文件夹下存放以版本号命名的apk包或wgt包,如果apk和wgt包版本号相同,则优先返回wgt,如 1.0.2.apk 1.2.4.apk 1.3.4.wgt等

// 3. 更新检测接口地址 http://a.com/update.php, apk下载url地址 http://a.com/apk/数字.数字.数字.apk或wgt

//0 不强制更新,1强制更新

$force=0;

//更新日志

$log='修复已知bug;优化性能';

// $new 存放最大的版本号,初始为 app中传来的版本号

$new=$_POST['version'];

// 存放apk或wgt的绝对路径地址

// 首先判断是否有待更新的资源 wgt

$path=__DIR__.'/apk/';

// 此处使用了exec调用linux上系统命令返回目录下所有的apk文件名称,需要php中启用exec函数

exec("find {$path} -type f -regex '.*\(apk\|wgt\)'",$out);

foreach ($out as $k=>$v){

// 循环将最大的版本号赋给$new

$new=getbig($new,substr(basename($v),0,-4));

}

header('Content-Type:application/json;charset=utf-8');

// 如果版本号发生了变化,且 是热更新资源wgt,则无论ios还是android均返回资源wgt

if($new !=$_POST['version'] && file_exists($path.$new.'.wgt')){

// 如果是wgt,则无论ios还是android都返回

echo json_encode([

'code'=>0,

'msg'=>'ok',

'version'=>$new,

'url'=>'https://exam.wonyes.org/apk/'.$new.'.wgt',

'log'=>'新版本'.$new.','.$log,

'force'=>$force

]);

exit;

}

// IOS 更新判断

// $_POST 请求数据为 [version=>'数字.数字.数字 形式版本号',platform=>'android或ios']

if($_POST['platform']=='ios'){

// 如果是ios,则直接填写最新版本号和商店下载地址

$new=$ios;//最新的版本号

$url=$iosurl;//苹果商店地址

// getbig($new,$_POST['version']) 函数会返回 所传入版本号参数中较大的那个

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

]);

}else{

echo json_encode([

'code'=>1,

'msg'=>'no'

]);

}

exit;

}

// android下判断

// 如果 $new 无变化,则无更新

if($new==$_POST['version']){

echo json_encode([

'code'=>1,

'msg'=>'no'

]);

exit;

}else{

echo json_encode([

'code'=>0,

'msg'=>'ok',

'version'=>$new,

'url'=>'https://exam.wonyes.org/apk/'.$new.'.apk',

'log'=>'新版本'.$new.','.$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;

}

使用方法

将插件下载后,common 目录直接覆盖在项目根目录下

在App.vue里顶端// #ifdef APP-PLUS

import checkappupdate from 'common/checkappupdate.js'

// #endif

同样在App.vue 里 onLaunch: 方法里,在 // #ifdef APP-PLUS 下面一行引入如下代码

checkappupdate.check({})

// {} 里配置参数, 默认如下,其中api是接口地址,必须填写

{

title:"检测到有新版本!",

content:"请升级app到最新版本!",

canceltext:"暂不升级",

oktext:"立即升级",

api:''

}

// #ifdef APP-PLUS

checkappupdate.check({

title:"检测到有新版本!",

content:"请升级app到最新版本!",

canceltext:"暂不升级",

oktext:"立即升级",

api:'http://exam.wonyes.org/update.php'

})

// #endif

如果使用示例php代码,则按下述配置,其他方式参考此配置

A. 假设域名为 a.com 更新接口文件为update.php,接口地址为 http://a.com/update.php

B. 复制示例代码,粘贴到update.php中

C. 在update.php同目录下建立apk文件夹,里面存放应用的apk包或wgt包,包命名必须为 版本号.apk .wgt,即符合 “数字.数字.数字.wgt|apk”形式,如果存在同版本号的apk和wgt,则wgt优先

确保站点绑定解析均正常,到此完成

使用示例项目

如果你通过文档说明还无法顺利使用,可下载示例项目,查看应用过程

如果觉得有用,不妨赞助一下,多少随意 ┑( ̄Д  ̄)┍

你可能感兴趣的:(php,判断app版本更新)