前言:
我们要实现的用户进入apk首页之后,将安卓本机的apk版本和最新的apk版本对比,如果有更高级别的版本(版本号迭代的时候要逐渐增加,比如:本地100版本号(v1.0.0),最新的是102版本号(v1.0.2),那么就提示更新)要提示用户更新,去点击更新按钮下载最新的apk并且安装体验!目前这个仅仅针对apk(安卓轻应用,由于没有正式的安卓证书,没办法发布到安卓应用市场,但是发布的apk配合线上的接口服务也是可以在安卓上体验和使用的,首次点击下载链接或者将下载链接加入到草料二维码中扫码下载,记得用浏览器下载!!!)
正文:
一、首页版本检查并提示
首先uniapp跳过登录页面或者授权登录页面之后,就会进入首页,我们可以在App.vue中写入要检查版本号的相关提示操作。
<script>
export default {
// 此处globalData为了演示其作用,不是uView框架的一部分
data() {
return {
version: 100, //注意你在uniapp中打包(原生app-云打包)时候的初始版本号
}
},
methods: {
androidCheckUpdate() {
let _this = this;
uni.request({
url: 'https://errong.com/smartAppversion.json?_t='+ new Date().getTime(), //这个是把你apk部署外网服务器的tomcat能访问下载的地址,具体你根据自己的来,然后smartAppversion.json是存放你最新版本好的下载地址啥的和apk关联起来,下面我会展示出代码
data: {},
header: {},
success: (res) => {
if (res.data.code === 0) {
if (res.data.version > _this.version) { // 如果最新版本大于现在已经安装的App的版本
// 新建下载任务
var dtask = plus.downloader.createDownload(res.data.url, {
force: true
}, function(d, status) {
// 下载完成
if (status == 200) {
uni.showModal({
title: '下载完成,即将安装',
showCancel: false,
success: () => {
// 由于install只能安装本地的地址,所以先把下载的地址在本地找到,再调用install
plus.runtime.install(plus.io
.convertLocalFilesSystemURL(d
.filename), {},
function() {
console.log('success');
plus.runtime
.restart(); // 安装成功后重启
},
function(error) {
console.log(error.message);
uni.showToast({
title: "安装失败",
duration: 1500
})
})
}
})
} else {
uni.showToast({
title: '更新失败',
duration: 1500
})
}
})
dtask.start();
} else {
//如果是最新版本了,进入首页就会提示一下,建议屏蔽掉
uni.showModal({
title: '当前已是最新版本',
showCancel: false
})
}
}
}
})
}
},
onLaunch() {
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
this.version = wgtinfo.versionCode;
})
this.androidCheckUpdate(); // app中检测版本更新
// #endif
// 1.1.0版本之前关于http拦截器代码,已平滑移动到/common/http.interceptor.js中
// 注意,需要在/main.js中实例化Vue之后引入如下(详见文档说明):
// import httpInterceptor from '@/common/http.interceptor.js'
// Vue.use(httpInterceptor, app)
// process.env.VUE_APP_PLATFORM 为通过js判断平台名称的方法,结果分别如下:
/**
* h5,app-plus(nvue下也为app-plus),mp-weixin,mp-alipay......
*/
}
}
</script>
二、点击更新按钮检查版本和下载更新apk
这个针对的是用户点击按钮可以实现本地版本是不是最新的版本,如果是就不会下载最新的版本,并提示您的版本已经是最新的;如果不是就会下载安装更新你安卓本地的应用!
你可以在我的信息页面中加入一个按钮,用于检查更新旧版本,微信小程序中没啥必要:
<!-- #ifdef APP-PLUS -->
<div class="section" @click="handleCheckVersion">
<div>
<u-icon name="checkmark-circle-fill" size="20" style="margin-right: 5px;"></u-icon>检查更新
</div>
<span><u-loading v-if="isCheckVersion" mode="flower"></u-loading></span>
</div>
<!-- #endif -->
然后:
<script>
export default {
data() {
return {
innerVer: null,
version: null,
isCheckVersion: false,
}
},
methods: {
// 检查版本更新
handleCheckVersion() {
let _this = this;
// #ifdef APP-PLUS
_this.isCheckVersion = true;
plus.screen.lockOrientation('portrait-primary') // 竖屏锁定
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
_this.innerVer = widgetInfo.version;
_this.version = widgetInfo.versionCode;
uni.request({
url: 'https://errong.com/smartAppversion.json?_t='+ new Date().getTime(), //版本检测
data: {},
header: {},
success: (result) => {
if (result.data.code === 0) {
setTimeout(() => {
_this.isCheckVersion = false;
}, 1000);
console.log(result.data.version,_this.version);
if (result.data.version - _this.version > 0) { // 如果最新版本大于现在已经安装的App的版本
uni.showModal({
title: "更新提示",
content: "发现新版本,请确认下载更新?",
success: (res) => {
if (res.confirm) {
uni.showLoading({
title: '更新中...'
});
uni.downloadFile({
url: result.data.url,
success: (downloadResult) => {
uni.hideLoading();
if (downloadResult.statusCode === 200) {
plus.runtime.install(downloadResult.tempFilePath, {
force: true
}, function() {
console.log('App安装成功!');
uni.showToast('App安装成功!', 'success');
plus.runtime.restart();
}, function(e) {
console.log('App安装失败!');
})
}
}
});
}
}
})
} else {
_this.$showToast("当前已是最新版本V" + _this.innerVer, "none");
}
}
}
})
})
// #endif
},
},
}
</script>
三、服务器中tomcat部署文件
tomcat下载地址同级别直接丢入这两个文件:android_smartAppV1.0.apk、smartAppversion.json(和前面代码注意保持一致)
json文件的代码如下:
{
"code": 0,
"msg": "success",
"version": 206,
"url": "https://errong.com/android_smartAppV1.0.apk"
}
以上就是uniapp的安卓apk中检查更新的全部了!感觉有用的话可以点个关注+点赞+收藏!