美文网首页
UNI-APP热更新前后端代码,妈妈再也不用担心我的代码了。

UNI-APP热更新前后端代码,妈妈再也不用担心我的代码了。

作者: 十一他叫路易斯 | 来源:发表于2020-05-06 10:15 被阅读0次
    image.png

    朋友,你是否天天更新前端几点鸡毛蒜皮代码,就要重新云打包一次。
    朋友,你是否流量不够多,每次更新功能就要下一次APP。
    朋友,你是否失眠过多,经常掉发?
    集美们,魔鬼来咯。他来了他来了!偶买噶,热更新他来了。


    image.png

    Uni在APP.vue 生命周期钩子onLaunch中进行设备判断,
    判断为手机,获取手机APPID,设备版本号。设备类型[安卓,苹果],那什么时候进行热更新,什么时候进行重更新呢?


    image.png

    重更新:服务端v2.1.103 客户端v1.1.103
    热更新:服务端v1.1.104 客户端v1.1.103

    uni打包wgt发给后端放在线上。


    image.png image.png

    注意!!!热更新必须为打包后的APP安装版本,真机调试无效!机调试无效!调试无效!

    前端代码块-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('热更新');
                                                           //调用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)

    //服务端配置APP 更新参数 ($app_info["version"] 版本号    $app_info['id'] APP对应APPID )
            $app_info = config('app.APP_INFO');
    
            $appid = $data["appid"]; //客户端APPID
            $version = $data["version"]; //客户端版本号
            $name = $data['name']; //客户端设备
    
            //判断更新类型
            //取出版本号重大更新标签  比如 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"]){
                //如果两个版本号一致,表示不更新
                $rsp["status"] = 0;
            }else if ($app_num - $data_num >= 1){
                //当两个版本号重大更新标签  相差大于或等于的时候 表示有重大更新
                $rsp["status"] = 1;
            }else if ($app_num - $data_num == 0){
                //其余不相等的为热更新,这里可以详细判断,但是没必要
                $rsp["status"] = 2;
            }
    
            if (isset($appid) && isset($version)) {
                if ($appid === $app_info['id']) { //校验appid
                    if ($version !==  $app_info['version']) { //这里是示例代码,真实业务上,最新版本号及relase notes可以存储在数据库或文件中
                        // 1为整包更新,2为热更新
                        if($rsp["status"]==1){
                            $rsp["note"] = "修复bug1;\n修复bug2;"; //release notes
                            if ($name=="Android") {
                                $rsp["url"] = "";   // Android下载地址
                            }else{
                                $rsp["url"] = "";  // IOS下载地址
                            }
                        }else if ($rsp["status"]==2){
                            $rsp["url"]= '';    // 热更新包
                        }
                    }
                }
            }
    

    相关文章

      网友评论

          本文标题:UNI-APP热更新前后端代码,妈妈再也不用担心我的代码了。

          本文链接:https://www.haomeiwen.com/subject/arrightx.html