如何使用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. 几行代码就能实现Html大转盘抽奖
大转盘抽奖是网络互动营销的一种常见形式,其通过简单易懂的界面设计,让用户在游戏中体验到乐趣,同时也能增加商家与用户之间的互动。本文将详细介绍如何使用HTML,CSS和JavaScript来实现大转盘抽奖的功能。
查看详情 -
2. 微信支付商户申请接入流程
微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如JSAPI支付、小程序支付、APP支付H5支付等支付方式接入。
查看详情 -
3. 浙江省同区域公司地址变更详细流程
提前准备好所有需要的资料,包含:房屋租赁合同、房产证、营业执照正副本、代理人身份证正反面、承诺书(由于我们公司其中一区域已有注册另外一公司,所以必须需要承诺书)
查看详情 -
4. 阿里云域名ICP网络备案流程
根据《互联网信息服务管理办法》以及《非经营性互联网信息服务备案管理办法》,国家对非经营性互联网信息服务实行备案制度,对经营性互联网信息服务实行许可制度。
查看详情 -
5. 微信小程序申请注册流程
微信小程序注册流程与微信公众号较为相似,同时微信小程序支持通过已认证的微信公众号进行注册申请,无需进行单独认证即可使用,同一个已认证微信公众号可同时绑定注册多个小程序。
查看详情