UNI-APP熱更新前后端代碼,媽媽再也不用擔(dān)心我的代碼了。

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"]= '';    // 熱更新包
                    }
                }
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容