uniApp实现热更新

article/2025/8/27 8:19:46

热更新

热更新是开发中常见且常用的一种软件版本控制的方式,在uniapp进行使用热更新将软件实现更新操作
思路:

  • 服务器中存储着最新版本号,前端进行查询
  • 可以在首次进入应用时进行请求版本号进行一个匹对
  • 如果版本号一致则不提示,反之则提示进行更新执行更新操作

实现

采用方法封装进行使用~

1.封装一个对比版本号的函数

/*** 对比版本号,如需要,请自行修改判断规则* 支持比对	("3.0.0.0.0.1.0.1", "3.0.0.0.0.1")	("3.0.0.1", "3.0")	("3.1.1", "3.1.1.1") 之类的* @param {Object} v1* @param {Object} v2* v1 > v2 return 1* v1 < v2 return -1* v1 == v2 return 0*/
function compare(v1 = '0', v2 = '0') {v1 = String(v1).split('.')v2 = String(v2).split('.')const minVersionLens = Math.min(v1.length, v2.length);let result = 0;for (let i = 0; i < minVersionLens; i++) {const curV1 = Number(v1[i])const curV2 = Number(v2[i])if (curV1 > curV2) {result = 1break;} else if (curV1 < curV2) {result = -1break;}}if (result === 0 && (v1.length !== v2.length)) {const v1BiggerThenv2 = v1.length > v2.length;const maxLensVersion = v1BiggerThenv2 ? v1 : v2;for (let i = minVersionLens; i < maxLensVersion.length; i++) {const curVersion = Number(maxLensVersion[i])if (curVersion > 0) {v1BiggerThenv2 ? result = 1 : result = -1break;}}}return result;
}
  1. 封装更新函数

通过downloadTask.onProgressUpdate进行监听,再通过plus.nativeUI.showWaiting("正在下载 - 0%"); 进行加载显示下载进度…

