1. 程式人生 > >h5+實現APP自動下載更新(hbuilder)

h5+實現APP自動下載更新(hbuilder)

這裡的自動更新並非是熱更新,而只是單純檢測伺服器上是否有新的版本,如果有則下載安裝。

思路:在伺服器中配置一個版本檔案:xxx.json

{
update:’yes’,//是否自動更新
version:’1.0.8’,//最新的版本號
url:’http://www.xxx.com/xxxxxx.apk‘//最新安裝包的URL路徑

}

在每次開啟H5APP的時候,去請求這個JSON,比對本地的manifest.json中的版本資訊是否和伺服器上的版本一致,如果有更新的版本,則下載最新的安裝包,下載到本地後,安裝該軟體覆蓋原有軟體。

程式碼:

ks.jsonp('http://www.xxxxx.cn/ksd/update_ksd.json'
,'update_ksd');//此為跨域函式,因為APP中的檔案都在本地,請求伺服器的話需要通過跨域才能拿到資料。 //伺服器上的json檔案 //因為是跨域的所以返回的是函式而不是JSON資料,引數是JSON格式 update_ksd({ state:'yes', version:'1.0.8', url:'http://www.ccccccc.com/xxxx.apk' }) function update_ksd(data)//跨域請求後的回撥函式 { var new_json=data; if(new_json.state=='yes')//如果是自動更新,則判斷版本號
{ $.ajax({ type: "get", url: "manifest.json", async: true, success: function(res) { var data = JSON.parse(res); var version=data.version.name; var new_version=new_json.version.replace(/\./g
,''); version=version.replace(/\./g,''); if(new_version>version)//比對版本號 { //console.log(new_version+'新版本'+version); plus.nativeUI.confirm("應用有新版本,是否立即下載更新?", function(event) { if(event.index == 1) { plus.nativeUI.showWaiting(); ks.update_ksd(new_json.url);//更新函式,在下面 } }, 'xxx', ['取消', '確認']); } } }); } } //ks.update_ksd========== update_ksd:function(url){ //console.log(url); //建立下載管理物件 var dtask = plus.downloader.createDownload(url,{}, function ( d, status ) { // 下載完成 if ( status == 200 ) { //下載成功後的回撥函式 plus.nativeUI.toast( "下載成功,準備安裝" + d.filename ); //安裝程式,第一個引數是路徑,預設的下載路徑在_downloads裡面 plus.runtime.install('_downloads/ksd.apk',{},function(){ plus.nativeUI.toast('安裝成功');},function(){plus.nativeUI.toast('安裝失敗');}); plus.nativeUI.closeWaiting(); } else { alert( "下載失敗 " + status ); } }); //dtask.addEventListener( "statechanged", onStateChanged, false ); dtask.start(); //開始下載任務 }

之後每次需要更新版本就不用讓使用者去掃描二維碼之類的,每次登陸進去自動判斷是否有新版本,如果確認下載,則下載安裝最新版本。