如何使用uniapp实现热更新逻辑
现在,热更新已经非常普遍,无论是在游戏还是普通的app中,甚至在一些脚手架或编辑器中都可以看到。虽然它们的表现可能有所不同,但都有一个共同的效果,即能够实时更新我们所需的内容。
本篇文章主要讲述的是小程序和APP的热更新。对于小程序的热更新,我会提供具体的实现步骤和代码示例。而对于APP的热更新,我将在文章中介绍一些基本的概念和技术,并提供一些可能有用的资源和链接,但请注意,由于我无法提供谷歌应用市场的具体实现方式,所以未经过实际试验。
小程序热更新
小程序热更新一般比较简单,各平台都支持,主要是为了在有新版本发布的时候实时通知用户,下载新版本使用,防止出现问题。下面直接上代码:
// 放在 app.vue 的 onShow 生命周期里面
// 以下是vue3的示例
// app.vue
import {
onShow
} from "@dcloudio/uni-app"
const updateMiniProgram = () => {
const updateManager = uni.getUpdateManager();
updateManager.onCheckForUpdate(() => {});
updateManager.onUpdateReady((res) => {
uni.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(_res) {
if (_res.confirm) {
// 重启
updateManager.applyUpdate();
}
}
});
});
updateManager.onUpdateFailed(() => {});
}
onShow(() => {
updateMiniProgram()
})
APP更新
插件方式
插件市场有很多解决方案,可以使用官方的热更新解决方案,这里主要讲述自己实现,无论是那种实现,都需要后台上传热更新包告诉APP,是否要更新
官方实现
优点:
使用简单,无需太复杂的操作
界面美观,可直接使用
官方插件有保障
缺点:
需要单独部署后台管理系统
云开发以及云函数开发可能需要前端自己开发
目前按流量收费
总结:不想自己开发逻辑的可使用官方插件,但后期费用什么的不好说(毕竟之前都是免费的),现在很多东西都收费了
自己实现
其实整个过程也没那么难,这里主要讲解一下过程
后台管理系统
新增包示例
需开发包管理模块,区分IOS包和安卓包,包含版本号、下载链接、热更新链接、最低版本号,热更新包我们可以放到OSS上或者其他位置,还要维护全局版本号即最低版本号的判断条件,还可以加入是否强制更新,上述其实没什么难度,就是一个简单的增删改查列表
APP端热更新
获取当前包的版本信息
// 使用plus拿到当前的包
plus.runtime.getProperty(plus.runtime.appid, (inf) => {
const version = inf.version.split('.').join('');
console.log('机型=>' + plus.device.model)
console.log('生产厂商=>' + plus.device.vendor)
console.log('唯一标识=>' + plus.device.uuid)
console.log('设备操作系统=>' + plus.os.version)
// 获取最近的版本信息 发送请求
// 把当前包版本号传给后端查询是否需要更新
await clientVersion(options)
}
更新逻辑
1.强制更新
// 获取最近的版本信息
const res = await clientVersion(options)
if(res.type === "强制更新"){
// 强制更新则提示打开自己的网站
uni.showModal({
title: '更新提示',
content: '应用需要升级',
showCancel: false,
cancelText: '',
confirmText: '立即升级',
success: res => {
// 打开自己的下载网站
plus.runtime.openURL(downloadUrl);
}
});
return;
}
2.可选更新
// 获取最近的版本信息
const res = await clientVersion(options)
if(res.type === "可选更新"){
// 可选更新选择更新即打开自己的网站
// 不更新无操作
uni.showModal({
title: '更新提示',
content: '应用需要升级',
showCancel: true,
cancelText: '下次再说',
confirmText: '立即升级',
success: res => {
if (res.confirm) {
// 打开自己的下载网站
plus.runtime.openURL(downloadUrl);
}
}
});
return;
}
3.自动更新
// 获取最近的版本信息
const res = await clientVersion(options)
if(res.type === "自动更新"){
// 下载安装包
uni.downloadFile({
url: updeteUrl,
success: (result) => {
if (result.code === 200) {
// 自动安装(应用重启才会生效)
plus.runtime.install(result.path, {
force: false
}, function() {
console.log('install success...');
//重启
// 也可以下次自己启动
plus.runtime.restart();
}, function(e) {
console.error('自动更新,安装失败')
});
} else {
console.error('自动更新,下载失败');
}
},
fail: function(e) {
console.error('下载失败',JSON.stringify(e))
}
});
}
4.无更新
// 获取最近的版本信息
const res = await clientVersion(options)
if(res.type === "无更新"){
// 其他操作
}
至此基本上逻辑讲清楚了,至于后端如何设计、UI如何设计这就不多说了!
uniapp
小程序开发
js
阅读排行
-
1. 微信支付商户申请接入流程
微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如JSAPI支付、小程序支付、APP支付H5支付等支付方式接入。
查看详情 -
2. 微信小程序申请注册流程
微信小程序注册流程与微信公众号较为相似,同时微信小程序支持通过已认证的微信公众号进行注册申请,无需进行单独认证即可使用,同一个已认证微信公众号可同时绑定注册多个小程序。
查看详情 -
3. 阿里云域名ICP网络备案流程
根据《互联网信息服务管理办法》以及《非经营性互联网信息服务备案管理办法》,国家对非经营性互联网信息服务实行备案制度,对经营性互联网信息服务实行许可制度。
查看详情 -
4. 浙江省同区域公司地址变更详细流程
提前准备好所有需要的资料,包含:房屋租赁合同、房产证、营业执照正副本、代理人身份证正反面、承诺书(由于我们公司其中一区域已有注册另外一公司,所以必须需要承诺书)
查看详情 -
5. 几行代码就能实现Html大转盘抽奖
大转盘抽奖是网络互动营销的一种常见形式,其通过简单易懂的界面设计,让用户在游戏中体验到乐趣,同时也能增加商家与用户之间的互动。本文将详细介绍如何使用HTML,CSS和JavaScript来实现大转盘抽奖的功能。
查看详情