沈阳网站优化,网站内容填写,天津建站公司模板,常德网站建设哪家权威uniapp实现局域网#xff08;内网#xff09;中APP自动检测版本#xff0c;弹窗提醒升级
在开发MES系统的过程中#xff0c;涉及到了平板端APP的开发#xff0c;既然是移动端的应用#xff0c;那么肯定需要APP版本的自动更新功能。 查阅相关资料后#xff0c;在uniapp的…uniapp实现局域网内网中APP自动检测版本弹窗提醒升级
在开发MES系统的过程中涉及到了平板端APP的开发既然是移动端的应用那么肯定需要APP版本的自动更新功能。 查阅相关资料后在uniapp的官方文档中发现官方已经提供了基于云端的uniCloud云函数进行实现。主要是使用uni-upgrade-center - Admin 和uni-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 ) 必选 应用的AppidgetPropertyCB:(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);支持以下类型安装包
应用资源安装包wgt扩展名为’.wgt’应用资源差量升级包wgtu扩展名为’.wgtu’系统程序安装包apk要求使用当前平台支持的安装包格式。注意仅支持本地地址调用此方法前需把安装包从网络地址或其他位置放置到运行时环境可以访问的本地目录。
参数 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()
}三、实现效果 注意事项 如果无法安装APPmanifest.json-APP权限设置需勾选 “uses-permission android:name“android.permission.INSTALL_PACKAGES”/”, “uses-permission android:name“android.permission.REQUEST_INSTALL_PACKAGES”/”