App更新主要分为两种方式
- 整包更新
- 热更新
最近项目碰到的app更新问题,安卓和iOS更新。
今天主要讲app整包更新(Android与IOS)
功能实现效果
android:检测新版本,后台下载,自动弹出安装页面
IOS:跳转 appStore app更新界面
一、点击检测版本
直接上代码哈,后面有效果图
通过plus.runtime.getProperty
获取APP版本信息,
// 获取APP版本号
getVersion() {
let that = this;
plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
this.version = wgtinfo.version.split('.').join('')
})
},
获取服务端自定义的最新新版信息
自定义信息如下
// Android APP动态更新数据
{
"code":"200",
"version":"1.2.7", //最新版本
"iosappid":"*********", //APP在ios中的唯一id
"url":"http://xxxxxx/xx/yy/xxxx.apk" //android安装包(1.2.7)
}
获取服务器信息,判断当前app版本信息是否小于服务器自定义版本信息
UpdatedVersion() { //检测版本
let that = this
this.$util.appReqeust('get', AppToUpdate, "", false).then(res => {
let Myversion = res.version.split('.').join('')
if (that.version < Myversion) { //有新版本
that.content = `可更新至 **${res.version}`
that.LoadreUrl = res.url
that.show = true
that.IosAppid = res.iosappid
} else { //无新版本
that.showToast()
}
})
},
确认更新
SubmitUpdate() { //点击确认更新
let platform = uni.getSystemInfoSync().platform;
this.show = false
if (platform == 'android') {
var dtask = plus.downloader.createDownload(this.LoadreUrl, {
filename: "_downloads/"
}, function(d, status) {
// 下载完成
if (status == 200) {
plus.runtime.install(plus.io.convertLocalFileSystemURL(d
.filename), {}, {}, function(error) {
plus.nativeUI.closeWaiting();
uni.showToast({
title: '安装失败!',
icon: "none",
mask: false,
duration: 1500
});
})
} else {
plus.nativeUI.closeWaiting();
uni.showToast({
title: '更新失败!',
icon: "none",
mask: false,
duration: 1500
});
}
});
var prg = 0;
var showLoading = plus.nativeUI.showWaiting("正在下载");
dtask.addEventListener('statechanged', function(task, status) {
switch (task.state) {
case 1:
showLoading.setTitle("正在下载");
break;
case 2:
showLoading.setTitle("已连接到服务器");
break;
case 3:
prg = parseInt(
(parseFloat(task.downloadedSize) /
parseFloat(task.totalSize)) *
100
);
showLoading.setTitle("版本更新中,正在下载" + prg + "% ");
break;
case 4:
plus.nativeUI.closeWaiting();
//下载完成
break;
}
});
dtask.start();
} else {
// ios自动更新
let appleId = this.IosAppid
plus.runtime.launchApplication({
action: `itms-apps://itunes.apple.com/cn/app/id${appleId}?mt=8`
}, function(e) {
// console.log('Open system default browser failed: ' + e.message);
});
}
},
如果检测到新版本,用户点击更新
android端 会在后台下载服务器上面的apk文件,完成后打开,只要apk文件的appid和应用包名一致,安装完成会替换低版本apk安装包
IOS 会跳转到App store市场,用户需要手动点击更新。 appleId
可以在IOS开发者中心的APP信息中查看
效果图
检测版本
确认更新
更新中 (android)
IOS端点击更新,会跳到到手机应用中心App store手动按照新版本