零)内容从网络获取试验后整理而成,基本上能符合大部分需求了
修复部分错误,补全部分内容,比如升级说明均来自服务器端配置,以及下载进度条的正确显示
增加服务器端代码及说明
增加app升级步骤。
一)先安装必要的插件:
ionic plugin add cordova-plugin-app-version
ionic plugin add cordova-plugin-file
ionic plugin add cordova-plugin-file-transfer
ionic plugin add cordova-plugin-file-opener2
二)app.js的run方法里添加代码
$ionicPlatform .ready(function () {//其他代码//自动下载升级安装 if (ionic.Platform.isAndroid()) { $http.jsonp('http://www.yourdomain.com/ver.php?callback=JSON_CALLBACK') .then(function (data) { var serverAppVersion = data.data.ver;//服务器 版本 $cordovaAppVersion.getVersionNumber() .then(function (version) { if (version != serverAppVersion) { var confirmPopup = $ionicPopup.confirm({ title: '有新的版本:' + serverAppVersion, template: data.data.desc, //从服务端获取更新的内容 cancelText: '取消', okText: '升级' }); confirmPopup.then(function (res) { if (res) { if (version != serverAppVersion) { $ionicLoading.show({ template: "开始下载,请等待..." }); var url = "http://www.yourdomain.com/app.apk"; var targetPath = "file:///mnt/sdcard/Download/app.apk"; var trustHosts = true; var options = {}; $cordovaFileTransfer.download(url, targetPath, options, trustHosts) .then(function (result) { $cordovaFileOpener2.open(targetPath, 'application/vnd.android.package-archive' ).then(function () { }, function (err) { }); $ionicLoading.hide(); }, function (err) { alert('下载失败'); }, function (progress) { //进度,这里使用文字显示下载百分比 var downloadProgress ; downloadProgress = (progress.loaded / progress.total) * 100; $ionicLoading.show({ template: '已经下载:' + Math.floor(downloadProgress) + '%' }); if (downloadProgress > 99) { $ionicLoading.hide(); } }); } } }); } }); }); }//if (ionic.Platform.isAndroid()) {});
*特别要注意,增加依赖关系,因为在浏览器里无法调试这部分代码,只能通过chrome://inspection来调试
三)后端的ver.php代码
"0.0.3", 'desc'=>'1.xxx2.yyyy3.zzz');$json = json_encode($response);echo "$callback($json)";
说明:callback是为了支持jsonp调用,这样使得能ver.php等被跨域调用
四)app升级步骤:
1.修改程序,编译apk,编译前记得修改/config.xml 里的version,提高一个版本号
2.上传apk到服务器指定的路径
3.修改服务器端ver.php代码:$response = array('ver'=>"0.0.3", 'desc'=>'1.xxx<br>2.yyyy<br>3.zzz');
建议注释原有语句,增加新语句,这样相当于就保留了完整的升级历史,在新语句里修改ver和config.xml里的version一致,同时修改desc里的升级内容。
<<END>>