本篇文章给大家带来了关于uniapp的相关知识,主要介绍了怎么实现资源在线升级以及热更新的相关问题,使用uni-app开发跨终端应用,可将代码编译到iOS、Android、微信小程序等平台,升级时也需考虑多平台同步升级,希 ...
|
本篇文章给大家带来了关于uniapp的相关知识,主要介绍了怎么实现资源在线升级以及热更新的相关问题,使用uni-app开发跨终端应用,可将代码编译到iOS、Android、微信小程序等平台,升级时也需考虑多平台同步升级,希望对大家有帮助。
推荐:《uniapp视频教程》 一、前言使用
二、wgt 资源升级包升级2.1 修改版本号首先,更新 2.2 发行然后,在 菜单->发行->原生App-制作移动App资源升级包
2.3 安装资源升级包应用的升级需要服务端与客户端配合完成,下面以本地测试过程中的操作举例说明: 存放资源 服务端接口 传入参数
返回参数
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] < 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);
}); });注意事项
客户端检测升级 // #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不支持资源升级包情况如下:
注意事项
但实际上热更新使用非常普遍,不管是原生开发中还是跨平台开发。
使用热更新需要注意:
三、整包升级接口约定 请求地址: 请求方法: 请求数据: {
"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 客户端实现
在 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 }注意: 3.2 数据表实现需维护一张数据表,用于维护
3.3 服务端实现根据客户端接收的版本号,比对服务端最新版本号,决定是否需要升级,若需升级则返回升级信息( 开发者可以根据服务端开发语言,自己实现升级检测逻辑,如下是一个 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;注意事项:
四、Uni-app 版本升级中心
4.1 升级中心 uni-upgrade-center - Admin
也可以手动填写一个地址(例如:https://appgallery.huawei.com/app/C10764638),就可以不用再上传文件。 如果是发布苹果版本,包地址则为应用在
4.2 前台检测更新 uni-upgrade-center-app
项目结构如下图所示:
注意:在手机基座上运行时获取到的版本号和appid是hbuilder和hbuilder的版本需要在文件里面手动设置。 4.3 工作原理升级中心uni-upgrade-center - Admin负责维护版本信息,并将版本信息维护至数据库中。 推荐:《uniapp教程》 以上就是uni-app跨平台应用开发之实现资源在线升级的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
