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

news2024/10/7 12:24:28

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

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>

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

<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>

在这里插入图片描述

在这里插入图片描述

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

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

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

相关文章

阿里云RocketMQ版查看消息队列的客户端

通过group查看连接mq的主机 消息队列 RocketMQ 版/实例列表/Group 管理/Group 详情/运行信息

chatgpt论文润色 降重

用chatgpt最好要给他范例。chatgpt降重原理&#xff1a; https://www.bilibili.com/video/BV1Eh411M7Ug/?spm_id_from333.337.search-card.all.click&vd_sourceebc47f36e62b223817b8e0edff181613 一. 中文论文翻译成英文 1.1 直接翻译 你是一位广义零样本学习的专家&a…

谷歌Bard更新!会有哪些体验升级?

今年2月&#xff0c;谷歌的对话机器人Bard在发布会上翻车&#xff0c;遭到了科技圈的群嘲。如今半年过去了&#xff0c;Bard卷土重来&#xff0c;在9月发布了它的重磅更新“扩展插件”&#xff0c;集成了Gmail、Google Docs、Youtube 、Google Drive、Google Maps、Google Flig…

【算法练习Day29】柠檬水找零根据身高重建队列用最少数量的箭引爆气球

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 柠檬水找零根据身高重建队列…

2.8每日一题(定积分比较大小)

在对称区间上的定积分比较大小&#xff0c;首先考虑积偶性&#xff1a;对称区间上被积函数如果是奇函数&#xff0c;则定积分值为0&#xff0c;如果被积函数为偶函数&#xff0c;则定积分值为2倍一般区间的定积分。

通付盾APP尽职调查报告深度解析

引言&#xff1a; ​移动应用程序已经成为了现代生活的重要组成部分&#xff0c;我们几乎每天都在使用各种不同类型的应用来满足我们的需求&#xff0c;无论是社交、购物、娱乐还是工作。然而&#xff0c;随着移动应用的广泛使用&#xff0c;APP及供应链安全问题也引起了越来越…

第十六章总结:反射和注解

.1.1&#xff1a;访问构造方法 反射&#xff1a; 1.class类 2.获取构造方法 3.获取成员属性 4.获取成员方法 注解 1.内置注解 2.反射注解 3 创建Class对象的三种方式 1.使用getClass&#xff08;&#xff09;方法 object str new object&#xff08;&#xff09;…

CVE-2021-41773/42013 apache路径穿越漏洞

影响范围 CVE-2021-41773 Apache HTTP server 2.4.49 CVE-2021-42013 Apache HTTP server 2.4.49/2.4.50 漏洞原理 Apache HTTP Server 2.4.49版本使用的ap_normalize_path函数在对路径参数进行规范化时会先进行url解码&#xff0c;然后判断是否存在…/的路径穿越符&#xf…

Python语言:字典的使用

字典是一种存储无序的可以修改内容的的容器。 字典的具体含义&#xff1a; 现实生活中的字典是通过检索到一个字从而找到它所对应的的含义&#xff0c;字和字的含义是互相对应的&#xff0c;python世界里的字典和这个字典的用法类似&#xff0c;字典是由kye和相对应的value构成…

Stable Diffusion 图生图+ControlNet list index out of range

在webui1.5中用图生图ControlNet批量处理图片的时候报错&#xff1a; controlnet indexError: list index out of range 解决方法&#xff1a; 在controlNet的设置页中勾选不输出检测图即可。 参考&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui/issu…

jdk1.8批量完成部署

第一步&#xff1a;源主机配置 在源主机上面上传jdk的文件包 获取jdk1.8https://download.csdn.net/download/weixin_44680802/88467044 添加java环境变量配置 export JAVA_HOME/usr/local/java/jdk1.8.0_65 export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOM…

今年暑假不AC(贪心思路)

这道题是一道贪心算法的经典问题&#xff08;活动选择问题&#xff09; 先说用到的贪心结论&#xff1a;最先结束的活动一定是最优解的一部分 证明过程如下&#xff1a; 假设a是所有活动中最先结束的活动&#xff0c;b是最优解中最先结束的活动 如果ab 则结论成立 如果a!b 则b…

拓扑排序代码模板

一些注意的点都在代码注释中了。 //有向图无环图中才有拓扑排序&#xff0c;且都是前面的编号的点指向后面编号的点 #include<iostream> #include<cstring> using namespace std; const int N 1e5 9; int e[N], ne[N], h[N], idx, n, m, d[N], q[N];void add(in…

Linux多线程【生产者消费者模型】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 腾讯云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、生产者消费者模型1.1、什么是生产者消费者模型&#xff1f;1.2、生产者消费…

MySQL 连接出现 Authentication plugin ‘caching_sha2_password的处理方法(使用第二种)

出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 1. 升级MySQL版本 较早的MySQL版本可能不…

澳大利亚专线现在成熟吗?

在全球化的大背景下&#xff0c;物流运输的重要性日益凸显。其中&#xff0c;澳大利亚专线作为一条连接中国与澳大利亚的物流通道&#xff0c;近年来引起了广泛的关注。那么&#xff0c;这样的物流专线在当前环境下是否已经成熟呢?我们将在接下来的文字中一一进行探讨。 首先&…

11.读取文件长度-fseek和ftell函数的使用

文章目录 简介1. 写入测试文件2. 读取文件长度 简介 主要讲使用fopen读取文件&#xff0c;配合使用fseek和ftell来读取文件长度。1. 写入测试文件 执行下方程序&#xff0c;使用fwrite函数写入40字节的数据&#xff0c;使其形成文件存入本地目录。#define _CRT_SECURE_NO_WARNI…

代码审计及示例

简介&#xff1a; 代码安全测试是从安全的角度对代码进行的安全测试评估。 结合丰富的安全知识、编程经验、测试技术&#xff0c;利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷&#xff0c;在代码形成软件产品前将业务软件的安全风险降到最低。 方法&#x…

【蓝桥每日一题]-贪心(保姆级教程 篇2)#纪念品分组 #gcd排序

目录 题目&#xff1a;纪念品分组 思路&#xff1a; 题目&#xff1a;gcd排序 思路&#xff1a; 题目&#xff1a;纪念品分组 思路&#xff1a; 贪心思路&#xff1a;先将数据从小到大排序&#xff08;默认&#xff09;&#xff0c;然后让最左边l和最右边r匹配&#xff0c;…

【QT】点击按钮弹出对话框的注意实现

在stack区创建对话框对象 模态对话框&#xff0c;不可以对其他窗口进行操作。 模态窗口用dlg.exec()显示窗口。 问题代码1: MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);//点击新建按钮&#xff0c;弹出一…