uniapp實(shí)現(xiàn)app自動(dòng)更新詳細(xì)步驟
需求概述:
最近遇到的需求,掃碼核驗(yàn)的app需要在線(xiàn)自動(dòng)升級(jí)安裝(因app簡(jiǎn)單上不了應(yīng)用市場(chǎng),所以調(diào)研用在線(xiàn)更新的辦法)
第一步:首先需要一個(gè)可以更新和獲取數(shù)據(jù)的接口(后端)
比如第一次打包時(shí)的版本名稱(chēng)是1.0.1,那第一次將這個(gè)1.0.1版本的手動(dòng)安裝到手機(jī)上后,后續(xù)想要實(shí)現(xiàn)自動(dòng)更新,再次打包的版本名稱(chēng)就必須大于1.0.1(因?yàn)楸敬螌?shí)現(xiàn)的邏輯就是根據(jù)版本名稱(chēng))
版本號(hào)位置:manifest.json >> 基礎(chǔ)配置 >> 應(yīng)用版本名稱(chēng)當(dāng)需要更新app的時(shí)候,改變版本名稱(chēng)(必須大于上一個(gè)版本),開(kāi)始打包
同時(shí)在后端的接口里同步更新你的此次打包的版本名稱(chēng)
第二步:打包后的apk文件需要放在服務(wù)器上,然后拿到在服務(wù)器上的文件的地址(后續(xù)有用)
第三步:開(kāi)始在App.vue里書(shū)寫(xiě)前端邏輯(直接貼代碼)
- onLoad() : 在頁(yè)面加載的時(shí)候觸發(fā),只會(huì)調(diào)用一次,在onLoad() 函數(shù)中,可以通過(guò) option獲取當(dāng)前頁(yè)面路徑中的參數(shù)
- onShow(): 在頁(yè)面顯示時(shí)調(diào)用,也就是切換頁(yè)面的時(shí)候,或者切入前臺(tái)的時(shí)候觸發(fā),可以多次觸發(fā)
根據(jù)自己的需求來(lái)確定是寫(xiě)在onShow還是onLoad
原理:獲取當(dāng)前app的版本名稱(chēng),在onShow觸發(fā)的時(shí)候調(diào)接口比對(duì)當(dāng)前app版本名稱(chēng)和線(xiàn)上最新版本名稱(chēng),如果線(xiàn)上最新版本名稱(chēng)大于當(dāng)前版本名稱(chēng)則下載最新的apk安裝更新
onShow: function() { console.log('App Show') plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { this.version = widgetInfo.version uni.request({ url: 'http://xxxx.cczu.edu.cn:8081/api/dict', success: (res) => { function compareVersion(version1, version2) { const newVersion1 = `${version1}`.split('.').length < 3 ? `${version1}`.concat('.0') : `${version1}`; const newVersion2 = `${version2}`.split('.').length < 3 ? `${version2}`.concat('.0') : `${version2}`; //計(jì)算版本號(hào)大小,轉(zhuǎn)化大小 function toNum(a){ const c = a.toString().split('.'); const num_place = ["", "0", "00", "000", "0000"], r = num_place.reverse(); for (let i = 0; i < c.length; i++){ const len=c[i].length; c[i]=r[len]+c[i]; } return c.join(''); } // 檢測(cè)版本號(hào)是否需要更新 function checkPlugin(a, b) { const numA = toNum(a); const numB = toNum(b); return numA > numB ? 1 : numA < numB ? -1 : 0; } return checkPlugin(newVersion1 ,newVersion2); } for (let i of res.data.content) { if (i.description === 'app版本') { // 1代表app新包版本號(hào)大于本地版本號(hào) if (compareVersion(i.dictDetails[0].value, this.version) === 1) { uni.showModal({ title: '提示', content: '發(fā)現(xiàn)新的應(yīng)用安裝包,點(diǎn)擊確定立即更新', success: function (res) { if (res.confirm) { console.log('用戶(hù)點(diǎn)擊確定'); uni.showLoading({ title: '更新中……' }) uni.downloadFile({ // 存放最新安裝包的地址 url: 'http://xxxx.xxxx.com/__UNI__xxxx.apk', success: (downloadResult) => { uni.hideLoading(); if (downloadResult.statusCode === 200) { uni.hideLoading(); plus.runtime.install(downloadResult.tempFilePath,{ force: false }, function() { console.log('install success...'); plus.runtime.restart(); }, function(e) { uni.hideLoading(); console.error('install fail...'); }); } } }); } else if (res.cancel) { console.log('用戶(hù)點(diǎn)擊取消'); } } }); } else { } } } } }); }); },
總結(jié)
到此這篇關(guān)于uniapp實(shí)現(xiàn)app自動(dòng)更新詳細(xì)步驟的文章就介紹到這了,更多相關(guān)uniapp app自動(dòng)更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)文字長(zhǎng)按復(fù)制與一鍵復(fù)制功能全過(guò)程
微信小程序開(kāi)發(fā)是依托微信的,所以他的代碼是嵌入在微信的原始代碼之中的,這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)文字長(zhǎng)按復(fù)制與一鍵復(fù)制功能的相關(guān)資料,需要的朋友可以參考下2023-03-03JS實(shí)現(xiàn)京東首頁(yè)之頁(yè)面頂部、Logo和搜索框功能
這篇文章主要實(shí)現(xiàn)京東的頁(yè)面頂部,logo和搜索框功能,本文有效果展示,頁(yè)面布局詳細(xì)分析,具體實(shí)現(xiàn)代碼,介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-01-01js 異步操作回調(diào)函數(shù)如何控制執(zhí)行順序
本文為大家講解下js異步操作時(shí)回調(diào)函數(shù)如何控制執(zhí)行順序,感興趣的朋友可以參考下2013-12-12JS使用for循環(huán)遍歷Table的所有單元格內(nèi)容
JS遍歷Table的所有單元格內(nèi)容思路是遍歷Table的所有Row,遍歷Row中的每一列,獲取Table中單元格的內(nèi)容2014-08-08深入解析ECMAScript?2023?中的新數(shù)組方法
ECMAScript?是一種標(biāo)準(zhǔn)化的腳本語(yǔ)言,它是?JavaScript?的規(guī)范。ECMAScript?2023?是?JavaScript?編程語(yǔ)言的更新,旨在帶來(lái)改進(jìn)并使?JavaScript?程序可預(yù)測(cè)和可維護(hù),這篇文章主要介紹了探索?ECMAScript?2023?中的新數(shù)組方法,需要的朋友可以參考下2023-12-12Bootstrap3使用typeahead插件實(shí)現(xiàn)自動(dòng)補(bǔ)全功能
這篇文章主要介紹了Bootstrap3使用typeahead插件實(shí)現(xiàn)自動(dòng)補(bǔ)全功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07javascript將DOM節(jié)點(diǎn)添加到文檔的方法實(shí)例分析
這篇文章主要介紹了javascript將DOM節(jié)點(diǎn)添加到文檔的方法,對(duì)比分析了javascript的兩種節(jié)點(diǎn)創(chuàng)建的方法,涉及javascript節(jié)點(diǎn)操作及運(yùn)行時(shí)間計(jì)算的相關(guān)技巧,需要的朋友可以參考下2015-08-08JavaScript DOM 編程藝術(shù)(第2版)讀書(shū)筆記(JavaScript的最佳實(shí)踐)
閱讀了本書(shū)第五章關(guān)于使用JavaScript的最佳實(shí)踐,大部分的建議之前都有耳聞,不過(guò)閱讀之后有更深的體會(huì)2013-10-10event.currentTarget與event.target的區(qū)別介紹
event.currentTarget與event.target的區(qū)別想大家在使用的時(shí)候不是很在意,本文以測(cè)試代碼來(lái)講解它門(mén)之間的不同2012-12-12