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

article/2025/9/18 18:59:00

 

HBuilderX 1.6.5 起,uni-app 支持生成 App 资源升级包。

生成 App 资源升级包

修改版本号

首先,更新 manifest.json 中的版本号。
比如之前是 1.0.0,那么新版本应该是 1.0.1 或 1.1.0 这样。

 

 

发行

然后,在 HBuilderX 中生成升级包(wgt)。
菜单->发行->原生App-制作移动App资源升级包

 

 

生成结束会在控制台告知升级包的输出位置。

 

 

安装资源升级包

应用的升级需要服务端与客户端配合完成,下面以本地测试过程中的操作举例说明:

存放资源

将 %appid%.wgt 文件存放在服务器的 static 目录下,即 http://www.example.com/static/UNI832D722.wgt。

服务端接口

约定检测升级的接口,地址为:http://www.example.com/update/

传入参数

参数名类型默认值说明
nameString''客户端读取到的应用名称,定义这个参数可以方便多个应用复用接口。
versionString''客户端读取到的版本号信息

返回参数

参数名类型默认值说明
updateBooleanfalse是否有更新
wgtUrlString''wgt 包的下载地址,用于 wgt 方式更新。
pkgUrlString''apk/ipa 包的下载地址或 AppStore 地址,用于整包升级的方式。

代码示例

