先理一下热更新思路。
1.制作升级包,hbuilder打包wgt。
打包的版本号要高于目前的版本号,在manifest.json里去设置版本号,让后台放到服务器上
2.获取本地版本号
3.本地版本号和服务器上升级包的版本号对比,当升级包版本号高于本地版本号的时候,下载升级包,并且安装。
代码如下:
mui.plusReady(function() {
plus.runtime.getProperty(plus.runtime.appid, function(wgtinfo) {
//获取本地版本号
var myVersion = wgtinfo.version;
console.log(myVersion);
//判断手机型号
var moble = plus.os.name;
console.log(plus.os.name);
mui.ajax({
type: 'GET',
url: '接口',
headers: {
Accept: 'application/json',
Authorization: 'Bearer ' + token
},
data: {
'platform': moble //手机型号
},
dataType: 'jsonp',
success: function(msg) {
var msg = JSON.parse(msg);
console.log(msg)
if(msg.code == 0) {
//下载链接
var downlink = msg.data[0].downlink;
//后台返回的新的版本
var newVersion = msg.data[0].version;
//判断新版本是否比本地版本高
console.log(newVersion);
console.log(downlink);
if(newVersion >myVersion) {
mui.toast('检测到新版本,稍后自动更新');
var btnArray=['是','否'];
mui.confirm('是否下载更新?','title',btnArray,function(e){
if(e.index==0){
mui.toast('正在更新');
createDownload(); //下载
return false;
}
});
}else {
return false;
};
function createDownload() {
var dtask = plus.downloader.createDownload(downlink,{filename:'_downloads/'}, function(d, status) {
//下载完成
if(status == 200) {
mui.toast('下载成功'+d.filename);
console.log(d.filename);
installWgt(d.filename);//安装wgt
} else {
mui.toast('下载失败' + status);
}
});
dtask.start();
}
}
}
})
});
//更新应用资源,
function installWgt(path){
plus.nativeUI.showWaiting("安装更新文件...");
plus.runtime.install(path,{},function(){
plus.nativeUI.closeWaiting();
plus.nativeUI.alert("应用资源更新完成!",function(){
plus.runtime.restart();
});
},function(e){
plus.nativeUI.closeWaiting();
plus.nativeUI.alert("安装更新文件失败["+e.code+"]:"+e.message);
});
}});
PS:新手入坑,这里要注意一下文件的下载路径。打升级包的时候注意manifest.json开放的权限,要与打包版本一致,否则会安装失败噢。