uniapp开发的APP升级、整包更新和热更新组件

news2024/11/25 1:23:30

插件地址:app升级、整包更新和热更新组件

  • 仔细阅读说明文档,后台接口返回的数据格式要严格按照文档要求的格式返回,
  • 前端示例代码 或者根据实际业务修改 如果需要自动检测新版本,建议写在App.vue的onShow中,
  • <script>
    	import silenceUpdate from '@/uni_modules/rt-uni-update/js_sdk/silence-update.js' //引入静默更新!!!!!!!!!!!!!!!!!!
    	
    	export default {
    		globalData: {
    			
    		},
    		onLaunch: function() {
    			
    		},
    		onShow: function() {
    			console.log('App Show')
    			let that=this
    			console.log('检测更新接口',that.globalData.jsonPath+'mobile/MobileAdminController/checkupdate')
    			
    			//#ifdef APP-PLUS 
    			// 获取本地应用资源版本号
    			plus.runtime.getProperty(plus.runtime.appid, (inf) => {
    				console.log("检测更新接口传参:")
    				console.log("edition_type:", plus.runtime.appid)
    				console.log("version_type: ",uni.getSystemInfoSync().platform)
    				console.log("edition_number: ",inf.versionCode)
    				//获取服务器的版本号
    				uni.request({
    					url: that.globalData.jsonPath+'mobile/MobileAdminController/checkupdate', //更新示例接口
    					data: {
    						edition_type: plus.runtime.appid,
    						version_type: uni.getSystemInfoSync().platform, //android或者ios
    						edition_number: inf.versionCode // 打包时manifest设置的版本号 
    					},
    					success: (res) => {
    						console.log("57检测更新返回res:",res)
    						//res.data.xxx根据后台返回的数据决定(我这里后端返回的是data),所以是res.data.data 
    						//判断后台返回版本号是否大于当前应用版本号 && 是否发行 (上架应用市场时一定不能弹出更新提示)
    						if (Number(res.data.data.edition_number) > Number(inf.versionCode) && res
    							.data.data.edition_issue == 1) {
    				
    							//如果是wgt升级,并且是静默更新 (注意!!! 如果是手动检查新版本,就不用判断静默更新,请直接跳转更新页,不然点击检查新版本后会没反应)
    							if (res.data.data.package_type == 1 && res.data.data.edition_silence == 1) {
    				
    								//调用静默更新方法 传入下载地址
    								silenceUpdate(res.data.data.edition_url)
    				
    							} else {
    								//跳转更新页面 (注意!!!如果pages.json第一页的代码里有一打开就跳转其他页面的操作,下面这行代码最好写在setTimeout里面设置延时3到5秒再执行)
    								uni.navigateTo({
    									url: '/uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update?obj=' +
    										JSON.stringify(res.data.data)
    								});
    							}
    						} else {
    				
    							// 如果是手动检查新版本 需开启以下注释
    							//  uni.showModal({
    							// 	title: '提示',
    							// 	content: '已是最新版本',
    							// 	showCancel: false
    							// }) 
    						}
    					}
    				
    				})
    				
    			});
    				
    			//#endif  
    		},
    		onHide: function() {
    			console.log('App Hide')
    		}
    	
    	}
    </script>
    
    <style lang="scss">
    	
    </style>
    

 

在某个菜单加一个版本升级页面,

 

<template>
	<view class="container">
		<view class="content">
			<view class="box1">
				<image src="../../static/logo.png" class="img-logo"></image>
				<view class="h-name">{{appName}}</view>
				<view class="h-banben">版本号:{{appVersion}}</view>
			</view>
			<view class="box2">
				<view class="n-one" @click="jiancegengxin">
					<text class="n-one-text">检查新版本</text>
					<text class="iconfont icon-you"></text>
				</view>
				
			</view>
			
			
		</view>
		<view class="foot">
			<!--引入再main.js页面引入的全局的自定义底部组件-->
			<!--<footixinxi></footixinxi>-->
		</view>
	</view>
