1. uniapp介绍
uniapp是一款跨平台的开发框架,基于vue.js和weex技术栈,只需编写一份代码,就能够同时运行在多个平台上,包括iOS、Android、H5等。它简化了跨平台开发的难度,提高了开发效率,使得开发者可以专注于业务逻辑,而无需关心平台差异性。
2. uniapp更新方式
2.1 uni-app的原理
uni-app采用了两个打包方式,一个是HBuilderX 以项目为单位将应用打包成原生应用,同时生成H5版本;另一个是vue-cli-plugin-uni 将应用打包成h5版本,再配合uni-app的自有框架,实现了跨平台的开发。
# 打包APP
npm run dev:%PLATFORM%
# 项目运行
npm run serve:%PLATFORM%
2.2 uniapp更新方式
uniapp的更新方式有两种:覆盖安装和增量更新。覆盖安装会将原有版本删除,然后安装更新版本;增量更新会将原有版本中与更新版本不同的部分进行替换,从而达到更新的目的。
uniapp提供了uni.updater模块来实现更新功能。其中uni.updater包含了checkUpdate和downloadUpdate两个方法。checkUpdate方法用于检查是否有更新,如果有则调用downloadUpdate方法进行下载更新。而downloadUpdate方法会将更新包下载到本地,并自动进行安装。这两个方法的具体实现需要开发者根据自己的需求进行定义。
//检查更新
uni.getUpdateManager().onCheckForUpdate(function (res) {
console.log(res.hasUpdate)
})
//下载更新
uni.getUpdateManager().onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
uni.getUpdateManager().applyUpdate()
}
}
})
})
2.3 uniapp增量更新
uniapp支持增量更新功能,在使用微信小程序开发工具时,可以通过设置button的属性open-type='getUpdateManager'来实现增量更新。需要注意的是,在调用getUpdateManager接口前,需要先调用wx.getUpdateManager接口,否则会提示方法不存在。
对于安卓平台的增量更新,需要借助于uni-upx插件完成。具体使用方法见uniapp官方文档。
3. uniapp不覆盖安装更新实现方法
实现uniapp不覆盖安装更新的具体方法如下:
3.1 获取当前应用版本号
本地应用版本号和远程版本号进行对比,判断是否需要进行更新。关于获取当前应用版本号的方法,可以使用uni.getSystemInfoSync()获取当前设备信息,从而获取应用版本号。
//获取当前应用版本号
let updateManager = uni.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
console.log('当前应用版本号:' + res.packageVersion)
})
3.2 获取远程版本信息
需要向服务端发送请求获取远程版本信息,包括版本号、更新内容、下载链接等。可以使用uni.request方法发送请求,获取到版本信息后进行解析,获取到新版本号和下载链接。
//获取远程版本信息
uni.request({
url: 'https://xxxx/version.json',
success: function (res) {
console.log('远程版本信息:' + res.data.version)
console.log('更新内容:' + res.data.content)
console.log('下载链接:' + res.data.url)
}
})
3.3 下载新版本
使用uni.downloadFile方法下载新版本,并获取下载进度。需要注意的是,下载新版本需要在后端做相应处理,确保下载链接正确可靠。
//下载新版本
uni.downloadFile({
url: 'http://xxxx.apk',
success: function (res) {
if (res.statusCode === 200) {
console.log('新版本下载成功!')
const filePath = res.tempFilePath
//安装下载的新版本
uni.install({
filePath: filePath,
success: function () {
console.log('新版本安装成功!')
}
})
}
},
fail: function (err) {
console.log('新版本下载失败!')
}
})
3.4 更新提示
下载新版本后,需要向用户弹出更新提示,让用户选择是否进行更新。可以使用uni.showModal方法弹出提示框,让用户进行确认。
//弹出更新提示框
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,是否现在更新?',
confirmText: '更新',
success: function (res) {
if (res.confirm) {
console.log('用户点击更新按钮!')
//下载新版本
//...
} else {
console.log('用户点击取消按钮!')
}
}
})
4. 总结
通过使用uniapp提供的uni.updater模块,可以实现覆盖安装更新和增量更新功能。如果想要实现不覆盖安装更新,需要自己实现获取本地应用版本号、获取远程版本信息、下载新版本和更新提示等功能。总体来说,uniapp提供了非常方便的开发方式和强大的功能,是一款值得推荐的跨平台开发框架。