uniapp 实现热更新(安卓和ios)
经常在做app的时候,会有做热更新的需求,这也是常用的更新app的一种手段。当你每次发版不想更新整个app安装包时,可以采用差量更新。在HBuilderx中提供了这个wgt包,将打出来的包给后端放在服务器上,后端会提供一个下载链接。下面是实现热更新的具体方法:// 检查是否更新版本updateVersion() {// 热更新不会更新app的版本号// 这里用一个常量定义(每次修改版本号将设置里面
·
经常在做app的时候,会有做热更新的需求,这也是常用的更新app的一种手段。
当你每次发版不想更新整个app安装包时,可以采用差量更新。在HBuilderx中提供了这个wgt包,
将打出来的包给后端放在服务器上,后端会提供一个下载链接。
下面是实现热更新的具体方法:
// 检查是否更新版本
updateVersion() {
// 热更新不会更新app的版本号
// 这里用一个常量定义(每次修改版本号将设置里面的版本号手动更新)
let realVersion = '1012';
//plus.runtime.getProperty(),获取本机安装的版本,具体使用请参照如下链接
//https://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.WidgetInfo
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
let currentVersion = widgetInfo.version.replace(/\./g, ""); //获取当前版本号
sendVersion().then(res => {
const code = res.data.code;
if (code === 100) {
let newVersion = res.data.data.id;
let downloadUrl = res.data.data.downloadUrl;
if (realVersion < newVersion) {
uni.showModal({
title: '已发现新版本',
content: '确认更新?',
success: function(res) {
if (res.confirm) {
uni.downloadFile({
url: downloadUrl,
success: (downloadResult) => {
plus.runtime.install(
downloadResult
.tempFilePath, {
force: true
},
function() {
// 应用热重启,重新启动进入首页。
plus.runtime.restart();
uni.showModal({
title: '安装成功!',
content: '已重新进入应用',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
} else if(res.cancel) {
console.log('用户点击取消');
}
}
});
// uni.hideToast();
},
function(e) {
uni.showToast({
title: '安装失败',
icon: 'none'
})
})
},
fail: (err) => {
console.log(err)
uni.showToast({
title: '下载失败',
icon: 'none'
})
}
})
} else if (res.cancel) {
uni.showToast({
title: '已取消',
icon: 'none'
})
}
}
})
}
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
})
}
}).catch(err => {
console.log(err)
})
})
},
1.plus.runtime.getProperty()方法是用于获取当前app的版本号,也就是在mainfest.json中设置的版本号。将获取的版本号与后端返回的版本号做对比,如果后端返回的版本号大于当前app版本号则提示更新。但是在做这个需求是遇到一个问题,热更新是不会更新当前app的版本号的,所以之后定义了一个常量realVersion来放每次更新的真正的版本号。
2.uni.downloadFile()方法是用于下载新的wgt包的,根据后端返回的链接下载;
3.plus.runtime.install()方法是用于安装下载后的wgt包的
4.每次更新wgt包之前需要修改版本号,只有版本号比上一次高才会触发更新,ios和安卓都是一样的。
如有问题,欢迎留言!!!
更多推荐
已为社区贡献16条内容
所有评论(0)