</template>

<script>
	import silenceUpdate from '@/uni_modules/rt-uni-update/js_sdk/silence-update.js' //引入静默更新 https://ext.dcloud.net.cn/plugin?id=7286
	
	export default {
		data() {
			return {
				appVersion:"",//版本号
				appName:"",//应用名称
				
			}
		},
		methods: {
			//检测版本更新方法
			jiancegengxin(){
				let that=this
				console.log('57检测更新接口',getApp().globalData.jsonPath+'mobile/MobileAdminController/checkupdate')
				
				//#ifdef APP-PLUS 
				
				// 获取本地应用资源版本号
				plus.runtime.getProperty(plus.runtime.appid, (inf) => {
					//获取服务器的版本号
					//if(uni.getSystemInfoSync().platform=='android'){
						//console.log("是Android系统的")
					
						uni.request({
							url: getApp().globalData.jsonPath+'mobile/MobileAdminController/checkupdate', //示例接口
							data: {
								edition_type: plus.runtime.appid,
								version_type: uni.getSystemInfoSync().platform, //android或者ios
								edition_number: inf.versionCode // 打包时manifest设置的版本号 
							},
							success: (res) => {
								console.log("57检测更新返回res:",res)
								//res.data.xxx根据后台返回的数据决定(我这里后端返回的是data),所以是res.data.data 
								//判断后台返回版本号是否大于当前应用版本号 && 是否发行 (上架应用市场时一定不能弹出更新提示)
								if (Number(res.data.data.edition_number) > Number(inf.versionCode) && res
									.data.data.edition_issue == 1) {
						
									//如果是wgt升级,并且是静默更新 (注意!!! 如果是手动检查新版本,就不用判断静默更新,请直接跳转更新页,不然点击检查新版本后会没反应)
									if (res.data.data.package_type == 1 && res.data.data.edition_silence == 1) {
						
										//调用静默更新方法 传入下载地址
										silenceUpdate(res.data.data.edition_url)
						
									} else {
										//跳转更新页面 (注意!!!如果pages.json第一页的代码里有一打开就跳转其他页面的操作,下面这行代码最好写在setTimeout里面设置延时3到5秒再执行)
										uni.navigateTo({
											url: '/uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update?obj=' +
												JSON.stringify(res.data.data)
										});
									}
								} else {
						
									// 如果是手动检查新版本 需开启以下注释
									 uni.showModal({
										title: '提示',
										content: '已是最新版本',
										showCancel: false
									}) 
								}
							}
						
						})
					
					// }else{
					// 	console.log("是IOS系统的")
						
					// }
					
					
				});
					
				//#endif  
			}
		},
		
		onLoad() {
			// #ifdef APP-PLUS
				 plus.screen.lockOrientation('portrait-primary'); 
			// #endif
			let that=this
			//获取设备信息
			uni.getSystemInfo({
				success: (res) => {
					console.log("获取设备信息826:",res)
					console.log(res.platform);
					console.log("版本号:",res.appVersion)
					console.log(res.appVersionCode)
					that.appVersion=res.appVersion
					that.appName=res.appName
					//检测当前平台,如果是安卓则启动安卓更新  
					// if (res.platform == "android") {
					// 	//this.AndroidCheckUpdate();
					// }
				}
			})
			
		},
		onUnload() {
			// #ifdef APP-PLUS
				  plus.screen.lockOrientation('portrait-primary'); 
			// #endif
		},
		onShow(){
			
		}
	}
</script>

<style>
.box1{
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
}
.img-logo{
	border-radius: 5px;
	width: 60px;
	height: 60px;
	margin: 30px 0 20px;
}
.h-name{
	font-size: 18px;
	font-weight: bold;
}
.h-banben{
	font-size: 12px;
	
}
.box2{
	padding: 30px 20px;
	font-size: 14px;
}
.n-one{
	display: flex;
	align-items: center;
	justify-content: space-between;
	border-bottom: 1px solid #f5f5f5;
	padding: 10px 5px;
}
.n-one .iconfont{
	color: #999;
}

