


Die plattformübergreifende Anwendungsentwicklung von Uni-App realisiert ein Online-Ressourcen-Upgrade
Dieser Artikel vermittelt Ihnen relevantes Wissen über uniapp. Er stellt hauptsächlich vor, wie Sie mit Uni-App Probleme im Zusammenhang mit der Aktualisierung von Online-Ressourcen lösen können. Der Code kann für iOS, Android usw. kompiliert werden Wenn Sie Plattformen wie WeChat-Miniprogramme aktualisieren, müssen Sie auch gleichzeitige Upgrades auf mehreren Plattformen in Betracht ziehen. Ich hoffe, dass dies für alle hilfreich ist.
Empfohlen: „uniapp-Video-Tutorial“
1. Einführung
Verwenden Sie uni-app
, um terminalübergreifende Anwendungen zu entwickeln, und der Code kann auf iOS kompiliert werden
, Android
, WeChat-Applet und andere Plattformen. Beim Upgrade müssen Sie auch gleichzeitige Upgrades auf mehreren Plattformen in Betracht ziehen. Unter anderem ist der Upgrade-Modus von uni-app
, der als Miniprogramm veröffentlicht wird, relativ einfach. Sie müssen nur den entwickelten Code an das Miniprogramm-Backend senden, und Benutzer werden nach der Genehmigung automatisch aktualisiert. uni-app
开发跨终端应用,可将代码编译到iOS
、Android
、微信小程序等多个平台,升级时也需考虑多平台同步升级。其中,uni-app
发布为小程序的升级模式较简单,只需将开发完的代码提交小程序后台,待审核通过后用户将自动升级。
HBuilderX 1.6.5
起,uni-app
支持生成 App
资源升级包wgt
。
二、wgt 资源升级包升级
2.1 修改版本号
首先,更新 manifest.json
中的版本号。
比如之前是 1.0.0
,那么新版本应该是 1.0.1
或 1.1.0
这样。
2.2 发行
然后,在 HBuilderX
中生成升级包(wgt
)。
菜单->发行->原生App-制作移动App资源升级包
生成结束会在控制台告知升级包的输出位置。
2.3 安装资源升级包
应用的升级需要服务端与客户端配合完成,下面以本地测试过程中的操作举例说明:
存放资源
将 %appid%.wgt
文件存放在服务器的 static
目录下,即 http://www.example.com/static/UNI832D722.wgt
。
服务端接口
约定检测升级的接口,地址为:http://www.example.com/update/
传入参数
-
name
String ‘’ 客户端读取到的应用名称,定义这个参数可以方便多个应用复用接口。 -
version
String ‘’ 客户端读取到的版本号信息
返回参数
-
update
Boolean false 是否有更新 -
wgtUrl
Stringwgt
包的下载地址,用于wgt
方式更新。 -
pkgUrl
Stringapk/ipa
包下载地址或AppStore
地址,用于整包升级的方式。
2.3.1 代码示例
下面是一个简单的服务端判定的示例,仅做参考,实际开发中根据自身业务需求处理。
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] <p>注意事项</p>
- 服务端的具体判定逻辑,请根据自身的业务逻辑灵活处理。
- 应用中的路径尽量不要包含特殊符号。
客户端检测升级
在 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
Ab
HBuilderX 1.6.5
unterstützt uni-app
das Generieren des App
-Ressourcen-Upgrade-Pakets wgt
. 2. Wgt-Ressourcen-Upgrade-Paket-Upgrade2.1 Versionsnummer ändern
Aktualisieren Sie zunächst die Versionsnummer in manifest.json
.
Wenn es beispielsweise vorher 1.0.0
war, dann sollte die neue Version 1.0.1
oder 1.1.0
sein.
2.2 Release
🎜Dann generieren Sie das Upgrade-Paket (wgt
) in HBuilderX
. 🎜{ "appid": plus.runtime.appid, "version": plus.runtime.version }🎜

