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

插件地址: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>

 

uniapp app开发热更新可以通过以下步骤实现: 1. 在uni-app项目的根目录下创建一个名为`update`的文件夹,用于存放热更新的资源文件。 2. 在`update`文件夹中创建一个名为`manifest.json`的文件,用于记录热更新的版本信息和资源文件列表。示例内容如下: ```json { "version": "1.0.0", "packages": [ { "path": "update.zip", "md5": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" } ] } ``` 其中,`version`表示当前热更新的版本号,`packages`数组中的每个对象表示一个资源包,`path`表示资源包的路径,`md5`表示资源包的MD5值。 3. 将需要热更新的资源文件打包成一个zip文件,命名为`update.zip`,并放置在`update`文件夹中。 4. 在uni-app项目的`main.js`文件中添加热更新的代码。示例代码如下: ```javascript import { checkUpdate, downloadUpdate, applyUpdate } from 'uni-updater'; // 检查是否有新版本 checkUpdate({ url: 'http://example.com/update/manifest.json', // 热更新资源的manifest.json文件的URL success: (res) => { if (res.hasUpdate) { // 下载新版本资源 downloadUpdate({ url: 'http://example.com/update/update.zip', // 热更新资源的zip文件的URL success: (res) => { // 应用新版本资源 applyUpdate({ success: () => { // 热更新成功 }, fail: (err) => { // 热更新失败 } }); }, fail: (err) => { // 下载资源失败 } }); } }, fail: (err) => { // 检查更新失败 } }); ``` 以上代码中,`checkUpdate`函数用于检查是否有新版本的热更新资源,`downloadUpdate`函数用于下载新版本的热更新资源,`applyUpdate`函数用于应用新版本的热更新资源。 请注意,以上代码中的URL需要替换为实际的热更新资源的URL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值