</style>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

化繁为简——论五大市场风格

A股市场至今已有逾5000家上市公司&#xff0c;行业分析有助于化简选股过程&#xff0c;然而如果想要对于各个行业都获得高于平均水平的了解&#xff0c;行业分类体系又显得繁杂。以中信行业分类体系为例&#xff0c;其一级行业包括30个行业类别&#xff0c;二级行业包括109个行…

高效工作——PPT动画制作【图文板(1)】

今天&#xff0c;我来教大家如何制作PPT或PPTX动画。希望这对你能有所帮助。{提示&#xff1a;改变原文&#xff1a;查看本人的“高效工作——PPT动画制作【文字板&#xff08;1&#xff09;】”} 首先&#xff0c;打开WPS office&#xff0c;点击创建PPT&#xff0c;点击创建空…

安全头响应头(二)​X-Frame-Options​

一 X-Frame-Options 1) CSP 安全头与前端编程息息相关,后续通过对CSP头的理解加深对前端知识的理解 ① 点击劫持 说明&#xff1a;X-FRAME-OPTIONS是微软提出的一个http头,专门用来防御利用iframe嵌套的点击劫持攻击 相关参考 ② 简介 背景&#xff1a; 出于安全考虑…

5.8.8 TCP流量控制

5.8.8 TCP流量控制 计算机网络的流量控制实际上是调节发送方的速率使得接收方能够及时处理的一个过程。 在TCP中采用的是大小可变的滑动窗口的方式进行流量控制&#xff0c;窗口大小的单位是字节。 如图 根据接收方的接收能力&#xff0c;通过接收窗口rwnd可以实现一个端到端…

PMO对企业的价值:有效赋能+战略落地︱富途网络PMO总监苗秀娟

富途网络科技&#xff08;深圳&#xff09;有限公司PMO总监苗秀娟女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;PMO对企业的价值&#xff1a;有效赋能战略落地。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议…

【LeetCode】332. 重新安排行程

332. 重新安排行程&#xff08;困难&#xff09; 思路 由于题目保证了存在一条合法的旅行路线&#xff0c;并要求按照字典序返回完整的路线。该方法通过深度优先搜索和栈的结合&#xff0c;可以保证每次选择字典序最小的终点进行访问&#xff0c;从而得到按照字典序排列的完整旅…

【Pandas】dataframe互转

目录 一、list 1.1 dataframe转list 1.2 list转dataframe 1.2.1 先用list构造字典&#xff0c;再转dataframe 1.2.2 对于符合列表&#xff0c;可以直接转成dataframe 二、dict 三、spark dataframe 一、list 【Pandas学习】list列表和Dataframe互相转换_list转datafram…

【算法】十大排序算法以及具体用例算法题