Generieren bei Am Ende wird der Ausgabeort des Upgrade-Pakets auf der Konsole angezeigt.

2.3 Installieren Sie das Ressourcen-Upgrade-Paket
🎜Das Aktualisieren der Anwendung erfordert die Zusammenarbeit des Servers und des Clients. Das Folgende ist ein Beispiel für den Vorgang während des lokalen Testprozesses: 🎜🎜🎜Speichern von Ressourcen🎜Ersetzen Sie
%appid% Die .wgt
-Datei wird im Verzeichnis static
des Servers gespeichert, also http://www.example.com/static/UNI832D722.wgt
. 🎜🎜🎜Serverschnittstelle🎜Vereinbart zur Erkennung der Upgrade-Schnittstelle, die Adresse lautet:
http://www.example.com/update/
🎜🎜🎜Eingehende Parameter🎜🎜-
name
String '' Der vom Client gelesene Anwendungsname kann die Wiederverwendung der Schnittstelle durch mehrere Anwendungen erleichtern. 🎜 -
version
String '' Die vom Client gelesenen Versionsnummerninformationen🎜🎜🎜🎜Rückgabeparameter🎜🎜-
update
Boolean false Ob vorhanden Update🎜 -
wgtUrl
Stringwgt
Die Download-Adresse des Pakets, die für daswgt
-Update verwendet wird. 🎜 -
pkgUrl
Stringapk/ipa
-Paket-Download-Adresse oderAppStore
-Adresse, wird für das Upgrade des gesamten Pakets verwendet. 🎜🎜2.3.1 Codebeispiel
🎜Das Folgende ist ein einfaches Beispiel für die serverseitige Bestimmung. Es dient nur als Referenz. Es wird entsprechend Ihren eigenen Geschäftsanforderungen verarbeitet. 🎜{ "status":1,//升级标志,1:需要升级;0:无需升级 `在这里插入代码片` "note": "修复bug1;\n修复bug2;",//release notes "url": "http://www.example.com/uniapp.apk" //更新包下载地址 }
🎜Hinweise🎜- Bitte gehen Sie flexibel mit der spezifischen Beurteilungslogik des Servers entsprechend Ihrer eigenen Geschäftslogik um. 🎜
- Versuchen Sie, keine speziellen Symbole in den Pfad der Anwendung aufzunehmen. 🎜🎜🎜Client erkennt Upgrades
Erkennen Sie Upgrades inonLaunch
vonApp.vue
. Der Code lautet wie folgt: 🎜onLaunch: function () { //#ifdef APP-PLUS var server = "https://www.example.com/update"; //检查更新地址 var req = { //升级检测数据 "appid": plus.runtime.appid, "version": plus.runtime.version }; uni.request({ url: server, data: req, success: (res) => { if (res.statusCode == 200 && res.data.status === 1) { uni.showModal({ //提醒用户更新 title: "更新提示", content: res.data.note, success: (res) => { if (res.confirm) { plus.runtime.openURL(res.data.url); } } }) } } }) //#endif }
🎜🎜Die Situation, in der sich Ressourcen-Upgrade-Pakete befinden Nicht unterstützt lautet wie folgt: 🎜🎜- Der
SDK
-Teil wurde angepasst, z. B. das Hinzufügen desMaps
-Moduls usw. Es kann nicht aktualisiert werden über diese Methode und muss über das gesamte Paket aktualisiert werden. 🎜 - Diese Methode kann nicht für Ergänzungen und Änderungen an nativen Plug-Ins verwendet werden. 🎜
- Für den alten Kompilierungsmodus für nicht benutzerdefinierte Komponenten wurde dieser Modus entfernt. Aber für alle Fälle muss ich das im alten Kompilierungsmodus für nicht benutzerdefinierte Komponenten erklären, wenn das vorherige Projekt keine
nvue
-Datei, sondern eine neuenvue
-Datei hatte wurde im Update hinzugefügt, es wird nicht funktionieren. Da der Kompilierungsmodus für nicht benutzerdefinierte Komponenten dieweex
-Engine nicht ohne dienvue
-Datei packt und die native Engine nicht dynamisch hinzugefügt werden kann. Der benutzerdefinierte Komponentenmodus umfasst standardmäßig dieweex
-Engine, unabhängig davon, ob sich unter dem Projekt einenvue
-Datei befindet. 🎜🎜🎜🎜Notizen🎜🎜- 条件编译,仅在
App
平台执行此升级逻辑。 -
appid
以及版本信息等,在HBuilderX
真机运行开发期间,均为HBuilder
这个应用的信息,因此需要打包自定义基座或正式包测试升级功能。 -
plus.runtime.version
或者uni.getSystemInfo()
读取到的是apk/ipa
包的版本号,而非manifest.json
资源中的版本信息,所以这里用plus.runtime.getProperty()
来获取相关信息。 - 安装
wgt
资源包成功后,必须执行plus.runtime.restart()
,否则新的内容并不会生效。 - 如果
App
的原生引擎不升级,只升级wgt
包时需要注意测试wgt
资源和原生基座的兼容性⚠️。平台默认会对不匹配的版本进行提醒,如果自测没问题,可以在manifestt.json
中配置忽略提示。 - 应用市场为了防止开发者不经市场审核许可,给用户提供违法内容,对热更新大多持排斥态度。
但实际上热更新使用非常普遍,不管是原生开发中还是跨平台开发。
Apple
曾经禁止过jspatch
,但没有打击其他的热更新方案,包括cordovar、react native、DCloud
。封杀jspatch
其实是因为jspatch
有严重安全漏洞,可以被黑客利用,造成三方黑客可篡改其他App
的数据。使用热更新需要注意:
- 上架审核期间不要弹出热更新提示;
- 热更新内容使用
https
下载,避免被三方网络劫持; - 不要更新违法内容、不要通过热更新破坏应用市场的利益,比如
iOS
的虚拟支付要老老实实给Apple
分钱。
三、整包升级
接口约定
如下数据接口约定仅为示例,开发者可以自定义接口参数。请求地址:
https://www.example.com/update
请求方法:
GET
请求数据:
{ "appid": plus.runtime.appid, "version": plus.runtime.version }
响应数据:
{ "status":1,//升级标志,1:需要升级;0:无需升级 `在这里插入代码片` "note": "修复bug1;\n修复bug2;",//release notes "url": "http://www.example.com/uniapp.apk" //更新包下载地址 }
3.1 客户端实现
App
启动时,向服务端上报当前版本号,服务端判断是否提示升级。在
App.vue
的onLaunch
中,发起升级检测请求,如下:onLaunch: function () { //#ifdef APP-PLUS var server = "https://www.example.com/update"; //检查更新地址 var req = { //升级检测数据 "appid": plus.runtime.appid, "version": plus.runtime.version }; uni.request({ url: server, data: req, success: (res) => { if (res.statusCode == 200 && res.data.status === 1) { uni.showModal({ //提醒用户更新 title: "更新提示", content: res.data.note, success: (res) => { if (res.confirm) { plus.runtime.openURL(res.data.url); } } }) } } }) //#endif }
注意:
App
的升级检测代码必须使用条件编译,否则在微信环境由于不存在plus
相关API
,将会报错。3.2 数据表实现
需维护一张数据表,用于维护
APP
版本信息,主要字段信息如下:字段名称 数据类型 数据说明 AppID
varchar
mobile AppID version
varchar
应用市场版本号 notes
varchar
版本更新说明 url
varchar
应用市场下载URL。 注意:根据谷歌、App Store应用市场审核规范,应用升级只能通过提交应用市场更新,不能通过下载 apk
、IPA
安装方式更新应用。3.3 服务端实现
根据客户端接收的版本号,比对服务端最新版本号,决定是否需要升级,若需升级则返回升级信息(
rlease notes
、更新包地址
等)开发者可以根据服务端开发语言,自己实现升级检测逻辑,如下是一个
php
示例代码:header("Content-type:text/json"); $appid = $_GET["appid"]; $version = $_GET["version"]; //客户端版本号 $rsp = array("status" => 0); //默认返回值,不需要升级 if (isset($appid) && isset($version)) { if ($appid === "__UNI__123456") { //校验appid if ($version !== "1.0.1") { //这里是示例代码,真实业务上,最新版本号及relase notes可以存储在数据库或文件中 $rsp["status"] = 1; $rsp["note"] = "修复bug1;\n修复bug2;"; //release notes $rsp["url"] = "http://www.example.com/uniapp.apk"; //应用升级包下载地址 } } } echo json_encode($rsp); exit;
注意事项:
-
plus.runtime.appid
,plus.runtime.version
,plus.runtime.openURL()
在真机环境下才有效。 - 版本检测需要打包
app
,真机运行基座无法测试。因为真机运行的plus.runtime.version
是固定值。 - 根据谷歌应用市场的审核规范,应用升级只能通过提交应用市场更新,不能通过下载
apk
安装方式更新应用。apk
安装失败可能是因为缺少android.permission.INSTALL_PACKAGES
、android.permission.REQUEST_INSTALL_PACKAGES
权限导致,注意:添加上面两个权限无法通过谷歌审核。
四、Uni-app 版本升级中心
uni-app
提供了一整套版本维护框架,包含升级中心uni-upgrade-center - Admin
、前台检测更新uni-upgrade-center-app
。4.1 升级中心 uni-upgrade-center - Admin
uni-app
提供了版本维护后台应用升级中心uni-upgrade-center - Admin
,升级中心是一款uni-admin
插件,负责App
版本更新业务。包含后台管理界面、更新检查逻辑,App
内只要调用弹出提示即可。
在上传安装包界面填写此次发版信息,其中包地址可以选择手动上传一个文件到云存储,会自动将地址填入该项。也可以手动填写一个地址(例如:https://appgallery.huawei.com/app/C10764638),就可以不用再上传文件。
如果是发布苹果版本,包地址则为应用在
AppStore
的链接。
升级中心有以下功能点:- 云储存安装包
CDN
加速,使安装包下载的更快、更稳定 - 应用管理,对
App
的信息记录和应用版本管理。 - 版本管理,可以发布新版,也可方便直观的对当前
App
历史版本以及线上发行版本进行查看、编辑和删除操作。 - 版本发布信息管理,包括更新标题,内容,版本号,静默更新,强制更新,灵活上线发行的设置和修改。
- 原生
App
安装包,发布Apk
更新,用于App
的整包更新,可设置是否强制更新。 -
wgt
资源包,发布wgt
更新,用于App
的热更新,可设置是否强制更新,静默更新。 - App管理列表及App版本记录列表搜索。
- 只需导入插件,初始化数据库即可拥有上述功能。
- 也可以自己修改逻辑自定义数据库字段,和随意定制 UI 样式。
4.2 前台检测更新 uni-upgrade-center-app
uni-upgrade-center-app
负责前台检查升级更新。项目结构如下图所示:
检测更新视图如下图所示:
该插件提供如下功能:- Einheitliche Verwaltung von
App
undApp
aufAndroid
- undiOS
-PlattformenApp
Veröffentlichung und Upgrade von Installationspaketen undwgt
-Ressourcenpaketen.App
及App
在Android
、iOS
平台上App
安装包和wgt
资源包的发布升级。 - 基于
uni-upgrade-center
一键式检查更新,统一整包与wgt
Basierend auf - Schließen Sie die Überprüfung anhand der übergebenen Parameter ab, um zu bestimmen, welche Methode für dieses Update verwendet werden soll.
- Upgrade mit einem Klick. Logiken wie Popup-Boxen, Downloads, Installationen, erzwungene Neustarts usw. wurden integriert.
- Wenn der Download abgeschlossen ist und das Upgrade abgebrochen wird, wird das Installationspaket automatisch zwischengespeichert. Bei der nächsten Eingabe wird beurteilt, ob es die Installationsbedingungen erfüllt. Wenn die Beurteilung fehlschlägt, wird es automatisch gelöscht.
- Schön, praktisch und anpassbar.
uni-upgrade-center
, Ein-Klick-Suche nach Updates, Vereinheitlichung des gesamten Pakets undwgt
Ressourcenpaketaktualisierungen.Hinweis: Die Versionsnummer und appid, die beim Ausführen auf der Mobiltelefonbasis erhalten werden, sind die Versionen von hbuilder und hbuilder
und müssen manuell in der Datei festgelegt werden. 4.3 Funktionsprinzip
Das Front-End-Erkennungs- und Update-Plug-in uni-upgrade-center-app ist für die Überprüfung und Aktualisierung mit einem Klick verantwortlich, indem es Cloud-Funktionen aufruft, um die von der Datenbank verwalteten Versionsinformationen zu lesen.
Upgrade-Center uni-upgrade-center – Der Administrator ist für die Pflege der Versionsinformationen und die Pflege der Versionsinformationen in der Datenbank verantwortlich.Empfohlen: „uniapp-Tutorial
“🎜 - 条件编译,仅在
- Der
-
Das obige ist der detaillierte Inhalt vonDie plattformübergreifende Anwendungsentwicklung von Uni-App realisiert ein Online-Ressourcen-Upgrade. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

In dem Artikel werden Debugging -Strategien für mobile und Webplattformen erörtert, die Tools wie Android Studio, Xcode und Chrome Devtools sowie Techniken für konsistente Ergebnisse für OS- und Leistungsoptimierung hervorheben.

In dem Artikel werden Debugging -Tools und Best Practices für die UniApp -Entwicklung erörtert und sich auf Tools wie Hbuilderx, Wechat -Entwickler -Tools und Chrome Devtools konzentriert.

In dem Artikel werden End-to-End-Tests für UNIAPP-Anwendungen auf mehreren Plattformen erörtert. Es umfasst das Definieren von Testszenarien, die Auswahl von Tools wie Appium und Cypress, das Einrichten von Umgebungen, das Schreiben und Ausführen von Tests, die Analyse von Ergebnissen und Integration

In dem Artikel werden verschiedene Testtypen für UNIAPP-Anwendungen erörtert, einschließlich Einheiten, Integration, Funktions-, UI/UX-, Leistung, plattformübergreifender und Sicherheitstests. Es deckt auch die Gewährleistung der plattformübergreifenden Kompatibilität ab und empfiehlt Tools wie JES

In dem Artikel werden gemeinsame Leistungs-Anti-Patterns in der UniApp-Entwicklung wie übermäßige globale Datennutzung und ineffiziente Datenbindung erörtert und Strategien zur Identifizierung und Minderung dieser Probleme für eine bessere App-Leistung bietet.

In dem Artikel werden Profiling -Tools zur Identifizierung und Lösung von Leistungs Engpässen in UNIAPP erörtert, wobei sie sich auf Setup, Datenanalyse und Optimierung konzentrieren.

In dem Artikel werden Strategien zur Optimierung von Netzwerkanfragen in UNIAPP erörtert, konzentriert sich auf die Reduzierung der Latenz, die Implementierung von Caching und die Verwendung von Überwachungstools zur Verbesserung der Anwendungsleistung.

In dem Artikel wird die Optimierung von Bildern in UNIAPP für eine bessere Webleistung durch Komprimierung, reaktionsschnelles Design, faules Laden, Caching und Verwenden von WebP -Format erläutert.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft