1, 安装插件:
cordova plugin add cordova-plugin-app-version cordova plugin add cordova-plugin-file-transfer cordova plugin add cordova-plugin-file-opener22,获取app的版本号和服务器的版本号:
获取app的versionCode
window.cordova.getAppVersion.getVersionCode(function (versionCode) { // Toast(versionCode); resolve(versionCode); });cordova-plugin-app-version还有其他几个方法:
- (void)getAppName:(CDVInvokedUrlCommand*)command; - (void)getPackageName:(CDVInvokedUrlCommand*)command; - (void)getVersionNumber:(CDVInvokedUrlCommand*)command; - (void)getVersionCode:(CDVInvokedUrlCommand*)command;使用方法,类似getVersionCode
获取服务器的versionCode:
api.getLastVersion().then(res => { const data = (res.data && res.data.data) || {}; this.versionCode = data.versionCode || 0; this.versionName = data.versionName || ''; this.defaultUrl = data.defaultUrl || ''; // Toast(`${this.versionCode}, ${this.defaultUrl}`); _this.checkUpdate(); });对比校验
checkUpdate() { this.$bridge.getLastVersionCode().then(data => { if (this.versionCode > data) { this.$dialog.confirm({ title: '版本更新', message: `当前最新版本为:${this.versionName},请更新!` }).then(() => { this.$toast('下载应用中,请耐心等待!'); //下载并打开apk this.$bridge.downLoadApk(this.defaultUrl).then(result => { //console.debug('success' + result); }).catch(err => { this.$toast('下载失败,请检查网络是否畅通!'); // console.debug(err + 'err=========='); }); // const downLoadDom = this.$refs.downLoad; // downLoadDom.setAttribute('ref', this.defaultUrl); // downLoadDom.click(); }).catch(cancel => { // console.debug('取消更新' + cancel); }); } }); },2,下载应用:
downLoadApk(url) { return ready((resolve, reject) => { //事件监听deviceready的回调 if (isApp) { //是否app const _this = this; const FileTransfer = window.FileTransfer; const fileTransfer = new FileTransfer(); // const uri = encodeURI('https://obs-xa001.obs.cn-north-1.myhuaweicloud.com/xiongan-app/xacx.apk'); const fileURL = 'cdvfile://localhost/temporary/tuner.apk';//经过测试这个地址没有问题,可以下载和安装 const targetPath = window.cordova.file.externalDataDirectory + 'xionganchuxing.apk';//这个地址也可以下载和安装 fileTransfer.download( encodeURI(url), //服务器地址 targetPath, //本地存储地址 function (entry) { //下载完成回调 Toast('应用下载完成!'); //console.debug('download complete: ' + JSON.stringify(entry) ); _this.openApk(targetPath, resolve, reject); // resolve(entry); }, function (error) { //下载失败回调 // console.debug('download error: ' + JSON.stringify(error)); reject(error); }, false, {} ); } }); }3,打开app
//打开Apk openApk(targetUrl, resolve, reject) { if (isApp) { //console.debug('开始打开apk!' + targetUrl + 'fileOpen2' + window.cordova.plugins.fileOpener2); try { window.cordova.plugins.fileOpener2.open( targetUrl, 'application/vnd.android.package-archive', //打开apk function onSuccess(data) { console.debug('打开Apk成功' + targetUrl + 'data:' + data); resolve(data); }, function onError(error) { reject(error); // console.debug('出错!请在' + targetUrl + '目录下查看, error' + error); } ); } catch (e) { reject(e); console.debug('openApkError' + e); } } }Ps:里面的ready, isApp,console.debug都是项目中已经封装的函数,主要还是思路。