文章目录 1:冒泡排序2:选择排序3:插入排序4:希尔排序5:堆排序6:计数排序7:基数排序8:快速排序9:归并排序10:桶排序 源代码下载 1:冒泡排序 /** 冒泡排序是内部排序* 冒泡排序将会每一次都从头开始遍历* 每一次遍历都会把最大的数据放到最后一个* 因此每一次都可以少遍历一个元…

qt creator常用快捷键

F1 弹出选择类的qt帮助文档 F2进入光标所在代码的定义/声明 F4 在同名.cpp和.h文件中切换 altshiftr 在设计师界面,可以预览当前UI ctrlr编译运行当前工程&#xff0c;同界面的播放键ctrlb构建编译当前工程 ctrli 自动对齐代码,要选中才有效 ctrlshiftf 弹出全局查找框 …

2023最全网络安全工程师面试题(附答案)

2023年过去了一大半&#xff0c;先来灵魂三连问&#xff0c;年初定的目标完成多少了&#xff1f;薪资涨了吗&#xff1f;女朋友找到了吗&#xff1f; 一、网络安全岗面试题1. 什么是 DDoS 攻击&#xff1f;如何防范&#xff1f; 答&#xff1a;DDoS 攻击是指利用大量的计算机或…

servlet-filter(过滤器)

1.filter简述 1.1过滤器概念 Filter也称之为过滤器&#xff0c;它是Servlet技术中最实用的技术&#xff0c; 作用1是对访问web服务器请求进行拦截&#xff0c;过滤了&#xff0c;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截&#xff0c;从而实现一些特殊的功能。…

kaggle金融量化竞赛top方案汇总

看了一下今年的研究生项目&#xff0c;金融量化果然还是烫门&#xff0c;录取分数线越来越高&#xff0c;申请人数依然居高不下&#xff0c;这么多人拼命卷... 目前来看&#xff0c;只卷学历&#xff0c;理论知识肯定是不够的&#xff0c;还得要实战背景&#xff0c;对于学生来…

Netty解决粘包半包问题自定义协议

目录 一、粘包 & 半包 1、现象分析 粘包 半包 二、解决方案 1、短连接 2、定长解码器 3、分隔符 4、长度字段解码器 三、协议设计与解析 1、HTTP 2、自定义协议 自定义协议要素 Sharable 一、粘包 & 半包 1、现象分析 因为tcp是用二进制流进行传输的&a…

性能测试-性能调优(提高系统吞吐量QPS/TPS)一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、系统吞度量要素…

CyclicBarrier 源码

CyclicBarrier 源码 1.构造方法 参数 n 为等待的线程数 CyclicBarrier cyclicBarrier new CyclicBarrier(n);public CyclicBarrier(int parties) {this(parties, null);}参数 barrierAction 为当等待的线程达到 参数 parties 时执行的线程任务 blic CyclicBarrier(int par…

RCE漏洞利用挖掘方法

RCE漏洞利用挖掘方法 一、从命令执行漏洞到getshell二、命令执行漏洞详解2.1、靶场实操—DVWA&#xff08;Low级别&#xff09;2.2、靶场实操—DVWA&#xff08;Medium级别&#xff09;2.3、靶场实操—DVWA&#xff08;High级别&#xff09;2.4、靶场实操—DVWA&#xff08;Imp…

form表单使用Select 选择器

案例: ps&#xff1a;年度的值类型要与select 选择器中 value 类型一致&#xff01;&#xff01; 如果input框中显示的是数字&#xff0c;说明年度的值没有与选择器中的的value一致&#xff01;&#xff01;&#xff01; YearNum 要与 value 类型一致&#xff01;&#xff01…

【第三章 flutter学习之Dart基础(上)】

文章目录 一、入口方法的定义方式二、Dart变量和常量三、Dart常用数据类型四、Dart运算符与类型转换及循环语句五、自定义方法六、Dart静态成员、操作符、类的继承七、接口八、接口分离写法九、一个类实现多个接口 一、入口方法的定义方式 main(){print(hello world) } //下边…

Docker学习笔记24

Docker Swarm 搭建&#xff1a; 主机名系统版本IP地址功能swarm-1centos7.9192.168.17.10管理节点swarm-2centos7.9192.168.17.20工作节点swarm-3centos7.9192.168.17.30工作节点 CPU、Memory、Disk不做要求。 准备IP地址和主机名&#xff1a; hostnamectl set-hostname swa…

测试不容易,入坑请注意!

“零基础入门&#xff0c;保证就业&#xff0c;钱多&#xff0c;事少&#xff01;” 绝大部分培训机构的招生话术不外乎如此&#xff0c;骗了一波又一波钱多人傻的人入坑测试。而在报名前&#xff0c;会进行考试评估学员是否适合从业软件测试的机构很难见到。如果有&#xff0…