位置: IT常识 - 正文

uniapp实现app检查更新与升级-uni-upgrade-center详解(uniapp登陆检查)

编辑:rootadmin
uniapp实现app检查更新与升级-uni-upgrade-center详解 app检查更新与升级

推荐整理分享uniapp实现app检查更新与升级-uni-upgrade-center详解(uniapp登陆检查),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:uniapp全局检测登录状态,uniapp 测试,uniapp检查更新,uniapp如何验证每个页面鉴权,uniapp 测试,uniapp全局检测登录状态,uniapp如何实现平台判断,uniapp全局检测登录状态,内容如对您有帮助,希望把文章链接给更多的朋友!

参考链接:

升级中心uni-upgrade-center - App

uni-admin

h5+ api

App资源在线升级更新

uni-app使用plus注意事项

关于在线升级(WGT)的几个疑问

什么是升级中心uni-upgrade-center

uniapp官方开发的App版本更新的插件,基于unicloud的后端服务

因为是开源的,通过修改源码可以实现请求java等其他后端服务,后续的源码解析章节会介绍

升级中心分为两个部分:

前台检测更新: uni-upgrade-center-app

后台管理系统:

uni-admin >= 1.9.3 :uni-admin 已内置 升级中心,直接使用即可。并且云函数 upgrade-center 废弃,使用 uni-upgrade-center 云函数。uni-upgrade-center Admin管理后台 (uni-admin 1.9.3+ 已内置,此插件不再维护)

1.9.0 <= uni-admin < 1.9.2 :请前往 Gitee 下载 tag v0.5.1 版本使用uni-admin < 1.9.0:请前往 Gitee 下载 tag v0.4.2 版本使用

简单来说,如果是新版的uni-admin,直接用升级中心即可

怎么使用uni-upgrade-center

使用我觉得并不难,跟着官方文档走即可

简单来说,就是你的app项目安装 uni-upgrade-center-app这个插件,同时你需要另外新建一个uni-admin项目,用来上传并管理app项目的更新包,app项目通过unicloud请求更新包

官方文档

但是如果不想使用unicloud,想换成java等其他后端服务,或者想了解app检查更新与升级的代码是如何编写的,阅读uni-upgrade-center源码是十分有必要的。

uni-upgrade-center源码阅读uniapp实现app检查更新与升级-uni-upgrade-center详解(uniapp登陆检查)

十分推荐阅读uni-upgrade-center源码

通过一步步阅读uni-upgrade-center源码,基本能完全学会如何写app检查更新与升级的代码

源码前端功能实现主要分为三个文件,依次阅读

utils/call-check-version.jsutils/call-check-version.jspages/upgrade-popup.vueutils/call-check-version.js

代码很简单,通过h5+ api获取应用信息,把应用信息传递给uniCloud云函数

同理,如果不使用云函数,传给java等后端服务的话,替换云函数部分代码就可以了

