整包更新和热更新组件 支持vue3 支持打开安卓、苹果应用市场,wgt静默更新 - app 自动在线更新-自动下载升级 - [组件网址](ext.dcloud.net.cn/plugin?id=7…)
新建一个js:(upDate.js)--写更新接口与代码逻辑
import silenceUpdate from '@/uni_modules/rt-uni-update/js_sdk/silence-update.js' //引入静默更新
import {
BASE_URL,
BASE_HOST} from '@/utils/common.js'
export default async function getapk() {
return new Promise((resolve, reject) => {
let baseurl = BASE_URL + BASE_HOST;
var server = baseurl + 'appupdate'; //检查更新地址
//#ifdef APP-PLUS
// 获取本地应用资源版本号
plus.runtime.getProperty(plus.runtime.appid, (inf) => {
let data = {
appid: plus.runtime.appid,
// version_type: uni.getSystemInfoSync().platform, //android或者ios
version: inf.versionCode // 打包时manifest设置的版本号
};
//获取服务器的版本号
uni.request({
method: "GET",
url: server, //示例接口
header: {
backdoor: 1,
},
data,
success: (res) => {
console.log('res:',res);
if (!res.data||res.statusCode!=200) {
reject('fasle',res.data);
return
} else {
resolve(true);
}
res.data.data = {
// 版本更新内容 支持<br>自动换行
describe: res.data.updatemsg,
edition_url: res.data.pkgurl || res.data
.wgturl, //apk、wgt包下载地址或者应用市场地址 安卓应用市场 market://details?id=xxxx 苹果store itms-apps://itunes.apple.com/cn/app/xxxxxx
edition_force: 1, //是否强制更新 0代表否 1代表是
package_type: res.data.pkgurl ? 0 :
1, //0是整包升级(apk或者appstore或者安卓应用市场) 1是wgt升级
edition_issue: 1, //是否发行 0否 1是 为了控制上架应用市场审核时不能弹出热更新框
edition_number: res.data
.version, //版本号 最重要的manifest里的版本号 (检查更新主要以服务器返回的edition_number版本号是否大于当前app的版本号来实现是否更新)
edition_name: res.data.remark, // 版本名称 manifest里的版本名称
edition_silence: 0 // 是否静默更新 0代表否 1代表是
}
//res.data.xxx根据后台返回的数据决定(我这里后端返回的是data),所以是res.data.data
//判断后台返回版本号是否大于当前应用版本号 && 是否发行 (上架应用市场时一定不能弹出更新提示)
if (Number(res.data.data.edition_number) > Number(inf.versionCode) &&
res
.data.data.edition_issue == 1) {
//如果是wgt升级,并且是静默更新 (注意!!! 如果是手动检查新版本,就不用判断静默更新,请直接跳转更新页,不然点击检查新版本后会没反应)
if (res.data.data.package_type == 1 && res.data.data
.edition_silence == 1) {
//调用静默更新方法 传入下载地址
silenceUpdate(res.data.data.edition_url)
} else {
//跳转更新页面 (注意!!!如果pages.json第一页的代码里有一打开就跳转其他页面的操作,
// 下面这行代码最好写在setTimeout里面设置延时3到5秒再执行)
uni.navigateTo({
url: '/uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update?obj=' +
JSON.stringify(res.data.data)
});
}
} else {
// 如果是手动检查新版本 需开启以下注释
/* uni.showModal({
title: '提示',
content: '已是最新版本',
showCancel: false
}) */
}
},
fail: (err) => {
console.log('失败:', err);
reject(false);
}
})
})
//#endif
});
}
app.vue--页面引入使用
<script>
import getapk from '@/utils/upDate.js'
export default {
onLaunch: async function() {
// #ifdef APP-PLUS
// 锁定屏幕方向 横屏正方向
plus.screen.lockOrientation('landscape-primary');
// plus.screen.lockOrientation('landscape-secondary');
plus.navigator.closeSplashscreen() //关闭启动界面
// #endif
//------------------ app自动热更新--------------------------------------------------
await getapk();
// ----------------------end---------------------------------------------------
},
onShow: function() {
// console.log('App Show')
},
onHide: function() {
// console.log('App Hide')
}
}
</script>
<style lang="scss">
/*每个页面公共css */
/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
@import "uview-ui/index.scss";
@import "uview-ui/demo.scss";
page {
height: 100% !important;
}
.wrap {
width: 95%;
margin: 0 auto;
}
</style>