uniapp之app版本更新,整体更新和热更新

2024-08-27 07:44
文章标签 uniapp 整体 app 更新 版本

本文主要是介绍uniapp之app版本更新,整体更新和热更新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

需求:

 版本更新有两种更新模式:

实现:

前提:

热更新:

打包wgt包:菜单->发行->原生App-制作移动App资源升级包

代码逻辑: 

整体更新:

实际项目开发:


 

需求:

工作中遇到一个需求,app上架各个市场后,用户   需要版本更新检验,下载最新的版本

 版本更新有两种更新模式:

  • 资源在线升级/热更新(即App并重新安装,里面的js等前端代码进行更新。)
  • 整包升级/整体更新(即常规的整个App安装包重新下载安装)

实现:

前提:

 每次升级之前,不管是热更新还是整体更新,都需要去更新 manifest.json 中的版本号

(比如之前是 1.0.0,那么新版本应该是 1.0.1 或 1.1.0 这样。)

热更新:

打包wgt包:菜单->发行->原生App-制作移动App资源升级包

代码逻辑: 
uni.downloadFile({  url: 后端返的wgt的下载地址,  success: (downloadResult) => {  if (downloadResult.statusCode === 200) { plus.runtime.install(downloadResult.tempFilePath, {  force: false  //true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false。}, function() {  console.log('install success...');  plus.runtime.restart();  //下载安装成功之后需要restart重启app}, function(e) {  console.error('install fail...');  });  }  }  });  

整体更新:

const platform = uni.getSystemInfoSync().platform //手机平台	
uni.showModal({title: '版本升级',content: info.msg,showCancel: false,success: function (res) {if (res.confirm) {if(platform == 'android'){// 跳转安卓应用市场let appurl = "market://details?id=安卓包的包名" //这个是通用应用市场,如果想指定某个应用商店,需要单独查这个应用商店的包名或scheme及参数plus.runtime.openURL(appurl)}else if(platform == 'ios'){const appleId = 对应的ios包的Appleid(不是appid)plus.runtime.launchApplication({action: `itms-apps://itunes.apple.com/cn/app/id${appleId}`,})}}}})

实际项目开发:

把热更新和整体更新代码逻辑融合在一起的,通过请求服务端返回的状态来控制是什么更新模式

  • 在请求头传输当前的版本version 

注意:获取version有两种方式,

plus.runtime.version 或者 uni.getSystemInfo() 读取到的是 apk/ipa 包的版本号,而非 manifest.json 资源中的版本信息,所以这里用 plus.runtime.getProperty() 来获取相关信息( plus.runtime.getProperty()获取信息是异步的所以注意执行顺序)。

let appVersion = '';
let appVersion2 = '';
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, (appInfo) => {// 获取版本名称appVersion = appInfo.version; //这个是异步的console.log(appInfo.version);// 获取版本号console.log(appInfo.versionCode);// 获取当前应用idconsole.log(appInfo.appid);console.log(plus.runtime.version)
});
appVersion2 = plus.runtime.version //这个是同步的

把获取到的版本号放在请求头中,这样就能检测到是否需要版本更新 

在App.vue中onLaunch生命周期里调用检测版本更新方法。

unpdate(){Api.apiverifyVersion().then(res=>{if (info.code === 1007) {if(info.data.type === 1){console.log(" info.data", info.data)uni.downloadFile({  url: info.data.wgtUrl,  success: (downloadResult) => {  if (downloadResult.statusCode === 200) { console.log("downloadResult.tempFilePath",downloadResult.tempFilePath)plus.runtime.install(downloadResult.tempFilePath, {  force: false  //true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false。}, function() {  console.log('install success...');  plus.runtime.restart();  }, function(e) {  console.error('install fail...');  });  }  }  });  }else if(info.data.type === 0){const exists = uni.getStorageSync('version_expired') || false  ;//作用防止modal弹窗多次弹出const platform = uni.getSystemInfoSync().platform //手机平台if(!exists){uni.setStorageSync('version_expired', true)  uni.showModal({title: '版本升级',content: info.msg,showCancel: false,success: function (res) {uni.setStorageSync('version_expired', false)  if (res.confirm) {if(platform == 'android'){// 跳转安卓应用市场let appurl = "market://details?id=对应包id" //这个是通用应用市场,如果想指定某个应用商店,需要单独查这个应用商店的包名或scheme及参数plus.runtime.openURL(appurl)}else if(platform == 'ios'){const appleId = 对应包的appleidplus.runtime.launchApplication({action: `itms-apps://itunes.apple.com/cn/app/id${appleId}`,})}}}})}}} })}

 参考借鉴文档:

uni-app 资源在线升级/热更新 - DCloud问答

这篇关于uniapp之app版本更新,整体更新和热更新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111057

相关文章

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java