var updateUseModal = (packageInfo) => {const {title, // 标题contents, // 升级内容is_mandatory, // 是否强制更新url, // 安装包下载地址platform, // 安装包平台type // 安装包类型} = packageInfo;let isWGT = type === 'wgt'let isiOS = !isWGT ? platform.includes('iOS') : false;let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'return uni.showModal({title,content: contents,showCancel: !is_mandatory,confirmText,success: res => {if (res.cancel) return;// 安装包下载if (isiOS) {plus.runtime.openURL(url);return;}let waiting =  plus.nativeUI.showWaiting("正在下载 - 0%");  // uni.showLoading({// 	title: '安装包下载中'// });// wgt 和 安卓下载更新const downloadTask = uni.downloadFile({url,success: res => {if (res.statusCode !== 200) {console.error('下载安装包失败', err);return;}// 下载好直接安装,下次启动生效plus.runtime.install(res.tempFilePath, {force: false}, () => {uni.hideLoading()if (is_mandatory) {//更新完重启appplus.runtime.restart();return;}uni.showModal({title: '安装成功是否重启?',success: res => {if (res.confirm) {//更新完重启appplus.runtime.restart();}}});}, err => {uni.hideLoading()uni.showModal({title: '更新失败',content: err.message,showCancel: false});});},//接口调用结束complete: ()=>{uni.hideLoading();downloadTask.offProgressUpdate();//取消监听加载进度}});//监听下载进度downloadTask.onProgressUpdate(res => {// state.percent = res.progress;waiting.setTitle("正在下载 - "+res.progress+"%");// console.log('下载进度百分比:' + res.progress); // 下载进度百分比// console.log('已经下载的数据长度:' + res.totalBytesWritten); // 已经下载的数据长度,单位 Bytes// console.log('预期需要下载的数据总长度:' + res.totalBytesExpectedToWrite); // 预期需要下载的数据总长度,单位 Bytes});}});
}
  1. 用变量接收实现函数(在函数中使用上方封装的函数)并导出

fRequestWithToken为我封装的请求方法,可自行进行使用axios进行请求也行!!!

var fCheckVersion = (cb) => {// #ifdef APP-PLUSplus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {// console.log(widgetInfo.version)// console.log(plus.runtime.version)// console.log(widgetInfo.version)var nVerSta = compare(plus.runtime.version, widgetInfo.version),sLaststVer = plus.runtime.version;if (widgetInfo.version) {if (nVerSta == 1) {console.log(plus.runtime.version)sLaststVer = plus.runtime.version} else if (nVerSta == -1) {console.log(widgetInfo.version)sLaststVer = widgetInfo.version}}console.log(sLaststVer)//发送请求进行匹对,我这里数据库设定的是如果返回null则版本号一致,反之需要更新!!!fRequestWithToken({ajaxOpts: {url: URLS_COM.d_lastVer,data: {versionCode: sLaststVer}},showloading: false,silence:true}).then(data => {console.log(data)// console.log('################')if (data) {var sUrl = '',type = '';if (data.wgtName) {sUrl = data.wgtName;type = "wgt"} else {sUrl = data.pkgName;type = "pkg";}updateUseModal({title: data.title||"",contents: data.note||'',is_mandatory: true,url: sUrl,platform: 'android',type: type // 安装包类型})}}).catch((res)=>{cb&&cb()console.log(res)})})// #endif
}export {fCheckVersion
}

以上代码即可实现热更新的操作

使用

可在App.vue中进行使用,根据项目需求而定

1.引入封装好的函数

路径自己记得填写自己封装的位置

import{fCheckVersion} from '@/common/project/checkversion.js'

2.然后可以在onLoad函数中进行触发

onLoad() {fCheckVersion();//检查更新
}

这样就实现了热更新
然后的话只需要进行打包个热更新的包
在这里插入图片描述
后端进行上传至服务器进行更新数据
本地再进行一个云打包,记得在mainifest.json文件中进行版本号的修改,修改成低于热更新包的版本号即可

在这里插入图片描述
这样就ok了,实用✌!(别盗我文章😫)


http://chatgpt.dhexx.cn/article/BreA5J16.shtml

相关文章

Android热更新详解

一 前言介绍 正好最近又看到热更新&#xff0c;对以前Android 热修复核心原理&#xff1a;ClassLoader类加载机制做了点补充。 从16年开始开始&#xff0c;热修复技术开始在安卓界流行&#xff0c;它以classloader类加载机制为核心&#xff0c;可以不发布新版本就修复线上 bu…

热更新原理

对于热更新的问题就是了解两个点的问题&#xff1a; 如何加载补丁包&#xff0c;也就是如何加载dex 文件的过程&#xff08;dex是补丁包&#xff0c;更改的文件都在补丁包中&#xff09;修复后的类如何替换掉旧的类 通过这篇文章给大家介绍下我理解的热更新的逻辑&#xff0c…

Cocos Creator 3.x 热更新

前言&#xff1a;游戏做热更新 是基本需求&#xff1b; 好在 cocos-creator 已经为我们做好了方案&#xff0c;相对于 U3D 的热更新方案来说&#xff0c;使用起来很简便&#xff01;&#xff0c;不用关注很多细节 本文使用的是 cocos-creator 3.5.2 版本 官方文档 &#xff1…

热更新原理及实践注意

首先要说明几个概念&#xff0c;不要混用&#xff0c;热部署&#xff0c;热加载&#xff1b; 热部署&#xff1a;就是已经运行了项目,更改之后,不需要重新tomcat,但是会清空内存,重新打包,重新解压war包运行&#xff0c;可能好处是一个tomcat多个项目,不必因为tomcat停止而停止…

热更新你都知道哪些?

热更新系列目录 热更新你都知道哪些&#xff1f;热更新Sophix的爬坑之路腾讯热更新Tinker的故事阿里热更新Sophix的故事 Android热更新 前言1. 什么是热更新&#xff1f;2. 主流热更新方案3. 腾讯系热更新4. 阿里系热更新总结 博客创建时间&#xff1a;2020.05.16 博客更新时间…

热更新技术简易原理及技术推荐

为了照顾萌新童鞋&#xff0c;最开始还是对热更新的概念做一个通俗易懂的介绍。 热更新用通俗的讲就是软件不通过应用商店的软件版本更新审核&#xff0c;直接通过应用自行下载的软件数据更新的行为。在用户下载安装App之后&#xff0c;打开App时遇到的即时更新&#xff0c;是…

热更新及其原理

热更新&#xff1a;是app常用的更新方式&#xff0c;只需下载安装更新部分的代码 工作原理&#xff1a;动态下开发代码&#xff0c;使开发者在不发布新版本的情况下修复bug和发布功能&#xff0c;绕开苹果审核机制&#xff0c;避免长时间的审核以及多次被拒绝造成的成本。 优…

HTML/CSS实现小米官网搜索框效果

效果图&#xff1a; 需求分析&#xff1a; 1、输入框焦点事件 onfocus:成为焦点, 点击输入框的时候&#xff0c;出现闪烁光标&#xff0c;此时可以输入内容。 onblur :失去焦点, 点击页面空白区域&#xff0c;光标消失。此时不可以输入内容。 2、获取元素 3、注册事件 2.1…

html中的搜索代码,Web自动化(3):网页自动搜索功能

unsplash.jpg 写在前面 如果我们需要在期刊中搜索我们想要找的文章,那么我们如何才能达到这个目的。我们首先看一下,手动和自动对比图: 网页搜索.png 其实内容全部一样,我们只是用自动化程序,来代替我们手动操作。 1. 创建webdriver驱动对象,驱动打开网页 # 导入包 from …

java搜索代码_Java实现搜索功能代码详解

首先&#xff0c;我们要清楚搜索框中根据关键字进行条件搜索发送的是get请求&#xff0c;并且是向当前页面发送get请求 //示例代码 请求路径为当前页面路径 "/product" 当我们要实现多条件搜索功能时&#xff0c;可以将搜索条件封装为一个map集合&#xff0c;再根据m…

干货!最全优秀搜索框设计案例(含代码链接)

面对纷繁复杂的网页内容&#xff0c;用户通过查询关键词表达需求&#xff0c;期望在响应的查询结果中快速获取准确的信息和流畅的用户体验。用户与网络世界的万千联系都是从搜索开始的。搜索框之于用户就像是用户与应用或网站之间的对话窗口。小小的搜索框传递着用户与网站、应…

php网页制作中搜索框的代码,在网页里嵌入百度搜索框功能

今天发现某个网站是直接使用百度搜索作为自己网站的搜索功能的&#xff0c;感觉这个挺好玩的&#xff0c;不需要去研究复杂的搜索算法而又直接使用了百度搜索这个强大的搜索引擎为自己撑腰。无论对自己还是对用户来说都是相当不错的选择&#xff0c;下面作者将要和大家分享一下…

利用CSS写精美搜索框

利用html写搜索样式框 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>8款纯CSS3搜索框</title&g…

JavaScript实现智能搜索框

应用场景&#xff1a; 1. 搜索框在页面中占据的空间过小&#xff0c;希望无论浏览到什么位置&#xff0c;可以轻易地回到并聚焦搜索框。 2. 搜索框里面的文字大小过小&#xff0c;希望能够在上方开辟一块空间放大内容 解决思路&#xff1a; 1. 对整个页面添加键盘事件keyup…

html中搜索栏怎么写,html搜索框怎么做

很多:从记忆角度讲运用(谐音记忆法,联想法) 平常来说呢,可分为(死记硬背发,音标记忆法) 另外:自己创造 总结【谐音记忆法,死记硬背发,音标记忆法】 html/css如何写出如下搜索框效果&#xff0c;请给出代码 html制作一个搜索框&#xff0c;代码是什么&#xff1f; 打开Hbuilder编…

搜索导航HTML,CSS 带搜索导航栏的示例代码

本文为大家介绍如何使用 CSS 创建一个带搜索的导航栏。 以下实例均是响应式的。 可以先看下效果图: 创建一个搜索栏 主页 关于 联系我们 /* 在顶部导航栏中添加黑色背景颜色 */ .topnav {overflow: hidden; background-color: #e9e9e9; } /* 设置导航栏的链接样式 */ .topnav …

淘宝网搜索框源代码

搜索框代码&#xff1a; <script typetext/javascript> alimama_pidmm_11487878_0_0; alimama_typeg; alimama_tks{}; alimama_tks.style_i1; alimama_tks.lg_i1; alimama_tks.w_i350; alimama_tks.h_i69; alimama_tks.btn_i1; alimama_tks.txt_s; alimama_tks.hot_i1; a…

百度搜索框代码,实现回车点击,跳转到新页面,简单

参考网站&#xff1a;https://110.nanshiw.com/ 上图为实现效果 代码如下&#xff1a; <script> function butClick() {var val document.getElementById("search_key").value;if(val.length 0){alert(搜索为空&#xff0c;请输入内容);return false;}else…

智能搜索框html代码,js实现搜索框关键字智能匹配代码

只要使用搜索引擎的朋友应该都有这样的体会&#xff0c;就是当在搜索框输入关键字的时候&#xff0c;会出现自能匹配现象&#xff0c;这绝对是非常好的用户体验&#xff0c;下面就是一段类似的代码&#xff0c;当然这里只是掩饰&#xff0c;所以只能匹配的数据都是本地固定好的…

html5搜索框在最右侧,html5搜索框特效点击搜索框弹出分类搜索框代码

特效描述:html5搜索框特效 点击搜索框弹出 分类搜索框。点击搜索框弹出分类搜索框代码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 Search People Sara Soueidan Rachel Smith Peter Finlan Patrick Cox