uni-app开发APP实现热更新和整包更新
热更新(.wgt):只有前端资源或模块进行调整,整个App结构不发生变化,那只需要更新这一部分资源,避免用户重新下载整个App。通过 HBuilderX 打包 .wgt 包即可。整包更新(.apk):App 发生了非常大的改变,搭建框架发生改变,要求用户覆盖安装。...
·
热更新(.wgt):只有前端资源或模块进行调整,整个App结构不发生变化,那只需要更新这一部分资源,避免用户重新下载整个App。通过 HBuilderX 打包 .wgt 包即可
整包更新(.apk):App 发生了非常大的改变,搭建框架发生改变,要求用户覆盖安装。
安卓比较好实现热更新,uniapp ios暂时无法实现热更新,只能跳转 Apple Store 下载更新
// 获取当前版本号
getVersion() {
if (uni.getSystemInfoSync().platform == "ios") return
plus.runtime.getProperty(plus.runtime.appid, wgtinfo => {
let version = wgtinfo.version; // 版本号
let versionName = wgtinfo.name; // 版本名称
this.$api.updates({
v: wgtinfo.version
}).then(res => {
if (res.data.code == 1) {
let {
data: versionInfo
} = res.data
if (versionInfo.type == "patch") { // 热更新
this.updatePage(versionInfo.url, "wgt", Number(versionInfo.force), version,
versionInfo.version)
} else if (versionInfo.type == "upgrade") { // 整包更新
this.updatePage(versionInfo.url, "apk", Number(versionInfo.force), version,
versionInfo.version)
} else {
return
}
} else {
console.log(res.data.msg);
}
})
});
},
// 判断是否更新APP
updatePage(downUrl, downType, force, oldV, newV) {
// 提醒用户更新模态框
uni.showModal({
title: 'APP更新提示',
content: `当前版本 V.${oldV},有更新的版本 V.${newV}\n是否更新升级?`, //更新接口提示的信息
success: res => {
// modal中点击确定
if (res.confirm) {
// 下载安装包
this.downLoadPageAndInstall(downUrl, downType);
} else {
if (force) {
plus.runtime.quit()
}
}
},
fail: error => {
//发生错误
console.log(error);
}
});
},
// 下载安装包
downLoadPageAndInstall(downUrl, downType) {
if (uni.getSystemInfoSync().platform == "android") {
if (downType == "wgt") { // 热更新
let downLoader = plus.downloader.createDownload(downUrl, { // 新建下载任务
filename: "_doc/update/"
}, function(d, status) {
if (status == 200) { // 下载成功
plus.nativeUI.showWaiting("正在安装...")
// 安装wgt包
plus.runtime.install(d.filename, {}, function() {
plus.nativeUI.closeWaiting();
plus.nativeUI.toast('应用资源更新完成', function() {
plus.runtime.restart();
});
},
function(e) {
plus.nativeUI.toast('安装wgt文件失败[' + e.code + ']:' + e.message);
console.log('安装wgt文件失败[' + e.code + ']:' + e.message);
}); // 安装wgt包
} else {
plus.nativeUI.alert("下载wgt失败!");
}
})
downLoader.start() // 开始下载
let showLoading = plus.nativeUI.showWaiting("正在下载资源包"); // 提示框
// 下载进度条
let prg = 0;
downLoader.addEventListener("statechanged", function(task, status) {
switch (task.state) {
case 1:
showLoading.setTitle("正在下载");
break;
case 2:
showLoading.setTitle("已连接到服务器");
break;
case 3:
prg = parseInt(
(parseFloat(task.downloadedSize) /
parseFloat(task.totalSize)) *
100
);
showLoading.setTitle(" 正在升级" + prg + "% ");
break;
case 4:
plus.nativeUI.closeWaiting();
break;
}
});
} else if (downType == "apk") { // 整包更新
let downLoader = plus.downloader.createDownload(downUrl, { // 新建下载任务
filename: "_doc/update/"
}, function(d, status) {
if (status == 200) { // 下载成功
plus.nativeUI.showWaiting("正在安装...")
// 安装wgt包
plus.runtime.install(d.filename, {}, function() {
plus.nativeUI.closeWaiting();
plus.nativeUI.toast('应用资源更新完成', function() {
plus.runtime.restart();
});
},
function(e) {
plus.nativeUI.toast('安装apk文件失败[' + e.code + ']:' + e.message);
}); // 安装wgt包
} else {
plus.nativeUI.alert("下载apk安装包失败!");
}
})
downLoader.start() // 开始下载
let showLoading = plus.nativeUI.showWaiting("正在下载安装包"); // 提示框
// 下载进度条
let prg = 0;
downLoader.addEventListener("statechanged", function(task, status) {
switch (task.state) {
case 1:
showLoading.setTitle("正在下载");
break;
case 2:
showLoading.setTitle("已连接到服务器");
break;
case 3:
prg = parseInt(
(parseFloat(task.downloadedSize) /
parseFloat(task.totalSize)) *
100
);
showLoading.setTitle(" 正在下载" + prg + "% ");
break;
case 4:
plus.nativeUI.closeWaiting();
break;
}
});
}
} else if (uni.getSystemInfoSync().platform == "ios") {
const appleId = 1640387468
plus.runtime.launchApplication({
action: `itms-apps://itunes.apple.com/cn/app/id${appleId}?mt=8`
}, function(e) {
console.log('Open system default browser failed: ' + e.message);
});
}
}
}
更多推荐
已为社区贡献6条内容
所有评论(0)