uniapp实现局域网(内网)中APP自动检测版本,弹窗提醒升级

news2025/2/23 14:07:27

uniapp实现局域网(内网)中APP自动检测版本,弹窗提醒升级

在开发MES系统的过程中,涉及到了平板端APP的开发,既然是移动端的应用,那么肯定需要APP版本的自动更新功能。

查阅相关资料后,在uniapp的官方文档中发现官方已经提供了基于云端的uniCloud云函数进行实现。主要是使用uni-upgrade-center - Adminuni-upgrade-center - App进行配置与更新,使用该方法比较简便,不需要考虑太多的问题,并且有免费空间,个人体验应该没啥问题。但是如果是在内网情况下,则需要使用本文接下来提到的方案,根据后端进行调配。

如果需要使用云函数进行更新,在官方文档的基础上,推荐大家查看这一篇博客,博主写的非常细致

传送门=>:https://blog.csdn.net/QQ727338622/article/details/130612591

一、实现思路

1、判断云端版本是否更新

通过接口获取线上最新版本号(默认规定版本号为正整数)与本地APP版本号进行比较大小,当线上最新版本号大于本地版本号就需要更新。本地App版本可在每次发版时候在manifest.json-基础配置-应用版本号进行设置

2、弹窗提醒

弹窗提醒分为了强制更新提醒与正常更新提醒,强制更新弹窗后必须进行更新,适用于出现紧急bug需要修复的情况。正常更新用户可以选择不进行更新,老版本照常使用,弹窗可以进行关闭。

3、根据链接进行下载APK

点击立即更新按钮后,从云端获取的下载链接中下载新的安装包,进行下载。

4、下载后安装

下载后实现自动安装功能,可以实现打开安装页面,但是否无法强制用户安装,用户可以自己选择取消安装。

二、实现方法

1、后端接口实现获取应用版本

首先需要在后端服务中实现能够获取当前应用版本的接口,经过实现后我的接口返回内容如下,数据仅供参考:

result:{
    version: "string",//版本
    isforce: 0,//是否强制
    appname: "string",//应用名称
    downloadurl: "string",//下载链接
}

2、对比版本与更新模式

对比版本的逻辑主要用到了plus.runtime.getProperty方法,该方法功能为获取指定APPID对应的应用信息。

该功能的实现使用了较多的plus方法,可以参考下方的链接进行查看官方文档

https://www.html5plus.org/doc/zh_cn/runtime.html

1)方法说明

void plus.runtime.getProperty( appid, getPropertyCB );

参数:

  • appid:( String ) 必选 应用的Appid
  • getPropertyCB:(GetPropertyCallBack) 必选 获得应用信息成功回调函数

返回值:

void : 无

示例:

// 获取应用信息
function getAppInfo() {
	plus.runtime.getProperty( plus.runtime.appid, function ( wgtinfo ) {
		//appid属性
		var wgtStr = "appid:"+wgtinfo.appid;
		//version属性
		wgtStr += "<br/>version:"+wgtinfo.version;
		//name属性
		wgtStr += "<br/>name:"+wgtinfo.name;
		//description属性
		wgtStr += "<br/>description:"+wgtinfo.description;
		//author属性
		wgtStr += "<br/>author:"+wgtinfo.author;
		//email属性
		wgtStr += "<br/>email:"+wgtinfo.email;
		//features 属性
		wgtStr += "<br/>features:"+wgtinfo.features;
		console.log( wgtStr );
	} );

2)实现代码

plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
	curVersion = widgetInfo.version;
});

获取到当前应用的版本后,需要通过curVersion与后端获取的版本进行。

3、弹窗提醒并下载

弹窗前需要判断该版本是否紧急,根据紧急情况的区别弹窗也要进行区分。

uni.showModal({
	title: '版本更新',
	content: '尊敬的用户,我们为您准备了最新的版本更新,内含诸多新功能与用户体验优化。点击立即升级,享受更多精彩和便利。',
	confirmText: '立即更新',
	cancelText: '取消',//如果是紧急情况需要将取消按钮关闭
	howCancel: false,
	success: function(res) {
		if (res.confirm) {
			downLoadApp(obj.downloadUrl)
		}
	}
});

在进行下载的任务时,需要使用两个较为关键的API,分别是Download plus.downloader.createDownload(url, options, completedCB);

1)方法说明

Download plus.downloader.createDownload(url, options, completedCB);

说明:

请求下载管理创建新的下载任务,创建成功则返回Download对象,用于管理下载任务。

参数:

  • url:( String ) 必选 要下载文件资源地址

    要下载文件的url地址,仅支持网络资源地址,支持http或https协议。 允许创建多个相同url地址的下载任务。 注意:如果url地址中包含中文或空格等,需要进行urlencode转换。

  • options:(DownloadOptions) 可选 下载任务的参数

    可通过此参数设置下载任务属性,如保存文件路径、下载优先级等。

  • completedCB:(DownloadCompletedCallback) 可选 下载任务完成回调函数

    当下载任务下载完成时触发,成功或失败都会触发。

