1.官方教程方案(推荐)(打开app就会弹窗提醒):
官方教程:uni-app 整包升级/更新方案 – DCloud问答
但是研究了半天没有成功,能成功检查,但是点击了弹窗的确认按钮,并不能自动下载最新apk安装包。最后才发现官方教程uni.showModal覆盖了uni.request的res,所以不会打开网页就不会去下载了
直接给最终教程:
客户端实现
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: (con) => {
if (con.confirm) {
plus.runtime.openURL(res.data.url);
}
}
})
}
}
})
//#endif
}
服务端实现
根据客户端上报的版本号,比对服务端最新版本号,决定是否需要升级,若需升级则返回升级信息(rease 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;
?>
2.页面中显示的方案
view中添加
<p style="font-size: 10px;"> <br><br>APP | 当前版本:9.0
最新:{{ version }}
</p>
<view>
<div v-if="version !== '10.0'">
<p><strong>APP已经更新,请重新下载最新版本:</strong></p>
<a :href="upgradeLink" style="color: red;">下载 👉最新版本APP</a>
</div>
</view>
script中的data()添加
export default {
data() {
return {
version: null, // 用于存储提取的版本号
upgradeLink: 'https://你的apk地址/51.apk' // 升级地址
}
},
onload添加
onLoad() {
this.fetchVersion(); // 在组件挂载后发起请求提取版本号
},
methods添加
fetchVersion() {
uni.request({
url: 'https://你显示最新版本号的js远程文件/stver.js',
success: (res) => {
const scriptContent = res.data;
// 调整正则表达式以正确匹配版本号
const version = scriptContent.match(/document.writeln\("V(\d+\.\d+)/)[1];
if (version) { // 检查版本号是否存在
this.version = version;
} else {
console.error('无法提取版本号');
}
},
fail: (err) => {
console.error('Failed to fetch script:', err);
},
});
}, //获取版本号完
然后在服务器新建一个stver.js文件,里面写入,将js路径放到上面即可
document.writeln("V9.0");
app升级