uniapp APP检测更新

需求:

1.首次进入APP给出弹窗提示是否存在最新版本APP,可选择更新或者取消

2.选择取消后,在使用期间不再弹出该弹窗

3.在设置中增加按钮,点击进行版本检测,再弹窗

效果图:

使用到的插件:APP升级,在线升级支持android、ios - DCloud 插件市场

二次开发效果好,可根据项目需求自行修改页面结构,静态图片

场景1:进入APP自动检测实现
1.App.vue中

export default {globalData: {autocheckupdate: false //是否开启自动检测},
onLaunch() {// #ifdef APPthis.autocheckupdate = true //开启检测uni.setStorageSync('autocheckupdate',this.autocheckupdate) //存入缓存setTimeout(()=>{this.autocheckupdate = falseuni.setStorageSync('autocheckupdate',this.autocheckupdate)},2500) //这里我写的简单,2.5s后自动设置为不开启,可以根据项目需求来写// #endif

2.首页xxx.vue中

import ZyUpdate from '../../components/zy-upgrade/zy-upgrade.vue'
components: {ZyUpdate},
data() {return {autocheckupdate: uni.getStorageSync('autocheckupdate'),updateurl: '', //后端检测版本接口地址oldversion: '' //当前项目版本号};},
<!-- #ifdef APP-PLUS --><zy-update ref="zyupgrade" :updateurl="updateurl":autocheckupdate="autocheckupdate":noticeflag="true" :h5preview="true" :oldversion="oldversion" @showupdateTips="showupdatetips"></zy-update><!-- #endif -->
onLoad() {// #ifdef APP-PLUSplus.runtime.getProperty(plus.runtime.appid,(widgetInfo) => { this.oldversion = widgetInfo.version //检测app版本});  this.updateurl = 'xxx' //后端检测更新接口地址// #endif},
showupdatetips(flag){if(flag == 0){uni.showToast({title: '已经是最新版本了',icon:'none'});}},

3.zy-upgrade.vue文件中,样式结构自己根据UI图修改,静态资源图片可以自行修改, 另外不要照抄appVersion这个接口,这是我自己封装的,copy没用,记得自己封装自己的接口,替换就好

<template><view class="zy-modal" :class="dshow?'show':''"><view class="zy-dialog" style="background-color: transparent;"><view class="padding-top text-white" :class="'zy-upgrade-topbg-'+theme"><view><text class="zy-upgrade-title">发现新版本</text></view><text class="flex-wrap">{{version}}</text></view><view class="padding-xl bg-white text-left"><scroll-view style="max-height: 200rpx;" scroll-y="auto" v-if="!update_flag"><text>{{update_tips}}</text></scroll-view><view class="zy-progress radius striped active" v-if="update_flag"><view :class="'bg-'+theme" :style="'width: '+update_process+'%;'">{{update_process}}</view></view></view><view class="zy-bar bg-white justify-end"><view class="action" v-if="!update_flag"><button class="zy-btn" :class="'bg-'+theme" @click="upgrade_checked">确认升级</button><button class="zy-btn margin-left" :class="'line-'+theme"v-if="!forceupgrade"@click="upgrade_cancel">取消升级</button></view><view class="action text-center" v-if="update_flag&&!forceupgrade"><button class="zy-btn" :class="'bg-'+theme" @click="upgrade_break">中断升级</button></view></view></view></view>
</template><script>import { appVersion } from '../../api/index.js' //这是封装的接口,记得修改成自己的export default {name: 'ZyUpgrade',props: {theme: {	//主题,目前支持green,pink,blue,yellow,redtype: String,default: 'green'},updateurl: {	//升级检测url,全路径type:String,default: ''},h5preview:{	//H5界面下是否预览升级type: Boolean,default: false},oldversion: {	//如果是H5,为了方便测试,可以传入一个旧版本号进来。type: String,default: ''},oldcode: { //如果是H5,为了方便测试,可以传一个旧版本的code进来。type: Number,default: 0},appstoreflag: {	//是否启用appstore升级,如果启用,由服务端返回appstore的地址type: Boolean,default: true},noticeflag:{	//是否通知主界面无需更新type:Boolean,default: false},autocheckupdate:{	//是否页面截入时就判断升级type:Boolean,default: false}},data() {return {update_flag: false, //点击升级按钮后,显示进度条dshow: false,update_process: 0,downloadTask: [],updated2version: '',version_url: '',update_tips: '',forceupgrade: false,currentversion: this.oldversion,versionname: '',vesioncode: this.oldcode,wgt_flag: 0,wgt_url: '',size: 0 ,//开启gzip等情形下,获取不到安装包大小,可以服务端返回安装包大小}},mounted() {let app_flag = false// #ifdef APP-PLUSapp_flag = true// #endifif((this.h5preview || app_flag) && this.autocheckupdate){console.log("检测升级")this.check_update()}},computed:{version(){let retversion = ''retversion = this.currentversion + (this.currentversion!=''&&this.updated2version!=''?'->':'')+this.updated2versionreturn retversion}},methods:{//检测升级check_update(){console.log('执行检测升级');let that = this// #ifdef APP-PLUSplus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { that.currentversion = widgetInfo.versionthat.versionname = widgetInfo.namethat.versioncode = widgetInfo.versionCodeconsole.log('that.currentversion',that.currentversion);console.log('that.versionname',that.versionname);console.log('that.versioncode',that.versioncode);that.updatebusiness(that)});  // #endif// #ifdef H5if(this.h5preview){this.updatebusiness(that)}// #endif},async updatebusiness(that){ //具体升级的业务逻辑// uni.showLoading({// 	title: '',// 	mask: false// });let platform = uni.getSystemInfoSync().platformlet formdata = {version: that.currentversion,  platform: platform == 'android' ? 2 : 1}console.log('开始请求接口判断是否升级',formdata);try{let data = await appVersion(formdata) //该接口仅做实例展示,记得改成自己封装的接口console.log('调取成功返回的数据',data);uni.hideLoading()if(data.code == 0){console.log(data)//提示升级if(data.data.update_flag == 1){that.dshow = trueconsole.log('需要升级');that.update_tips = data.data.update_tipsthat.forceupgrade = data.data.forceupdate==1that.version_url = data.data.update_urlconsole.log('that.version_url',that.version_url);//that.currentversion = widgetInfo.versionthat.updated2version = data.data.versionthat.wgt_flag = data.data.wgt_flagthat.wgt_url = data.data.wgt_urlthat.size = data.data.size}else{if(that.noticeflag){//通知父组件,当前版为最新版本that.$emit("showupdateTips",0)}}}else{uni.showToast({title: '请求升级出错:'+data.msg,icon:'none'});}}catch(err){uni.hideLoading()console.log('检查升级接口失败原因',err);}// uni.request({  // 	url: that.updateurl,// 	method: 'POST',  // 	data: formdata,// 	success: (result) => {// 		console.log('调取成功返回的数据',result);// 		uni.hideLoading()// 		let data = result.data// 		if(data.code == 100){// 			console.log(data)// 				//提示升级// 			if(data.data.update_flag == 1){// 				that.dshow = true// 				that.update_tips = data.data.update_tips// 				that.forceupgrade = data.data.forceupdate==1// 				that.version_url = data.data.update_url// 				//that.currentversion = widgetInfo.version// 				that.updated2version = data.data.version// 				that.wgt_flag = data.data.wgt_flag// 				that.wgt_url = data.data.wgt_url// 				that.size = data.data.size// 			}else{// 				if(that.noticeflag){// 					//通知父组件,当前版为最新版本// 					that.$emit("showupdateTips",0)// 				}// 			}// 		}else{// 			uni.showToast({// 				title: '请求升级出错:'+data.msg,// 				icon:'none'// 			});// 		}// 	},// 	fail: (err) => {// 		console.log('检查升级接口失败原因',err);// 	}  // });  },//点击开始升级按钮,开始升级upgrade_checked:function(){this.update_flag = truethis.updateversion()},//点击取消升级按钮,取消升级upgrade_cancel:function(){this.dshow = false},//升级过程中,点击中断升级按钮,中断升级upgrade_break: function(){console.log('执行中断');this.dshow = falsethis.update_flag = falsethis.downloadTask.abort()},//升级下载apk安装包的具体处理业务逻辑updateversion: function(){let platform = uni.getSystemInfoSync().platformlet that = thisconsole.log("操作系统:",platform)if(platform == 'ios' && this.appstoreflag){//如果启用ios appstore升级,则打开appstorethat.dshow = falseconsole.log("跳转至appstore")plus.runtime.launchApplication({action: that.version_url}, function(e) {uni.showToast({title: '打开appstore失败',icon:'none'});});}else{let that = thislet downloadurl = that.wgt_flag==1?that.wgt_url:that.version_urlthis.update_confirm = truethis.downloadTask = uni.downloadFile({url: downloadurl,success:function(res){if(res.statusCode == 200){//开始安装plus.runtime.install(res.tempFilePath, {force: false  }, function() {  console.log('install success...');plus.runtime.restart();}, function(e) {  console.error('install fail...',e);  uni.showToast({title: '升级失败',icon:'none'});});  }else{uni.showToast({title: '下载失败,网络错误',icon:'none'});}},fail:function(e) {console.log("下载失败",e)uni.showToast({title: '下载失败:'+e.errMsg,icon:'none'});this.update_flag = false},complete:function(){}})this.downloadTask.onProgressUpdate(function(res){that.update_process = res.progressif(res.progress == Infinity){//使用size计算console.log("计算size");let progress = (res.totalBytesWritten / that.size)*100if(progress>100){progress = 100}that.update_process = progress}})}},}}
</script><style scoped>@import url("./static/css/main.css");.zy-upgrade-topbg-green {background-image: url('./static/images/green.png');background-size: 100% 100%;background-repeat: no-repeat;height: 290rpx;}.zy-upgrade-topbg-red {background-image: url('./static/images/red.png');background-size: 100% 100%;background-repeat: no-repeat;height: 290rpx;}.zy-upgrade-topbg-pink {background-image: url('./static/images/pink.png');background-size: 100% 100%;background-repeat: no-repeat;height: 290rpx;}.zy-upgrade-topbg-yellow {background-image: url('./static/images/yellow.png');background-size: 100% 100%;background-repeat: no-repeat;height: 290rpx;}.zy-upgrade-topbg-blue {background-image: url('./static/images/blue.png');background-size: 100% 100%;background-repeat: no-repeat;height: 290rpx;}.zy-upgrade-title {font-size: 50rpx;color: white;}
</style>

场景2:手动点击按钮检测是否更新

这里就不需要像场景1一样用到autocheckupdate参数来开启检测,只需要在@click点击事件里调方法 this.$refs.zyupgrade.check_update()

<!-- #ifdef APP-PLUS --><zy-update ref="zyupgrade" :updateurl="updateurl":autocheckupdate="false":noticeflag="true" :h5preview="true" :oldversion="oldversion" @showupdateTips="showupdatetips"></zy-update><!-- #endif -->
<view class="info_item" @click="checkVersion" style="border-bottom: 1rpx #E6E6E6 solid;"><text>版本号</text><view class="version"><text class="tititi">{{oldversion}}</text><imageclass="tototo"src="https://xxx/my_back.png"></image></view></view>
checkVersion(){console.log('检查版本');this.$refs.zyupgrade.check_update()},

完成

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS-7安装grafana

一、通用设置&#xff08;分别在4台虚拟机设置&#xff09; 1、配置主机名 hostnamectl set-hostname --static 主机名2、修改hosts文件 vim /etc/hosts 输入&#xff1a; 192.168.15.129 master 192.168.15.133 node1 192.168.15.134 node2 192.168.15.136 node33、 保持服…

【国产替代】航空电子通信总线航空电子通信总线产品为MIL-STD-1553和ARINC 429等协议提供原生支持

航空电子通信总线 航空电子通信总线产品为MIL-STD-1553和ARINC 429等协议提供原生支持。这些产品用于进行航空电子应用所需的开发、生产和系统测试。 PXIe&#xff0c;2通道PXI ARINC-664接口模块 AIM ARINC-664具有板载处理器&#xff0c;可自动处理所有与协议相关的活动&…

经典案例|使用Supabase解决可视化大屏项目的常见问题

敏博科技专业致力于应急管理行业&#xff0c;提供以物联网技术和感知预警算法模型为核心的先进产品和解决方案。应急管理行业的业务非常繁多和复杂&#xff0c;很多时候都需要在短时间内交付出稳定高效的业务系统。如下两张图某市的安全生产监测预警系统 MemFire Cloud应用开…

fnm:Rust开发的高效Node版本管理工具

简介 fnm 是一个基于 Rust 开发的 Node 版本管理工具&#xff0c;它的目标是提供一个快速、简单且可靠的方式来管理 Node.js 的不同版本。同时&#xff0c;它是跨平台的&#xff0c;支持 macOS、Linux、Windows。&#x1f680; Fast and simple Node.js version manager, buil…

HarmonyOS开发案例:【相机开发】

基本概念 相机是OpenHarmony多媒体进程提供的服务之一&#xff0c;提供了相机的录像、预览、拍照功能&#xff0c;支持多用户并发取流。 在进行应用的开发前&#xff0c;开发者应了解以下基本概念&#xff1a; 视频帧 视频流指的是将一系列图片数据按照固定时间间隔排列形成的…

云计算中的过度授权:安全隐患与应对策略

云计算凭借其弹性、可扩展等优势&#xff0c;已经成为诸多企业组织拓展业务的重要基础设施之一。然而&#xff0c;与传统IT架构相比&#xff0c;云计算环境的安全管理也面临着新的挑战。过度授权 (Overprivileging) 便是云安全领域亟待解决的主要问题之一&#xff0c;本文将带领…

Fisher判别示例:鸢尾花(iris)数据(R)

先读取iris数据&#xff0c;再用程序包MASS&#xff08;记得要在使用MASS前下载好该程序包&#xff09;中的线性函数lda()作判别分析&#xff1a; data(iris) #读入数据 iris #展示数据 attach(iris) #用变量名绑定对应数据 library(MASS) #加载MASS程序包 ldlda(Species~…

Hive服务详解

Hive服务 HiveServer2、Hive Metastore 服务服务共同构成了 Hive 生态系统中的核心功能&#xff0c;分别负责管理元数据和提供数据查询服务&#xff0c;为用户提供了一个方便、高效的方式来访问和操作存储在 Hive 中的数据。 1. Hive 查询服务&#xff08;HiveServer2&#xf…

蓝桥杯:日期问题(我的绝望题)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 目录 前言&#xff1a; &#x1f337;1.问题描述&#xff1a; 1.问题描述&#xff1a; 2.输入格式&#xff1a; 3.输出格式&#…

CCS项目持续集成

​ 因工作需要&#xff0c;用户提出希望可以做ccs项目的持续集成&#xff0c;及代码提交后能够自动编译并提交到svn。调研过jenkins之后发现重新手写更有性价比&#xff0c;所以肝了几晚终于搞出来了&#xff0c;现在分享出来。 ​ 先交代背景&#xff1a; 1. 代码分两部分&am…

atlas 500容器(ubuntu20.04)搭建

1.docker 及环境搭建略 2.宿主机驱动安装略 3.宿主机中能正确使用npu-smi 4.docker 拉取略 5.docker 容器启动 docker run -itd --device/dev/davinci0 --device/dev/davinci_manager --device/dev/devmm_svm --device/dev/hisi_hdc -v /run/board_cfg.ini:/run/b…

自己写的爬虫小案例

网址&#xff1a;aHR0cDovL2pzc2NqZ3B0Lmp4d3JkLmdvdi5jbi8/dXJsPS92aWV3L3dvcmtpbmdVbml0L3dvcmtpbmdVbml0Lmh0bWw 这串代码能够爬取勘察单位企业的详细信息。 import requests import time import csv f open(勘察单位公司信息.csv,w,encodingutf-8,newline) csv_writer …