h5+實現APP自動下載更新(hbuilder)
阿新 • • 發佈:2019-02-08
這裡的自動更新並非是熱更新,而只是單純檢測伺服器上是否有新的版本,如果有則下載安裝。
思路:在伺服器中配置一個版本檔案: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(); //開始下載任務
}
之後每次需要更新版本就不用讓使用者去掃描二維碼之類的,每次登陸進去自動判斷是否有新版本,如果確認下載,則下載安裝最新版本。