我使用uniapp開發(fā)的APP暫時(shí)還沒有上架,Android是將apk放在了服務(wù)上,將線上地址生成了二維碼,IOS是將ipa(企業(yè)版)依托線上分發(fā)網(wǎng)站生成二維碼,供內(nèi)部使用。
不管是上架還是內(nèi)部使用,開發(fā)APP后我們不可避免的要更新版本,我們暫不考慮熱更新,直接強(qiáng)制更新,如果不同意,那么就關(guān)閉APP!嘿哈~!
捕獲.PNG
用戶確認(rèn)時(shí)我們通過瀏覽器打開新版本的下載地址,進(jìn)行下載。
plus.runtime.openURL()
點(diǎn)擊取消時(shí)就無情的將APP進(jìn)行關(guān)閉。
plus.runtime.quit() // Android
IOS系統(tǒng)不支持這種關(guān)閉APP的方法,插件市場(chǎng)也有原生插件可以引用將其關(guān)閉,插件再原生也不如一行代碼來的省力不是么?
plus.ios.import("UIApplication").sharedApplication().performSelector("exit"); // IOS
上面就是所需要用到的核心拉,當(dāng)打開APP時(shí)就要觸發(fā),所以將此代碼寫在App.vue的onLaunch中;因?yàn)槲覀冡槍?duì)的是APP使用的,所以記得要填寫條件編譯,否則H5瀏覽時(shí)會(huì)報(bào)錯(cuò)!
export default {
onLaunch: function() {
const res = uni.getSystemInfoSync() // 獲取系統(tǒng)信息
//#ifdef APP-PLUS
uni.request({
url: "http://39.97.171.107:8881/ccbcase/m?xwl=api-v1/test-version/v1/getVersion",
data: {
"system": res.platform === "android" ? 0 : 1,
"versionNo": plus.runtime.version
},
success: (res) => {
if (res.data.success == true && res.data.versionInfo.isUpdate == true) {
uni.showModal({
title: "更新提示",
content: '新版本' + res.data.versionInfo.VERSION_NAME,
success: (req) => {
if (req.confirm) {
plus.runtime.openURL(res.data.versionInfo.APK_URL);
} else {
plus.os.name == "Android" ? plus.runtime.quit() : plus.ios.import("UIApplication").sharedApplication().performSelector("exit");
}
}
})
}
}
})
// #endif
}
}
在這里給后端傳了兩個(gè)參數(shù)一個(gè)手機(jī)系統(tǒng)以0或1進(jìn)行發(fā)送,還有一個(gè)就是當(dāng)前云打包時(shí)的版本號(hào),以便后端進(jìn)行版本的比對(duì)!
一個(gè)簡單的功能就可以實(shí)現(xiàn),如果要考慮當(dāng)前手機(jī)是否連接wifi,更新包的大小,安裝失敗或更新失敗等問題的話,后續(xù)還需持續(xù)的完善,供參考!