
image.png
朋友,你是否天天更新前端幾點(diǎn)雞毛蒜皮代碼,就要重新云打包一次。
朋友,你是否流量不夠多,每次更新功能就要下一次APP。
朋友,你是否失眠過多,經(jīng)常掉發(fā)?
集美們,魔鬼來咯。他來了他來了!偶買噶,熱更新他來了。

image.png
Uni在APP.vue 生命周期鉤子onLaunch中進(jìn)行設(shè)備判斷,
判斷為手機(jī),獲取手機(jī)APPID,設(shè)備版本號。設(shè)備類型[安卓,蘋果],那什么時(shí)候進(jìn)行熱更新,什么時(shí)候進(jìn)行重更新呢?

image.png
重更新:服務(wù)端v2.1.103 客戶端v1.1.103
熱更新:服務(wù)端v1.1.104 客戶端v1.1.103
uni打包wgt發(fā)給后端放在線上。

image.png

image.png
注意!!!熱更新必須為打包后的APP安裝版本,真機(jī)調(diào)試無效!機(jī)調(diào)試無效!調(diào)試無效!
前端代碼塊-App.vue
onLaunch: function() {
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
console.log(widgetInfo);
uni.request({
url: '不為人知的請求接口',
data: {
appid: widgetInfo.appid,
version: widgetInfo.version,
name: plus.os.name
},
success: res => {
console.log(res);
if (res.data.code == 200) {
console.log(res);
// 重大更新
if (res.data.data.status == '1') {
uni.showModal({
//提醒用戶更新
title: '更新提示',
content: res.data.note,
success: res => {
if (res.confirm) {
plus.runtime.openURL(res.data.url);
}
}
});
}
// 熱更新
if (res.data.data.status == '2') {
console.log('熱更新');
//調(diào)用uni-downloadFile方法,具體可看API文檔。
uni.downloadFile({
url: res.data.data.url,
success: downloadResult => {
if (downloadResult.statusCode === 200) {
console.log(downloadResult.tempFilePath);
plus.runtime.install(
downloadResult.tempFilePath,
{
force: false
},
function() {
console.log('install success...');
plus.runtime.restart();
},
function(e) {
console.error('install fail...');
}
);
}
},
fail: err => {
console.log(err);
console.log('熱更新失敗');
}
});
}
}
}
});
});
// #endif
}

image.png
后端代碼塊(Php)
//服務(wù)端配置APP 更新參數(shù) ($app_info["version"] 版本號 $app_info['id'] APP對應(yīng)APPID )
$app_info = config('app.APP_INFO');
$appid = $data["appid"]; //客戶端APPID
$version = $data["version"]; //客戶端版本號
$name = $data['name']; //客戶端設(shè)備
//判斷更新類型
//取出版本號重大更新標(biāo)簽 比如 1.2.101 取出1
$data_num = substr($data["version"],0,1);
$app_num = substr($app_info["version"],0,1);
if ($data["version"] == $app_info["version"]){
//如果兩個(gè)版本號一致,表示不更新
$rsp["status"] = 0;
}else if ($app_num - $data_num >= 1){
//當(dāng)兩個(gè)版本號重大更新標(biāo)簽 相差大于或等于的時(shí)候 表示有重大更新
$rsp["status"] = 1;
}else if ($app_num - $data_num == 0){
//其余不相等的為熱更新,這里可以詳細(xì)判斷,但是沒必要
$rsp["status"] = 2;
}
if (isset($appid) && isset($version)) {
if ($appid === $app_info['id']) { //校驗(yàn)appid
if ($version !== $app_info['version']) { //這里是示例代碼,真實(shí)業(yè)務(wù)上,最新版本號及relase notes可以存儲(chǔ)在數(shù)據(jù)庫或文件中
// 1為整包更新,2為熱更新
if($rsp["status"]==1){
$rsp["note"] = "修復(fù)bug1;\n修復(fù)bug2;"; //release notes
if ($name=="Android") {
$rsp["url"] = ""; // Android下載地址
}else{
$rsp["url"] = ""; // IOS下載地址
}
}else if ($rsp["status"]==2){
$rsp["url"]= ''; // 熱更新包
}
}
}
}