返回值:

Download : 新建的下载任务对象

void plus.runtime.install(filePath, options, installSuccessCB, installErrorCB);

支持以下类型安装包:

  1. 应用资源安装包(wgt),扩展名为’.wgt’;
  2. 应用资源差量升级包(wgtu),扩展名为’.wgtu’;
  3. 系统程序安装包(apk),要求使用当前平台支持的安装包格式。
  4. 注意:仅支持本地地址,调用此方法前需把安装包从网络地址或其他位置放置到运行时环境可以访问的本地目录。

参数:

  • filePath:( String ) 必选 要安装的文件路径

    支持应用资源安装包(wgt)、应用资源差量升级包(wgtu)、系统程序包(apk)。

  • options:(WidgetOptions) 可选 应用安装设置的参数

  • installSuccessCB:(InstallSuccessCallback) 可选 正确安装后的回调

  • installErrorCB:(InstallErrorCallback) 可选 安装失败的回调

返回值:

void : 无

平台支持:

  • Android - 2.2+ (支持) :

    安装apk需添加以下权限:

    • “<uses-permission android:name=“android.permission.INSTALL_PACKAGES”/>”,
    • “<uses-permission android:name=“android.permission.REQUEST_INSTALL_PACKAGES”/>”

    参考:https://ask.dcloud.net.cn/article/36982。

  • iOS - 4.3+ (支持) :

    不支持ipa包的安装,需跳转app sotre引导用户手动操作安装。

2)代码实现

function downLoadApp(downloadUrl) {
	//创建下载任务
	const task = plus.downloader.createDownload(downloadUrl, {
			method: "GET"
		},
		(res, status) => {
			console.log(res, status)
			if (status === 200) {
				uni.hideLoading();
				plus.runtime.install(res.filename)
			}
		})
	uni.showLoading({
		title: '下载中'
	});
	//开始执行下载
	task.start()
}

三、实现效果

img

注意事项:

如果无法安装APP,manifest.json-APP权限设置需勾选:

“<uses-permission android:name=“android.permission.INSTALL_PACKAGES”/>”,

“<uses-permission android:name=“android.permission.REQUEST_INSTALL_PACKAGES”/>”

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

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

相关文章

安全哈希算法:SHA算法

&#x1f3af; 主题简介 SHA&#xff08;Secure Hash Algorithm&#xff09;是比MD5更安全的哈希算法。通过案例形式了解SHA算法的原理、实现方法及注意细节。无论你是Python爱好者还是JavaScript高手&#xff0c;这篇内容都将为你提供一个深入了解SHA算法的机会。 &#x1f…

基于Libero的工程创建

基于Libero的工程创建 第一步&#xff1a;双击进入到工程界面&#xff0c;编写项目详细信息。 Project Name&#xff1a;标识您的项目名称。不要使用空格或保留的Verilog或VHDL关键字。 Project Location&#xff1a;在磁盘上标识您的项目位置。 Description&#xff1a;关于…

图论:1615. 最大网络秩(贪心,非完全图一定存在两个点之间没有边)

文章目录 1.计算出度排序哈希2.枚举3.贪心4.思考 1615. 最大网络秩 在不考虑两座道路直接相连时&#xff0c;我们求出入度&#xff08;或出度&#xff09;最大的两个点即可。 若相连&#xff0c;则存在一条边&#xff0c;所以我们将边存入一个集合中&#xff0c;快速查找是否存…

[每周一更]-(第107期):经典面试题-从输入URL到页面加载发生了什么

文章目录 过程概述简化版&#xff1a;详细版&#xff1a;1. 用户输入URL2. 浏览器解析URL3. DNS解析4. TCP连接5. SSL/TLS握手&#xff08;如果使用HTTPS&#xff09;6. HTTP请求和响应7. 浏览器渲染页面8. 处理后续请求 一般前后端都可以考察问题&#xff0c;让参与者了解网页…

WordPress设置固定连接后提示404

WordPress设置固定链接后出现404错误通常是因为服务器的伪静态规则没有正确设置。以下是几种常见的服务器环境下的解决方案&#xff1a; 宝塔面板&#xff1a;如果服务器安装了宝塔面板&#xff0c;可以在宝塔面板中选择对应的WordPress伪静态规则并保存设置 。 Apache服务器&a…

星间链路的卫星节点网络接口IP地址规划问题 based on 卫星互联网Walker星座

★★★第p个轨道面上的第n个卫星节点[ XL_p_n ]的IPv4子网和网络接口地址规划★★★ IPv4子网问题&#xff1a;中间2个点分十进制分别表示[P:轨道面索引]和[N:当前轨道面上的卫星索引]。考虑Exata设置IPv4子网默认为 190.0.0.0 &#xff0c;不妨&#xff1a; 将某个轨道高度的W…

【通信模块】简单玩转WiFi模块(ESP32、ESP8266)

