【ionic App问题总结系列】ionic 如何更新app版本
生活随笔
收集整理的這篇文章主要介紹了
【ionic App问题总结系列】ionic 如何更新app版本
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ionic 如何進(jìn)行自動(dòng)更新
?
ionic App更新有兩種方式:第一種是普通的從遠(yuǎn)程下載apk,安裝并覆蓋舊版本。另外一種就是采用替換www文件夾的內(nèi)容,實(shí)現(xiàn)應(yīng)用內(nèi)更新,而無需下載安裝apk。?
這篇文章講的是通過第一種方式,來實(shí)現(xiàn)app的更新。?
App更新流程比較簡單,如下圖:?
這里用到的后端的接口字段如下:
1 { 2 "update_flag", // 更新的flag,一般取值分為不更新,普通更新,強(qiáng)制更新三種 3 "url", // 遠(yuǎn)程apk下載地址 4 "desc", // 更新描述 5 "" 6 }第一步:安裝所需要的插件
- cordova-plugin-network-information
- cordova-plugin-file
- cordova-plugin-file-operner2
- cordova-plugin-file-transfer
- cordova-plugin-app-version 1 cordova plugin add cordova-plugin-network-information cordova-plugin-file cordova-plugin-file-operner2 cordova-plugin-file-transfer cordova-plugin-app-version --save
第二步:添加AppUpdateService
我把App更新的邏輯封裝在了AppUpdateService中,代碼如下:
1 /** 2 * App檢查更新 Service 3 */ 4 .factory('AppUpdateService', ["$http", "Services", '$q', '$cordovaNetwork', '$cordovaAppVersion', '$ionicPopup', '$ionicLoading', '$cordovaFileTransfer', '$cordovaFileOpener2', '$timeout', 5 function ($http, Services, $q, $cordovaNetwork, $cordovaAppVersion, $ionicPopup, $ionicLoading, $cordovaFileTransfer, $cordovaFileOpener2, $timeout) { 6 return { 7 checkVersionData: checkVersionData, 8 checkVersion: checkVersion, 9 }; 10 11 /** 12 * 調(diào)用后端接口獲取版本更新信息,這里應(yīng)該換成你自己的邏輯 13 */ 14 function checkVersionData(data) { 15 var deferred = $q.defer(); 16 $http({method: 'GET', url: Services.CHECK_VERSION.url, params: data}).success(function (data) { 17 deferred.resolve(data.data); 18 }).error(function (err) { 19 deferred.reject(err); 20 }); 21 return deferred.promise; 22 } 23 24 25 function checkVersion(scope) { 26 var deferred = $q.defer(); 27 // params 是我這邊需要傳遞給后端接口的參數(shù),需更改為你自己的參數(shù) 28 var params = { 29 platform: 'android', 30 version: '' 31 }; 32 // 獲取手機(jī)的網(wǎng)絡(luò)狀態(tài),返回的值包括:WIFI CELL_4G CELL_3G等網(wǎng)絡(luò)狀態(tài),這里用來檢測手機(jī)是否處于WiFi狀態(tài) 33 var networkType = $cordovaNetwork.getNetwork(); 34 35 // 獲取App 內(nèi)的版本信息 36 $cordovaAppVersion.getVersionNumber().then(function (version) { 37 params.version = version; 38 39 // 獲取服務(wù)器版本信息,此處需更改為你自己的邏輯 40 checkVersionData(params) 41 .then(function (data) { 42 // 該接口返回的updateFlag取值為:0(不更新)、1(普通更新)、2(強(qiáng)制更新) 43 // 判斷是否需要更新 44 if (data.updateFlag) { 45 var json = { 46 title: '', 47 subTitle: data.description 48 }; 49 50 // 由于應(yīng)用內(nèi)的版本是1.0.0這種格式,所以可以通過正則替換成1.0.0->100,方便進(jìn)行版本號(hào)的比較 51 var nowVersionNum = parseInt(version.toString().replace(new RegExp(/(\.)/g), '0')); 52 53 // data.version為后端接口返回的需要更新的新版本號(hào) 54 var newVersionNum = parseInt(data.version.toString().replace(new RegExp(/(\.)/g), '0')); 55 if (newVersionNum > nowVersionNum) { 56 57 if (data.updateFlag == 1) { // 普通更新 58 if (networkType == 'wifi') { 59 json.title = 'APP版本更新' 60 } 61 else { 62 json.title = 'APP版本更新(建議WIFI下升級(jí))'; 63 } 64 updateAppPopup(json, scope).then(function (res) { 65 if (res == 'update') { 66 UpdateForAndroid(data.url); 67 } 68 }); 69 } 70 else if (data.updateFlag == 2 && type == 'wifi') { // 強(qiáng)制更新 71 UpdateForAndroid(data.url); 72 } 73 } 74 } 75 deferred.resolve(data.updateFlag); 76 }, function (err) { 77 deferred.reject(null); 78 }) 79 }); 80 81 return deferred.promise; 82 } 83 84 function updateAppPopup(json, scope) { 85 return $ionicPopup.show({ 86 title: json.title, 87 subTitle: json.subTitle, 88 scope: scope, 89 buttons: [ 90 { 91 text: '取消', 92 type: 'button-clear button-assertive', 93 onTap: function () { 94 return 'cancel'; 95 } 96 }, 97 { 98 text: '更新', 99 type: 'button-clear button-assertive border-left', 100 onTap: function (e) { 101 return 'update'; 102 } 103 } 104 ] 105 }); 106 } 107 108 function UpdateForAndroid(downloadUrl) { 109 $ionicLoading.show({ 110 template: "已經(jīng)下載:0%" 111 }); 112 var targetPath = "/sdcard/Download/tianmicaifu.apk"; 113 var trustHosts = true; 114 var options = {}; 115 $cordovaFileTransfer.download(downloadUrl, targetPath, options, trustHosts).then(function (result) { 116 $cordovaFileOpener2.open(targetPath, 'application/vnd.android.package-archive' 117 ).then(function () { 118 // 成功 119 }, function (err) { 120 console.log(err); 121 }); 122 $ionicLoading.hide(); 123 }, function (err) { 124 $ionicLoading.show({ 125 template: "下載失敗" 126 }); 127 $ionicLoading.hide(); 128 }, function (progress) { 129 $timeout(function () { 130 var downloadProgress = (progress.loaded / progress.total) * 100; 131 $ionicLoading.show({ 132 template: "已經(jīng)下載:" + Math.floor(downloadProgress) + "%" 133 }); 134 if (downloadProgress > 99) { 135 $ionicLoading.hide(); 136 } 137 }); 138 }); 139 } 140 141 }])第三步:在run()方法中調(diào)用
在run()中調(diào)用AppUpdateService便可以實(shí)現(xiàn)App更新了。代碼如下:
// 版本更新提醒 AppUpdateService.checkVersion($rootScope); View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/wfblogs/p/6825483.html
總結(jié)
以上是生活随笔為你收集整理的【ionic App问题总结系列】ionic 如何更新app版本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub的实践
- 下一篇: 物联网平台构架系列 (四):Amazon