uniapp怎么更新不覆盖安装

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提供了非常方便的开发方式和强大的功能,是一款值得推荐的跨平台开发框架。