笔者学习太极创客的学习笔记&#xff0c;链接如下&#xff1a;www.taichimaker.com 前期准备 电脑端口 固件烧录 WIFI到网页 对应七层网络协议 WIFI工作模式&#xff08;链路层&#xff09; 接入点模式、无线中断模式、混合模式 IP协议&#xff08;网络层&#xff09; 子网…

【python】Python考研分数 线性回归模型预测(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

前端缓存问题(浏览器缓存和http缓存)- 解决办法

问题描述&#xff1a;前端代码更新&#xff0c;但因浏览器缓存问题&#xff0c;导致页面源代码并未更新 查看页面源代码的方法&#xff1a;鼠标右键&#xff0c;点击查看页面源代码 如图&#xff1a; 解决方法&#xff1a; 注&#xff1a;每执行一步&#xff0c;就检查一下浏览…

c生万物系列(加减乘除模篇)

为了提高c语言的运行效率&#xff0c;我们需要采用更高效的运算&#xff0c;那么切入点就是随处可见的基本运算符合&#xff0c;从底层架构考虑&#xff0c;加减乘除的效率比位运算低很多&#xff0c;为了能够更好迎合CPU的二进制&#xff0c;有必要取代基本的加减乘除以及求余…

Java----队列(Queue)

目录 1.队列&#xff08;Queue&#xff09; 1.1概念 1.2队列的使用 1.3队列的模拟实现 1.4循环队列 1.4.1循环队列下标偏移 1.4.2如何区分队列是空还是满 1.5双端队列 (Deque) 1.队列&#xff08;Queue&#xff09; 1.1概念 队列&#xff1a;只允许在一端进行插入数据…

GraphRAG:全局搜索方法在RAG系统中的应用

GraphRAG&#xff1a;全局搜索方法在RAG系统中的应用 传统RAG系统的局限性全局搜索方法的优势全局搜索的工作流程关键配置参数实现考虑结论 在检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;系统中&#xff0c;传统的基线方法在处理需要跨…

怀旧必玩!重返童年,扫雷游戏再度登场!

Python提供了一个标准的GUI&#xff08;图形用户界面&#xff09;工具包&#xff1a;Tkinter。它可以用来创建各种窗口、按钮、标签、文本框等图形界面组件。 而且Tkinter 是 Python 自带的库&#xff0c;无需额外安装。 Now&#xff0c;让我们一起来回味一下扫雷小游戏吧 扫…

数据结构与算法-13高级数据结构_树论(BtreeB+Tree)

Btree&BTree 1 btree-定义 B-树是一种自平衡的树形数据结构&#xff0c;它能够保持数据的有序性&#xff0c;并允许搜索、顺序访问、插入和删除操作都在对数时间内完成。与二叉树不同&#xff0c;B-树的每个节点可以拥有多于两个的子节点&#xff0c;这取决于树的阶&#…

* 快速排序的深入优化探讨

在算法设计领域&#xff0c;快速排序因其卓越的平均性能与广泛的应用场景而备受推崇。自1960年Tony Hoare提出以来&#xff0c;它已成为许多编程语言标准库中的核心排序方法。然而&#xff0c;随着数据规模的不断扩大和计算需求的日益复杂化&#xff0c;对快速排序进行更深入的…

docker环境下的verdaccio设置权限并配置域名.md

权限配置 一个管理员叫admin,可以读也可以发布一个普通用户叫qiuye,只可以读,不可以发布添加账号就自行创建添加即可,只需要更改config文件的配置项即可 packages:*/*: access: admin qiuyepublish: admin unpublish: admin **:access: admin qiuyepublish: admin unpublish…

数据结构系列-插入排序和希尔排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 排序的概念 常见的排序算法&#xff1a; 插入排序 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的记录按其关键码值的大小逐个插入到…

如何合规与安全地利用专业爬虫工具,构建企业数据竞争优势

摘要&#xff1a; 本文深入探讨了在当今大数据时代&#xff0c;企业如何通过合规且安全的方式运用专业爬虫工具&#xff0c;有效收集并分析海量信息&#xff0c;进而转化为企业独有的数据优势。我们不仅会介绍最佳实践&#xff0c;还会讨论关键技术和策略&#xff0c;帮助企业…

virtuoso tran仿真中如何画出temperature的瞬态曲线

virtuoso tran仿真中如何画出温度的瞬态曲线&#xff1f; 在tran仿真中如果加入了瞬态热效应&#xff0c;设置Dynamic parameter&#xff0c;即时间随温度变化&#xff0c;如何plot temp vs. time曲线&#xff1f; 1.电路中加一根线和变量名相同 2.ADE L/XL Test Editor->Ou…

如何在安卓设备上运行Linux(使用termux+图形界面)加上换源等优化

我学生嘛&#xff0c;喜欢讲故事&#xff0c;你看看我大部分文章开头&#xff0c;都会有"事情的起因"一类话 当然这次也不例外哦 我最新获得了一个新平板&#xff0c;华为的matepad air&#xff0c;很喜欢。想捣鼓&#xff0c;不太懂&#xff0c;但好像鸿蒙不能直接…