下面是一个简单的服务端判定的示例,仅做参考,实际开发中根据自身业务需求处理。

 
var express = require('express');  
var router = express.Router();  
var db = require('./db');  // TODO 查询配置文件或者数据库信息来确认是否有更新  
function checkUpdate(params, callback) {  db.query('一段SQL', function(error, result) {  // 这里简单判定下,不相等就是有更新。  var currentVersions = params.appVersion.split('.');  var resultVersions = result.appVersion.split('.');  if (currentVersions[0] < resultVersions[0]) {  // 说明有大版本更新  callback({  update: true,  wgtUrl: '',  pkgUrl: result.pkgUrl  })  } else {  // 其它情况均认为是小版本更新  callback({  update: true,  wgtUrl: result.wgtUrl,  pkgUrl: ''  })  }  });  
}  router.get('/update/', function(req, res) {  var appName = req.query.name;  var appVersion = req.query.version;  checkUpdate({  appName: appName,  appVersion: appVersion  }, function(error, result) {  if (error) {  throw error;  }  res.json(result);  });  
});  

注意事项

  • 以上约定,仅做参考。
  • 服务端的具体判定逻辑,请根据自身的业务逻辑灵活处理。

客户端检测升级

在 App.vue 的 onLaunch 中检测升级,代码如下:

 
// #ifdef APP-PLUS  
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {  uni.request({  url: 'http://www.example.com/update/',  data: {  version: widgetInfo.version,  name: widgetInfo.name  },  success: (result) => {  var data = result.data;  if (data.update && data.wgtUrl) {  uni.downloadFile({  url: data.wgtUrl,  success: (downloadResult) => {  if (downloadResult.statusCode === 200) {  plus.runtime.install(downloadResult.tempFilePath, {  force: false  }, function() {  console.log('install success...');  plus.runtime.restart();  }, function(e) {  console.error('install fail...');  });  }  }  });  }  }  });  
});  
// #endif  

不支持的情况

  • SDK 部分有调整,比如新增了 Maps 模块等,不可通过此方式升级,必须通过整包的方式升级。
  • 如果是老的非自定义组件编译模式,之前没有 nvue 文件,但更新中新增了 nvue 文件,不能使用此方式。因为非自定义组件编译模式如果没有nvue文件是不会打包weex引擎进去的,原生引擎无法动态添加。自定义组件模式默认就含着weex引擎,不管工程下有没有nvue文件。
  • 原生插件的增改,同样不能使用此方式。

注意事项

  • 条件编译,仅在 App 平台执行此升级逻辑。
  • appid 以及版本信息等,在 HBuilderX 真机运行开发期间,均为 HBuilder 这个应用的信息,因此需要打包自定义基座或正式包测试升级功能。
  • plus.runtime.version 或者 uni.getSystemInfo() 读取到的是 apk/ipa 包的版本号,而非 manifest.json 资源中的版本信息,所以这里用 plus.runtime.getProperty() 来获取相关信息。
  • 安装 wgt 资源包成功后,必须执行 plus.runtime.restart(),否则新的内容并不会生效。
  • 如果App的原生引擎不升级,只升级wgt包时需要注意测试wgt资源和原生基座的兼容性。平台默认会对不匹配的版本进行提醒,如果自测没问题,可以在manifest中配置忽略提示,详见https://ask.dcloud.net.cn/article/35627
  • www.example.com 是一个仅用做示例说明的地址,实际应用中应该是真实的 IP 或有效域名,请勿直接复制粘贴使用。

关于热更新是否影响应用上架

应用市场为了防止开发者不经市场审核许可,给用户提供违法内容,对热更新大多持排斥态度。

但实际上热更新使用非常普遍,不管是原生开发中还是跨平台开发。

Apple曾经禁止过jspatch,但没有打击其他的热更新方案,包括cordovar、react native、DCloud,其实是因为jspatch有严重安全漏洞,可以被黑客利用,造成三方黑客可篡改其他App的数据。

使用热更新需要注意:

  • 上架审核期间不要弹出热更新提示
  • 热更新内容使用https下载,避免被三方网络劫持
  • 不要更新违法内容、不要通过热更新破坏应用市场的利益,比如iOS的虚拟支付要老老实实给Apple分钱

如果你的应用没有犯这些错误,应用市场是不会管的。


http://chatgpt.dhexx.cn/article/qEnNGjZX.shtml

相关文章

【有手就行】定制一个GIF表情

前言&#x1f447; 完成这个任务不需要安装任何编程软件&#xff0c;不需要任何基础&#xff0c;有手就行&#xff01; 效果图&#x1f447; &#xff08;御用素材&#x1f438;S先生&#xff09;&#x1f447; 制作步骤&#x1f447; ①登陆网址https://benisland.neocitie…

Squish 7.0中视频捕获 (含相关网络直播研讨会报名信息)

本文翻译自Video capture in Squish 7.0 – feature focus &#xff08;原文发布于2022年3月4日&#xff09; 原文作者&#xff1a;Qt公司软件工程师Katarina Behrens 翻译&#xff1a;Joyce Jiang Squish GUI Tester 7.0是首个提供独特新功能的Squish版本&#xff1a;通过捕获…

(一)squid简介

1、一些squid的概念 squid是一个缓存服务器的守护进程&#xff0c;其支持的代理协议&#xff1a;FTP,HTTP,SSL,套接字。 存储分类&#xff1a;磁盘>分区>目录>Object&#xff08;缓存文件&#xff09; 索引方式&#xff1a; Hash Tables 目录 每个Digest的索…

【深入UCSC Genome Brower】他山之石

转自&#xff1a;https://mp.weixin.qq.com/s?__bizMzAwMzY4MTYxNw&mid2655752921&idx1&sn159f79dde58d2145c59307e23a06b97a&scene0#wechat_redirect 这是一个神奇的网站&#xff1a;UCSC Genome Brower 有朋友在后台留言让介绍下UCSC Genome Browser&#x…

SWISH

①基础符号&#xff1a; :- 输出 \ 非 ②判断是否匹配文字备注 例1&#xff08;未匹配成功&#xff09; 例2&#xff08;输出a所在的list&#xff1a;N&#xff1f;&#xff09; 例3

Swish hard-Swish

当β = 0时,Swish变为线性函数f(x)=x/2 β → ∞, σ(x)=(1+exp(−x))−1σ(x)=(1+exp⁡(−x))−1为0或1. Swish变为ReLU: f(x)=2max(0,x) 所以Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数. beta是个常数或者可以训练的参数。其具有无上界有下界、平滑、非单调的…

Squid服务

Squid服务 一、Squid 服务基础 Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 &#xff0c;可以很好地实现 HTTP 和 FTP&#xff0c;以及 DNS 查询、SSL 等应 用的缓存代理&#xff0c;功能十分强大。 官 方 网 站 为&#xff1a; http://www.squid-c…

Lua整合工具 squish使用方法

squish是一个开源的用于打包lua脚本的小工具&#xff0c;它的主要功能是将多个lua文件整合成一个文件&#xff0c;并在此基础上做压缩和混淆等处理&#xff0c;混淆和压缩后的代码可以直接被执行而不需要先做解压还原等操作。 它的github地址&#xff1a;https://github.com/L…

测试资深人士推荐的GUI跨平台自动化测试工具

Squish GUI 测试自动化工具使跨平台测试应用程序变得容易&#xff0c;它对Qt的支持非常好。 在发布应用程序之前测试用户界面比以往任何时候都更加重要&#xff0c;当今用户需要从移动、桌面、Web和嵌入式应用程序中获得无缝的跨平台体验。由于应用程序经常在工厂、汽车甚至厨…

难道真的有人因为要分享squish测试工具而去学习QT吗

1下载安装 1.去官网下载QT工具并安装&#xff0c;下载地址&#xff1a;https://download.qt.io/official_releases/qt/ &#xff1b;如下图选择自己想要下载的版本&#xff0c;我下载的5.12.12&#xff0c;文件3.7G&#xff0c;如图注册完成&#xff0c;全选完成&#xff0c;后…

UCSC 基因组浏览器配置详解

一、配置参数 UCSC基因组浏览器&#xff1a;传送门 1、点击配置 2、进入配置页面&#xff1a; 点击刚刚运行的文件 BedGraph Format 2、轨迹配置页面 Type of graph &#xff1a;默认以bar&#xff0c;条形图来显示&#xff0c;选择point会以点或线来显示Track height &…

Squish — 基于Qt的HMI自动化测试工具

目录 自动化测试方案设置Squish记录测试属性验证视觉验证总结 本文翻译自Squish - Test automation tool for our HMI build with Qt 原文作者&#xff1a;Piotr Lesiecki 校审&#xff1a;Kenny Zhang 当测试工程师们听到自动化测试时&#xff0c;首先会想到的一定是Selenium…

Squish - GUI Tester

Squish - GUI Tester Squish overview 网上查询关于自动化测试工具Squish的资料很少。特别是中文搜索。最近正好在使用这款工具&#xff0c;在使用中总结了一些知识&#xff0c;在这里和大家一起分享下。 Squish是froglogic公司的一款商业自动化工具&#xff0c;几年前好像是…

Squish for Qt:为Qt应用量身打造的自动化测试工具

转载地址&#xff1a;https://mp.weixin.qq.com/s?__bizMzI5MzA3NzU3OA&mid2649661399&idx1&sn7b584cfc54e529d6ce605274d8f7bc0b&chksmf46da8f2c31a21e4eccfe9ee0eb690045cdd8a074af0e57bceb8f605c5fcb2fb72c9d7334c28&mpshare1&scene1&srcid072…

基于GUI测试工具Squish的使用

转载自&#xff1a;http://www.readingday.cn/squish-for-qt-2/ 申请Squish试用 浏览器打开Squish官网&#xff08;https://www.froglogic.com/squish/free-trial/&#xff09;&#xff0c;填写试用申请表。您需要提供一个有效的邮箱地址&#xff0c;以便接收到Squish官方所发送…

浅析如何利用Squish实行 GUI自动化测试

1.引言 图形用户界面&#xff08;Graphical User Interface&#xff0c;简称 GUI&#xff0c;又称图形用户接口&#xff09;是指采用图形方式显示的系统操作用户界面。是软件与用户进行交互的主要方式&#xff0c;与早期计算机使用的命令行界面相比&#xff0c;图形界面对于用户…

关于Squish的介绍和简单使用说明

网络研讨会 | Squish for Qt: 为Qt应用量身打造的自动化测试工具_哔哩哔哩_bilibiliSquish是一款跨平台、支持多种开发技术的GUI自动化测试工具&#xff0c;基于对象识别的GUI自动化测试工具、支持各类操作系统、可为多种技术开发的应用程序提供GUI自动化测试。操作简单、脚本语…

3乘3魔方第四步_三阶魔方第四步

三阶魔方的第四步是顶棱翻色&#xff0c;首先转出黄色的顶层十字&#xff0c;将魔方顺时针旋转九十度&#xff0c;转到红色的一面&#xff0c;右边顺时针旋转九十度&#xff0c;将底层的白色面转动到上面&#xff0c;顶层再顺时针旋转九十度&#xff0c;右侧逆时针旋转九十度&a…

java还原三阶魔方_魔方小站四阶魔方教程2 一看就懂的魔方教程(魔方玩法视频教程+还原公式一步一步图解+3D动画)...

形成下图的样子, 这一步很简单,只需要学会一个很好理解的技术就行了,请看下面标准情况的例子,魔方 您可以用鼠标拖拽3D动画里的整个魔方,以看到魔方背面的变化。 TR U R U 我们要合并位于前面的这一对红白棱块 合并棱块。 将合并好的一对红白棱块转到右面。 旋转右面,你要…

魔方cfop公式软件_【番外篇】八大魔方快速还原法图解介绍汇总大全!

本篇在上一篇文章的基础上,主要介绍目前魔方圈主流的速拧还原解法。 本篇文章仅介绍主流的快速还原法即 速拧解法,不包括其他初级玩法等,初级玩法也很多(笑面虎、8355、棱先、角先等等),甚至有些独立还原者能创造属于自己的解法,有些解法思路巧妙,有些解法容易上手,总…