乐趣区

关于app:App热更新

开发 App,更新迭代是至关重要的,虽说有利用市场来更新,但实际上,在须要紧急公布一个新版本时,利用市场的更新是须要审核工夫的,以 Apple 为例,个别都是前一天公布,到第二天早上之前就会有后果,Android 市场也大多不一样,尤其遇到周末或者节假日,会向后顺延。所以 APP 利用内更新就至关重要。
目前 app 更新分为整包降级和 热更新 。整包降级这里不多说,就是将整个 apk 文件下载安装,但前提是包名和证书要不变,这样能力笼罩之前的版本。ios 间接装置 ipa 会失败,所以只能去 App store 去更新。
以下次要说下热更新。

一、介绍

热更新,是打包成 wgt 资源升级包,通过网络下载更新利用。一般来说,前端如果改变了一些 js 代码或者款式之类的,但上市场须要工夫,整包下载包体积又太大,所以此时思考热更新形式,是最合适不过的。

长处:

1 体积很小,用某个我的项目为例,整个 apk 大小在 38M 左右,wgt 包大略在 5M 左右,这意味着用户在下载时,速度快,流量少。
2 不须要装置,只须要调用相干 api 重启即可。

二、操作

以 uniapp 的我的项目为例,打包 wgt 就不必多说了,Hbuilderx 一看就会,留神版本号即可。
客户端通过调用接口,下载 wgt 包,来看下客户端怎么操作,代码供参考:

plus.runtime.getProperty(plus.runtime.appid, function(infor) {  
    uni.request({  
        url: 'http://',  
        data: {  
            version,name 
        },  
        success: (result) => {  
            var url= result.url;  
            var version=result.version
            if (version>Info.version) {  // 版本号的判断
                uni.downloadFile({  
                    url,  
                    success: (res) => {if (res.statusCode === 200) {  
                            plus.runtime.install(res.tempFilePath, {  
// 仅装置 wgt 和 wgtu 时失效,默认值 false,true 示意强制装置,不进行版本号的校验;false 则须要版本号校验,所以按照理论状况利用
                                force: false  
                            }, function() {  
                                // 下载完之后,须要进行利用的重启能力实现热更新。plus.runtime.restart();}, function(e) {console.error('install fail...');  
                            });  
                        }  
                    }  
                });  
            }  
        }  
    });  
});  

三、注意事项

资源热更新存在以下状况是不适宜用热更新的形式更新的:
1 仅在 App 平台利用,其余平台不实用;
2 原生插件的增改;
3 如果之前我的项目中并没有 nvue 文件,但更新时减少了 nvue 文件;
4 SDK 有调整,比方新增了 UNIPUSH 模块,Maps 模块等;
5 基座的匹配,如果前一个版本的基座跟 wgt 打包时的基座不同,则更新完之后,开启 app 会有提示信息。这个当然不好,当然也能够去配置疏忽这个揭示;但最好还是采纳整包降级的形式了。

四、Tip

Tip1: 如果整包降级时,版本号高于利用市场的版本,用户装置之后,再卸载,再从市场下载低版本,则会装置失败。但如果应用热更新的版本更新,则不会呈现从利用市场装置低版本失败的状况。以上这种状况存在的前提条件是:华为手机,存在隐衷空间。其余机型没有测试过。
Tip2:热更新应用是很广泛的,但不要在利用市场审核期间,弹出热更新的提醒。
Tip3:热更新内容应用 https 下载,防止被第三方劫持;

退出移动版