uniapp 实现版本更新或者热更新
首先先来说说为什么要进行版本更新和热更新;版本更新,毋庸置疑,我们所作的产品肯定会一直升级迭代的,不可能一直不升级,当版本升级完的时候我们会从新上架应用商场,但是很多用户是不去看这些的,因此当有重要版本更新的时候,我们其实希望用户打开 APP 就可以看到有新的版本更新;其次就是热更新,热更新就是在用户不知道的情况下进行更新,主要就是一些小更新或者 bug 的修复,这种情况我们不可能让用户为了我们一
·
前言
首先先来说说为什么要进行版本更新和热更新;版本更新,毋庸置疑,我们所作的产品肯定会一直升级迭代的,不可能一直不升级,当版本升级完的时候我们会从新上架应用商场,但是很多用户是不去看这些的,因此当有重要版本更新的时候,我们其实希望用户打开 APP 就可以看到有新的版本更新;其次就是热更新,热更新就是在用户不知道的情况下进行更新,主要就是一些小更新或者 bug 的修复,这种情况我们不可能让用户为了我们一个小 bug 去应用商城从新下载,因此就需要用到热更新。
准备
首先在跟目录下创建一个 common 的目录存放一些工具函数,在common 下面创建一个名为 updataApp 的 js 文件,将下方代码直接粘贴到里面,也可以根据自身需求修改里面代码,在这个工具函数里面向外暴漏了一个方法 getAppVersion,到这里前期工作准备就绪,接下来就是如何使用。
// 下载最新的APP
const downloadApp = (appUrl, isHint) => {
//下载最新版本APP
if (isHint) {
uni.showLoading({
title: '下载中...',
mask: true
})
}
uni.downloadFile({
url: appUrl,
success: fileResult => {
uni.hideLoading();
if (isHint) {
uni.showModal({
content: '下载成功,是否现在重启APP并安装吗?',
confirmText: '重启',
success: function(modalResult) {
if (modalResult.confirm) {
plus.runtime.install(
fileResult.tempFilePath, {
force: true
},
function() {
uni.showLoading({
title: '更新成功,重启中...',
mask: true
})
plus.runtime.restart();
}
)
}
}
})
} else {
plus.runtime.install(fileResult.tempFilePath, {
force: true
})
}
},
fail: err => {
if (isHint) {
uni.hideLoading();
uni.showToast({
title: '下载失败,请检查你的网络情况!',
icon: 'none'
})
}
}
})
}
// 获取版本号对比是否需要更新
export const getAppVersion = (isHint = true, serveAppVersion = null, serveAppUrl = null) => {
// 当前本地的PP版本号
//
let currentAppVersion = null
plus.runtime.getProperty(plus.runtime.appid, function(e) {
currentAppVersion = Number(e.versionCode)
if (serveAppVersion > currentAppVersion) {
if (isHint) {
uni.showModal({
content: '当前有最新版本,是否要下载更新?',
success: (res) => {
if (res.confirm) {
downloadApp(serveAppUrl, isHint)
}
}
})
} else {
downloadApp(serveAppUrl, isHint)
}
}
});
}
使用
// 首先先进行引入这个方法
import { getAppVersion } from "./updataApp.js"
// 接下来我们需要自己去请求接口拿到服务器上app的版本号和下载地址,在调用这个方法的时候传入进去
// 第一个参数可选值为true和false,true就是会有弹框提醒用户更新,false就是没有,可以用在热更新
// 第二个参数是通过请求接口拿到服务器上app的版本号
// 第三个是通过请求接口拿到服务器上app的下载地址
getAppVersion(isHint, serveAppVersion, serveAppUrl)
小结
到这里我们也就实现了 APP 的版本更新,使用起来也很简单;这里有一个注意点,就是只能在 APP 上面使用,因此我们在引入进来这个方法的时候,通过接口获取版本检测更新需要用到 uniapp 的条件编译,只在 APP 上进行显示,H5 以及其他情况不进行版本更新。
更多推荐
已为社区贡献2条内容
所有评论(0)