uniapp實現(xiàn)app自動更新詳細步驟
需求概述:
最近遇到的需求,掃碼核驗的app需要在線自動升級安裝(因app簡單上不了應用市場,所以調研用在線更新的辦法)
第一步:首先需要一個可以更新和獲取數(shù)據(jù)的接口(后端)
比如第一次打包時的版本名稱是1.0.1,那第一次將這個1.0.1版本的手動安裝到手機上后,后續(xù)想要實現(xiàn)自動更新,再次打包的版本名稱就必須大于1.0.1(因為本次實現(xiàn)的邏輯就是根據(jù)版本名稱)
版本號位置:manifest.json >> 基礎配置 >> 應用版本名稱當需要更新app的時候,改變版本名稱(必須大于上一個版本),開始打包
同時在后端的接口里同步更新你的此次打包的版本名稱
第二步:打包后的apk文件需要放在服務器上,然后拿到在服務器上的文件的地址(后續(xù)有用)
第三步:開始在App.vue里書寫前端邏輯(直接貼代碼)
- onLoad() : 在頁面加載的時候觸發(fā),只會調用一次,在onLoad() 函數(shù)中,可以通過 option獲取當前頁面路徑中的參數(shù)
- onShow(): 在頁面顯示時調用,也就是切換頁面的時候,或者切入前臺的時候觸發(fā),可以多次觸發(fā)
根據(jù)自己的需求來確定是寫在onShow還是onLoad
原理:獲取當前app的版本名稱,在onShow觸發(fā)的時候調接口比對當前app版本名稱和線上最新版本名稱,如果線上最新版本名稱大于當前版本名稱則下載最新的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}`;
//計算版本號大小,轉化大小
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('');
}
// 檢測版本號是否需要更新
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新包版本號大于本地版本號
if (compareVersion(i.dictDetails[0].value, this.version) === 1) {
uni.showModal({
title: '提示',
content: '發(fā)現(xiàn)新的應用安裝包,點擊確定立即更新',
success: function (res) {
if (res.confirm) {
console.log('用戶點擊確定');
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('用戶點擊取消');
}
}
});
} else {
}
}
}
}
});
});
},總結
到此這篇關于uniapp實現(xiàn)app自動更新詳細步驟的文章就介紹到這了,更多相關uniapp app自動更新內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JS實現(xiàn)京東首頁之頁面頂部、Logo和搜索框功能
這篇文章主要實現(xiàn)京東的頁面頂部,logo和搜索框功能,本文有效果展示,頁面布局詳細分析,具體實現(xiàn)代碼,介紹的非常詳細,具有參考借鑒價值,需要的的朋友參考下吧2017-01-01
JS使用for循環(huán)遍歷Table的所有單元格內容
JS遍歷Table的所有單元格內容思路是遍歷Table的所有Row,遍歷Row中的每一列,獲取Table中單元格的內容2014-08-08
深入解析ECMAScript?2023?中的新數(shù)組方法
ECMAScript?是一種標準化的腳本語言,它是?JavaScript?的規(guī)范。ECMAScript?2023?是?JavaScript?編程語言的更新,旨在帶來改進并使?JavaScript?程序可預測和可維護,這篇文章主要介紹了探索?ECMAScript?2023?中的新數(shù)組方法,需要的朋友可以參考下2023-12-12
Bootstrap3使用typeahead插件實現(xiàn)自動補全功能
這篇文章主要介紹了Bootstrap3使用typeahead插件實現(xiàn)自動補全功能的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
javascript將DOM節(jié)點添加到文檔的方法實例分析
這篇文章主要介紹了javascript將DOM節(jié)點添加到文檔的方法,對比分析了javascript的兩種節(jié)點創(chuàng)建的方法,涉及javascript節(jié)點操作及運行時間計算的相關技巧,需要的朋友可以參考下2015-08-08
JavaScript DOM 編程藝術(第2版)讀書筆記(JavaScript的最佳實踐)
閱讀了本書第五章關于使用JavaScript的最佳實踐,大部分的建議之前都有耳聞,不過閱讀之后有更深的體會2013-10-10
event.currentTarget與event.target的區(qū)別介紹
event.currentTarget與event.target的區(qū)別想大家在使用的時候不是很在意,本文以測試代碼來講解它門之間的不同2012-12-12

