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

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