• uni-app打包apk实现自动更新


    一、直接复制粘贴就可用(豪横)

    app.vue文件里写

    //app.vue里写
    <script>
    	export default {
    		onShow: function() {
    			console.log('App Show')
    		},
    		onHide: function() {
    			console.log('App Hide')
    		},
    		onLaunch: function() {
    			let appVersion = ''
    			uni.getSystemInfo({
    				success: function(e) {
    					appVersion = e.platform
    				}
    			})
    			let that = this;
    			uni.request({
    				url: 'http://xxx.xxx.xxx:3000/xxx/xxx', //获取版本号接口。
    				method: "POST",
    				header: {
    					'custom-header': 'application/json;' //自定义请求头信息
    				},
    				success: (res) => {
    					const arr1 = uni.getSystemInfoSync().appVersion.split('.');
    					const arr2 = res.data.split('.')
    					if (parseInt(arr2[2]) > parseInt(arr1[2])) {
    						uni.showModal({
    							title: "版本更新",
    							content: '检测到有新版本,是否更新', //更新描述
    							confirmText: '立即更新',
    							cancelText: '稍后进行',
    							success: (r) => {
    								if (r.confirm) {
    									//如果是安卓直接更新下载
    									if (appVersion === 'android') {
    										uni.showLoading({
    											title: '正在下载,请稍后'
    										})
    										uni.downloadFile({
    											// 存放最新安装包的地址
    											url: 'http://xxx.xxx.xxx:3000/apk/xxx/xxx.apk',
    											success: (downloadResult) => {
    												uni.hideLoading();
    												if (downloadResult.statusCode ===200) {
    													uni.hideLoading();
    													plus.runtime.install(
    														downloadResult
    														.tempFilePath, {
    															force: false
    														},
    														function() {
    															console.log(
    																'install success...'
    																);
    															plus.runtime
    																.restart();
    														},
    														function(e) {
    															uni.hideLoading();
    															console.error(
    																'install fail...'
    																);
    														});
    												}
    											}
    										});
    										//如果是ios跳转到app store
    									} else {
    										//在App Store Connect中的App Store下的app信息,可找到appleId
    										let appleId = plus.runtime.appid
    										plus.runtime.launchApplication({
    											action: `itms-apps://itunes.apple.com/cn/app/id${appleId}?mt=8`
    										}, function(e) {
    											uni.showToast({
    												title: '打开应用商店失败'
    											})
    											console.log(
    												'打开应用商店失败: ' +
    												e.message);
    										});
    									}
    								} else if (res.cancel) {
    									console.log('用户点击取消');
    								}
    							}
    						})
    					}
    
    				},
    
    			});
    		},
    	}
    </script>
    
    <style>
    	/*每个页面公共css */
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99

    二、详解(复制粘贴行不通呢,就详细看看每行的注释,相信我,花费三分钟时间,比你点开一堆链接去一步一步排查好。嘿嘿!除非你想摸鱼)

    <script>
    	export default {
    		onLaunch: function() {
    			let appVersion = ''
    			uni.getSystemInfo({   //获取当前的apk是安卓还是ios,
    				success: function(e) {
    					appVersion = e.platform    // console打印的值为android
    				}
    			})
    			let that = this;
    			uni.request({
    				url: 'http://xxx.xxx.xxx:3000/xxx/xxx', //获取版本号接口。
    				method: "POST",
    				header: {
    					'custom-header': 'application/json;' //自定义请求头信息
    				},
    				success: (res) => {
    				    //uni.getSystemInfoSync()返回的是apk包信息,uni自带,可自行打印查看.
    					const arr1 = uni.getSystemInfoSync().appVersion.split('.');
    					//arr2接口返回的版本信息(1.0.0),处理一下成数组。
    					const arr2 = res.data.split('.')
    					console.log(uni.getSystemInfoSync(), '这是uni.getSystemInfoSync()')
    					console.log(arr1, '这是arr1')
    					console.log(arr2, "这是arr2arr2")
    					//parseInt(arr2[2]) > parseInt(arr1[2])我自己想偷懒,只校验最后一位版本号的大小,你要是想非常规矩校验版本号呢,就自己写写js逻辑,先判断第一位,在判断第二位,在判断第三位
    					if (parseInt(arr2[2]) > parseInt(arr1[2])) {
    						uni.showModal({
    							title: "版本更新",
    							content: '检测到有新版本,是否更新', //更新描述
    							confirmText: '立即更新',
    							cancelText: '稍后进行',
    							success: (r) => {
    								if (r.confirm) {
    									//如果是安卓直接更新下载
    									if (appVersion === 'android') {
    										uni.showLoading({
    											title: '正在下载,请稍后'
    										})
    										//这块用downloadFile下载最新的apk包,
    										uni.downloadFile({
    											// 存放最新安装包的地址
    											url: 'http://xxx.xxx.xxx:3000/apk/xxx/xxx.apk',
    											success: (downloadResult) => {
    												uni.hideLoading();
    												if (downloadResult.statusCode ===200) {
    													uni.hideLoading();
    													//plus.runtime.install这个是啥东西,别问,问了我也不知道,而且运行到浏览器还报错,那就对了,直接打包到真机上,相信自己没问题
    													plus.runtime.install(
    														downloadResult
    														.tempFilePath, {
    															force: false
    														},
    														function() {
    															console.log(
    																'install success...'
    																);
    															plus.runtime
    																.restart();
    														},
    														function(e) {
    															uni.hideLoading();
    															console.error(
    																'install fail...'
    																);
    														});
    												}
    											}
    										});
    										//如果是ios跳转到app store
    									} else {
    										//在App Store Connect中的App Store下的app信息,可找到appleId
    										//这块ios更新,我还是不知道,因为我们只做安卓的,究竟管不管用,自己试试吧
    										let appleId = plus.runtime.appid
    										plus.runtime.launchApplication({
    											action: `itms-apps://itunes.apple.com/cn/app/id${appleId}?mt=8`
    										}, function(e) {
    											uni.showToast({
    												title: '打开应用商店失败'
    											})
    											console.log(
    												'打开应用商店失败: ' +
    												e.message);
    										});
    									}
    								} else if (res.cancel) {
    									console.log('用户点击取消');
    								}
    							}
    						})
    					}
    
    				},
    
    			});
    		},
    	}
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97

    在这里插入图片描述

    在这里插入图片描述

    疑问或者更好的实现方案可以评论一起探讨

  • 相关阅读:
    c:预处理指令(#include、#define、#if等)
    NVRadar:一种实时的雷达障碍检测和占位栅格预测方法
    神经网络中的优化方法
    ‘iostream‘ file not foundclang(pp_file_not_found)
    计算机网络的发展
    throw抛出异常后的代码执行情况
    阿里面试经验总结整理2——机器学习算法工程师
    hadoop 编写开启关闭集群脚本, hadoop hdfs,yarn开启关闭脚本。傻瓜式hadoop脚本 hadoop(九)
    SpringBoot整合RestHighLevelClient实现索引操作以及文档操作
    关于go和rust语言的对比
  • 原文地址:https://blog.csdn.net/wangjiecsdn/article/details/134039836