apiclond检测更新
有时候需要给用户一个自主的权利,自主检测app是否是最新版本。(也可以上来提示用户更新消息,在index.html中写)
实现如下:
1.点击调用接口,检测是否有更新。
默认APICloud会自动检测版本更新,用户也可以在config.xml里配置autoUpdate为false,然后使用mam模块来检测更新,mam模块还提供自定义事件功能
示例代码:
var mam = api.require('mam'); mam.checkUpdate(function( ret, err ){ if (ret) { alert( JSON.stringify( ret ) ); } else{ alert( JSON.stringify( err ) ); } });
返回的数据:
{ status:true, //操作成功状态值 result: { update:true, //是否有更新 closed:true, //设备上当前版本是否被强行关闭 version:'1.0', //新版本版本号 versionDes:'', //新版本更新描述 closeTip:'', //提示用户应用版本被强行关闭时弹框的提示语 updateTip:'', //提示用户有更新时弹框的提示语 source:'', //新版本安装包的下载地址 time:'' //新版本的发布时间 } }
2.弹出comfirm框,让用户选择是否升级
layer.confirm('有新版本啦!<br/>最新版本:'+ret.result.version+'<br/>更新描述:<br/>'+updateTip+'<br/>发布时间:'+ret.result.time, { title:'更新提示', btn: ['立即更新','取消'] //按钮 }, function(){ }, function(){ });
3.执行下载操作,api中有download方法
api.download({ url: url, savePath: 'fs://test.rar', report: true, cache: true, allowResume: true }, function(ret, err) { if (ret.state == 1) { //下载成功 } else { } });
4.执行安装installApp方法
//Android用法: api.installApp({ appUri: 'file://xxx.apk' }); //iOS用法: api.installApp({ appUri: 'https://list.kuaiapp.cn/list/KuaiAppZv7.1.plist' //安装包对应plist地址 });
整合如下:
// 检查更新 function checkUpdate() { var mam = api.require('mam'); mam.checkUpdate(function( ret, err ){ if (ret) { if (!ret.status) { toast('服务器繁忙,请稍后再试'); return; } if (ret.result.update) { var updateTip; updateTip = ret.result.updateTip.replace(/\r\n/g,"<BR>"); updateTip =updateTip.replace(/\n/g,"<BR>"); layer.confirm('有新版本啦!<br/>最新版本:'+ret.result.version+'<br/>更新描述:<br/>'+updateTip+'<br/>发布时间:'+ret.result.time, { title:'更新提示', btn: ['立即更新','取消'] //按钮 }, function(){ if (api.systemType == "android") { api.download({ url : ret.result.source, report : true }, function(retdownload, err) { if (retdownload && 0 == retdownload.state) {/* 下载进度 */ api.toast({ msg : "正在下载应用" + retdownload.percent + "%", duration : 2000 }); } if (retdownload && 1 == retdownload.state) {/* 下载完成 */ var savePath = retdownload.savePath; api.installApp({ appUri : savePath }); } }); } if (api.systemType == "ios") { api.installApp({ appUri : ret.result.source }); } }, function(){ }); return; } else { toast('当前已是最新版本'); return; } } else{ toast('服务器繁忙,请稍后再试'); return; } }); }
//以上是网上参考的,如下项目中用到的:
checkUpdate: function() { var mam = api.require('mam'); mam.checkUpdate(function(ret, err) { if (ret) { var result = ret.result; if (result.update == true && result.closed == false) { var str = '新版本型号:' + result.version + ';<br/>更新提示语:' + result.updateTip ; api.confirm({ title: '有新的版本,是否下载并安装 ', msg: str, buttons: ['立即更新', '以后再说'] }, function(ret, err) { if (ret.buttonIndex == 1) { if (api.systemType == "android") { api.download({ url: result.source, report: true }, function(ret, err) { if (ret && 0 == ret.state) { /* 下载进度 */ // api.toast({ // msg : "正在下载应用" + ret.percent + "%", // // duration : 2000 // });
//引用的ui进度条模块 var UIActionProgress = api.require('UIActionProgress'); UIActionProgress.open({ maskBg: 'rgba(0,0,0,0.5)', styles: { h: 108, bg: '#fff', title: { size: 13, color: '#000', marginT: 10 }, msg: { size: 12, color: '#000', marginT: 5 }, lable: { size: 12, color: '#696969', marginB: 5 }, progressBar: { size: 2, normal: '#000', active: '#4876FF', marginB: 35, margin: 5 } }, data: { title: '正在下载应用', value: ret.percent + "%" } }, function(ret) { }); } if (ret && 1 == ret.state) { /* 下载完成 */ var savePath = ret.savePath; api.installApp({ appUri: savePath }); } }); } } }); } else {
//api.toast("暂无更新版本") return; } } else { api.toast('服务器繁忙,请稍后再试'); return; } }); },
参考文章:http://www.cnblogs.com/jiqing9006/p/6484618.html