export default function () { // #ifdef APP-PLUS return new Promise((resolve, reject) => { // 根据当前应用的appid,获取appid对应的应用信息 plus.runtime.getProperty(plus.runtime.appid, function (widgetInfo) { const data = { action: 'checkVersion', appid: plus.runtime.appid, appVersion: plus.runtime.version, wgtVersion: widgetInfo.version } console.log("data: ", data); // 如果传给java等后端服务,改下方代码 uniCloud.callFunction({ name: 'uni-upgrade-center', data, success: (e) => { console.log("e: ", e); resolve(e) }, fail: (error) => { reject(error) } }) }) }) // #endif // #ifndef APP-PLUS return new Promise((resolve, reject) => { reject({ message: '请在App中使用' }) }) // #endif}plus.runtime.appid

当前应用的APPID

String 类型 只读属性

注意,如果是在HBuilder真机运行获取的是固定值"HBuilder",需要提交App云端打包后运行才能获取真实的APPID值

plus.runtime.getProperty

获取指定APPID对应的应用信息

参数:appid: ( String ) 必选 应用的AppidgetPropertyCB: ( GetPropertyCallBack ) 必选 获得应用信息成功回调函数示例:// 获取应用信息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 );} );}utils/call-check-version.js

官方实现了两种方式,静默更新和提示更新

import callCheckVersion from './call-check-version'// 推荐在App.vue中使用const PACKAGE_INFO_KEY = '__package_info__'export default function() {// #ifdef APP-PLUSreturn new Promise((resolve, reject) => {callCheckVersion().then(async (e) => {if (!e.result) return;const {code,message,is_silently, // 是否静默更新url, // 安装包下载地址platform, // 安装包平台type // 安装包类型} = e.result;// 此处逻辑仅为实例,可自行编写if (code > 0) {// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回const {fileList} = await uniCloud.getTempFileURL({fileList: [url]});if (fileList[0].tempFileURL)e.result.url = fileList[0].tempFileURL;resolve(e)// 静默更新,只有wgt有if (is_silently) {uni.downloadFile({url: e.result.url,success: res => {if (res.statusCode == 200) {// 下载好直接安装,下次启动生效plus.runtime.install(res.tempFilePath, {force: false});}}});return;}/** * 提示升级一 * 使用 uni.showModal */// return updateUseModal(e.result)/** * 提示升级二 * 官方适配的升级弹窗,可自行替换资源适配UI风格 */uni.setStorageSync(PACKAGE_INFO_KEY, e.result)uni.navigateTo({url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,fail: (err) => {console.error('更新弹框跳转失败', err)uni.removeStorageSync(PACKAGE_INFO_KEY)}})return} else if (code < 0) {// TODO 云函数报错处理console.error(message)return reject(e)}return resolve(e)}).catch(err => {// TODO 云函数报错处理console.error(err.message)reject(err)})});// #endif}/** * 使用 uni.showModal 升级 */function updateUseModal(packageInfo) {const {title, // 标题contents, // 升级内容is_mandatory, // 是否强制更新url, // 安装包下载地址platform, // 安装包平台type // 安装包类型} = packageInfo;let isWGT = type === 'wgt'let isiOS = !isWGT ? platform.includes('iOS') : false;let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'return uni.showModal({title,content: contents,showCancel: !is_mandatory,confirmText,success: res => {if (res.cancel) return;// 安装包下载if (isiOS) {plus.runtime.openURL(url);return;}uni.showToast({title: '后台下载中……',duration: 1000});// wgt 和 安卓下载更新downloadTask = uni.downloadFile({url,success: res => {if (res.statusCode !== 200) {console.error('下载安装包失败', err);return;}// 下载好直接安装,下次启动生效plus.runtime.install(res.tempFilePath, {force: false}, () => {if (is_mandatory) {//更新完重启appplus.runtime.restart();return;}uni.showModal({title: '安装成功是否重启?',success: res => {if (res.confirm) {//更新完重启appplus.runtime.restart();}}});}, err => {uni.showModal({title: '更新失败',content: err.message,showCancel: false});});}});}});}静默更新

可以看出静默更新分为三步:

后端提供一个下载更新包的url前端uni.downloadFile该url地址下载好后前端调用plus.runtime.install安装更新包// 静默更新,只有wgt有if (is_silently) {uni.downloadFile({url: e.result.url,success: res => {if (res.statusCode == 200) {// 下载好直接安装,下次启动生效plus.runtime.install(res.tempFilePath, {force: false});}}});return;}强制更新

首先,我们需要知道的是,plus.runtime.install成功后就已经安装完更新包了,用户下次打开app就会是最新版的app,这里强制更新的意思是是否立刻重启app,强制用户立刻使用最新版app

plus.runtime.install后有三种应用场景,这里官方写的很好,三种场景都处理了:

不征求客户意见,直接重启app,强制用户立刻使用最新版征求客户意见,如果重启,用户使用最新版,如果不重启,等用户下次打开app显示最新版不重启,等用户下次打开app显示最新版 // 安装下载的安装包,下次启动生效plus.runtime.install(res.tempFilePath, {force: false}, () => { // is_mandatory是后端返回的控制是否强制更新的变量 // 强制更新就是强制重启app,否则就是用户下次打开app才会更新 // 强制更新体验不好,还是下次打开更新会好很多if (is_mandatory) {// 更新完重启appplus.runtime.restart();return;}uni.showModal({title: '安装成功是否重启?',success: res => {if (res.confirm) {// 更新完重启appplus.runtime.restart();}}});}, err => {uni.showModal({title: '更新失败',content: err.message,showCancel: false});});跳转应用商店后端返回安装包平台和安装包类型安装包类型是否是wgt,如果不是,判断安装包平台是否包含iOS,调用第三方程序打开url安装iOS更新包,iOS是跳转更新,其他是下载更新ios需要上架、通过市场安装,所以需要第三方程序打开url

plus.runtime.openURL表示调用第三方程序打开url进行安装,即跳转应用商店功能

function updateUseModal(packageInfo) {const {title, // 标题contents, // 升级内容is_mandatory, // 是否强制更新url, // 安装包下载地址platform, // 安装包平台type // 安装包类型} = packageInfo;let isWGT = type === 'wgt'let isiOS = !isWGT ? platform.includes('iOS') : false;let confirmText = isiOS ? '立即跳转更新' : '立即下载更新'return uni.showModal({title,content: contents,showCancel: !is_mandatory,confirmText,success: res => {if (res.cancel) return;// 安装包下载if (isiOS) {plus.runtime.openURL(url);return;} ...}});}用户取消下载

https://uniapp.dcloud.net.cn/api/request/network-file.html#downloadfile

var downloadTask = uni.downloadFile({url: 'https://www.example.com/file/test', //仅为示例,并非真实接口地址。complete: ()=> {}});downloadTask.abort();如何打包wgt资源包

一、更改项目manifest.json中的应用版本名称与应用版本号

二、HBuilderX>发行>原生App-制作应用wgt包>确定 三、开发测试的时候,记得再改回原先的应用版本名称与应用版本号,不然版本跟线上的相同,安装更新包的时候就会出现WGT安装包中manifest.json文件的version版本不匹配,本地测试不了更新效果

如何查看wgt文件manifest.json

wgt包生成后会是.wgt后缀名,更改其后缀名为.zip,再解压,就可以查看manifest.json了

报错解决:WGT安装包中manifest.json文件的version版本不匹配

manifest.json中的版本大于等于了线上的版本,自行排查即可

通过uni-admin上传wgt资源包

uni-admin报错解决:超级管理员已存在

是因为admin账户是旧的,跟appid对不上,删除旧的admin账户,重新创建

本文链接地址:https://www.jiuchutong.com/zhishi/283716.html 转载请保留说明!

上一篇:cpqdfwag.exe是什么进程 能结束吗 cpqdfwag进程查询

下一篇:Unity导出WebGL工程,并部署本地web服务器(unity导出webgl报错)

  • 支付宝怎么查银行卡号(支付宝怎么查银行卡开户行地址)

    支付宝怎么查银行卡号(支付宝怎么查银行卡开户行地址)

  • 淘宝怎么开直播卖货(淘宝怎么开直播赚钱)

    淘宝怎么开直播卖货(淘宝怎么开直播赚钱)

  • 苹果手机闹钟怎么调成震动不出声(苹果手机闹钟怎么设置间隔多久响一次)

    苹果手机闹钟怎么调成震动不出声(苹果手机闹钟怎么设置间隔多久响一次)

  • iphone12怎么关机(iPhone12怎么关机重启)

    iphone12怎么关机(iPhone12怎么关机重启)

  • mate40pro和mate40的区别有哪些(mate40pro和mate40的外观区别)

    mate40pro和mate40的区别有哪些(mate40pro和mate40的外观区别)

  • 网络的安全密钥什么密码(网络的安全密钥是网络密码吗)

    网络的安全密钥什么密码(网络的安全密钥是网络密码吗)

  • 戴蓝牙耳机打电话对哪里说话(戴蓝牙耳机打电话)

    戴蓝牙耳机打电话对哪里说话(戴蓝牙耳机打电话)

  • 微信号逻辑错误是什么意思(微信号逻辑错误怎么解决)

    微信号逻辑错误是什么意思(微信号逻辑错误怎么解决)

  • 文件和文件夹命名规则(文件和文件夹命名最多可以使用多少个字符)

    文件和文件夹命名规则(文件和文件夹命名最多可以使用多少个字符)

  • 部分人可见别人知道吗(部分人可见别人能看出来不)

    部分人可见别人知道吗(部分人可见别人能看出来不)

  • 怎么弄花呗收款二维码(怎么弄花呗收钱)

    怎么弄花呗收款二维码(怎么弄花呗收钱)

  • 微博注册时间怎么和实际时间不一致(微博注册时间怎么设置仅自己可见)

    微博注册时间怎么和实际时间不一致(微博注册时间怎么设置仅自己可见)

  • 荣耀锁屏密码忘记怎么办(荣耀 忘记锁屏密码)

    荣耀锁屏密码忘记怎么办(荣耀 忘记锁屏密码)

  • 支付宝不支持手机号码充值是怎么回事(支付宝不支持手机版本怎么办)

    支付宝不支持手机号码充值是怎么回事(支付宝不支持手机版本怎么办)

  • 美图手机t8像素多少(美图t8s手机像素)

    美图手机t8像素多少(美图t8s手机像素)

  • 11pro的手机壳x可以用吗(11pro的手机壳xs可以用吗)

    11pro的手机壳x可以用吗(11pro的手机壳xs可以用吗)

  • ps如何除去图片水印(ps如何除去图片上的文字)

    ps如何除去图片水印(ps如何除去图片上的文字)

  • 抖音帮别人投放对方知道吗(抖音帮别人投放视频别人会知道吗)

    抖音帮别人投放对方知道吗(抖音帮别人投放视频别人会知道吗)

  • 淘宝店铺会员能解除吗(淘宝店铺会员能随便加入吗)

    淘宝店铺会员能解除吗(淘宝店铺会员能随便加入吗)

  • word怎么一页显示两页(word怎么一页显示四张)

    word怎么一页显示两页(word怎么一页显示四张)

  • 如何修改唯品会登录名(如何修改唯品会绑定的手机号)

    如何修改唯品会登录名(如何修改唯品会绑定的手机号)

  • 小米8后置指纹不灵敏(小米8后置指纹是哪款)

    小米8后置指纹不灵敏(小米8后置指纹是哪款)

  • 小米授权体验店是什么(小米授权体验店是正品吗)

    小米授权体验店是什么(小米授权体验店是正品吗)

  • 全民k歌怎么不显示手机型号(全民k歌怎么不显示sss)

    全民k歌怎么不显示手机型号(全民k歌怎么不显示sss)

  • 怎样设置手机锁屏密码和图案(怎样设置手机锁屏显示时间)

    怎样设置手机锁屏密码和图案(怎样设置手机锁屏显示时间)

  • 压缩包损坏修复教程(压缩包损坏修复软件)

    压缩包损坏修复教程(压缩包损坏修复软件)

  • YOLOv5/v7/v8 改进首发最新PWConv核心结构|来自最新CVPR2023顶会,进一步轻量化!测试数据集mAP有效涨点,进一步降低参数量,追求更高的 FLOPS(yolov3 改进)

    YOLOv5/v7/v8 改进首发最新PWConv核心结构|来自最新CVPR2023顶会,进一步轻量化!测试数据集mAP有效涨点,进一步降低参数量,追求更高的 FLOPS(yolov3 改进)

  • Win11如何调高进程的优先级?Win11调高进程的优先级方法(win11调节屏幕亮度快捷键)

    Win11如何调高进程的优先级?Win11调高进程的优先级方法(win11调节屏幕亮度快捷键)

  • 无形资产的确认条件
  • 公司现金支票取钱需要带什么资料
  • 固定资产处置残值收入要纳税
  • 职工发放福利的会计处理
  • 来料加工企业的人工工资计入什么费用
  • 实收资本印花税税率多少
  • 公司注销时应付职工薪酬怎么处理
  • 发放工资比计提工资少了
  • 个人投资理财需要注意什么
  • 海关进口增值税计算公式
  • 纳税总额包括
  • 增值税专票盖章正确位置
  • 税控盘怎么进行升级
  • 劳务费代驾计入什么科目?
  • 小微企业计算公式
  • 案例分析关于拟建科学馆的请示报告
  • 企业不重视引起的四大涉税风险
  • 出纳可以做记账表格吗
  • 哪些情况下工资不低于最低工资标准的80
  • 在途物资期末借方
  • 消防改造费用
  • 成品送检单表格
  • 亏损的递延所得税怎么理解
  • 境外个人所得税计算
  • 企业所得税税率表2023年最新
  • 发工资时忘记扣个税了怎么做账
  • win10如何禁用administrator用户
  • 在国内和国外
  • 如何设定电脑开机密码锁
  • php 替换
  • Win10 Build 19044.1319(21H1)预览版发布:修复 Bug提高安全性
  • 没按时报税罚款多少
  • modelist模型
  • 正则表达式u4e00
  • 赞助收入税务处理
  • TypeError: Cannot read properties of null (reading ‘insertBefore‘) vue项目报错
  • 银行存款日记账可以采用
  • php ajax 教程
  • 本月认证上月的进项票如何做
  • php生成证书图片
  • 办公费抵扣标准
  • 阿里什么
  • 深入node.js技术栈
  • 存货盘盈盘亏的会计处理
  • java聚合工程
  • 免费学电脑的网站
  • 报表中库存商品怎么填
  • 已经认证了的专利怎么办
  • php不支持mysql
  • deepin 15.3 X64系统中安装mongodb的方法步骤
  • mysql数据库服务器配置
  • 个贷系统平账专户怎么做分录
  • 逾龄资产对企业的影响
  • 跨区域缴纳个税相关规定
  • 预付卡充值可以退吗
  • 合并两公司的帐务处理
  • 报销差旅费属于付款凭证还是收款凭证
  • 购物卡送给客户的账务处理
  • 可供出售金融资产公允价值变动
  • sqlserver多行转多列
  • helpcfg是什么文件
  • rosnmgr.exe - rosnmgr是什么进程 有什么用
  • win10edge浏览器怎么设置兼容模式
  • android开发环境的搭建步骤
  • js动态改变div内容
  • unity learn
  • shell自定义命令
  • unity3d CarWaypoints插件
  • nodejs dgram
  • linearlayout布局怎么设置
  • 使用筷子就餐会不会传染乙肝病毒
  • android自定义ui
  • ca证书怎么下载安装
  • 上海地铁直接刷银联卡
  • 住房货币化什么意思
  • 对超市的建议和意见怎么写简短
  • 季度税额怎么算
  • 个人所得税赡养老人可以填两个吗
  • 地税登记证编号是哪几位
  • 苏州市区公司可以在园区买社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设