注意:plus.runtime.appid,plus.runtime.version, plus.runtime.openURL() 在真机环境下才有效
使用 uni-app 开发,可将代码编译到iOS、Android、微信小程序等多个平台,升级时也需考虑多平台同步升级。
请求地址:https://www.example.com/update
请求方法:GET
请求数据:
1 2 3 4
| { "appid": plus.runtime.appid, "version": plus.runtime.version }
|
响应数据:
1 2 3 4 5
| { "status":1, "note": "修复bug1;\n修复bug2;", "url": "http://www.example.com/uniapp.apk" }
|
客户端实现
App启动时,向服务端上报当前版本号,服务端判断是否提示升级。
在App.vue的onLaunch中,发起升级检测请求,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| onLaunch: function () { 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); } } }) } } }) }
|
注意:App的升级检测代码必须使用条件编译,否则在微信环境由于不存在plus相关API,将会报错。
##服务端实现
根据客户端上报的版本号,比对服务端最新版本号,决定是否需要升级,若需升级则返回升级信息(rease notes、更新包地址等)
开发者可以根据服务端开发语言,自己实现升级检测逻辑,如下是一个php示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| header("Content-type:text/json"); $appid = $_GET["appid"]; $version = $_GET["version"]; $rsp = array("status" => 0); if (isset($appid) && isset($version)) { if ($appid === "__UNI__123456") { if ($version !== "1.0.1") { $rsp["status"] = 1; $rsp["note"] = "修复bug1;\n修复bug2;"; $rsp["url"] = "http://www.example.com/uniapp.apk"; } } } echo json_encode($rsp); exit;
|
####常见问题
版本检测需要打包app,真机运行基座无法测试。因为真机运行的plus.runtime.version是固定值。
原文地址:https://ask.dcloud.net.cn/article/34972