当app有新版本发布到apple store 或者应用市场,我们需要让用户在使用app的时候检测当前是不是最新的版本。如果不是,就帮他更新。在后台记录appid,最新的版本号,以及下载链接。在app首页【具体项目具体分析】onload周期中调用检测更新的方法。安卓静默下载,下载完成将弹出安装。IOS只能通过apple store下载。所以链接到苹果商店。
与后端约定版本号规则。由此定义检测逻辑的依据。app每次启动时,将自身版本号通过接口交给后端,后端对比服务器记录的版本号,判断是否有更新以及更新类型,返回不同的资源包下载地址,资源包是每次app更新后放在服务器。app端依据返回的参数自行下载更新资源更新。
一般在首页onLoad周期中调用更新检测
onLoad() {
//检查跟新
this.CheckUpdate();
},
appUpdate.js
// #ifdef APP-PLUS
//检测接口
const requestUrl = 'https://dev.szsti.org/cockpit/api/user/versionUpdate';
//苹果商店app链接
// const appstoreUrl = 'itms-apps://itunes.apple.com/cn/app/promoketo/id1478098035?mt=8';
export default function() {
// 设备系统平台--安卓||ios
var platform = uni.getSystemInfoSync().platform;
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
uni.request({
url: requestUrl,
data: {
"app_version": widgetInfo.version, //"1.0.0"
"app_id": "__UNI__2E99E70" //"__UNI__2E99E70" || widgetInfo.appid
},
method: "POST",
success: (result) => {
// 是否有更新,更新的类型和资源地址
// update:true||false
// type:"pkg"整包更新||"wgt" 热更新
// source_path:资源链接
console.log('检查跟新返回-》', result)
if (result.data.status != 200) return;
var data = result.data.data;
if (data.update) {
// 跟新类型
switch (data.type) {
case "pkg":
uni.showModal({
title: '提示',
content: '程序有新版本,是否立即更新?',
confirmText: '更新',
success: function(res) {
if (res.confirm) {
if (platform === "android") {
uni.downloadFile({
url: data.source_path,
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...');
uni.showToast({
title: '安装失败'
});
});
} else {
uni.showToast({
title: '更新失败'
});
}
}
});
} else {
plus.runtime.openURL(appstoreUrl)
// itms-apps://itunes.apple.com/cn/app/qq/id123456789?mt=8
// itms-apps://itunes.apple.com/cn/app/+app名字+/id+appleID+?mt=8
}
}
}
});
break;
case "wgt":
uni.showModal({
title: '提示',
content: '程序有资源更新',
confirmText: '更新',
success: function(res) {
if (res.confirm) {
uni.downloadFile({
url: data.source_path,
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...', e);
});
}
}
});
}
}
})
break;
}
}
}
});
});
}
// #endif