前言
用react-native(一下简称RN)开发的app的更新方案有很多,其中比较火的是热更新方案,有官方推荐的pushy和微软的code-push
文档很详细,接入也比较简单
这里主要介绍一种最传统的更新方案,也是很多原生开发在使用的方案——全量更新
全量更新
顾名思义,即每次更新通过http去下载新版本包去然后去做一个覆盖安装,这种做法在更新迭代中会避免很多不必要的麻烦,而且在这个5G都要到来的时代,网络资源大小的限制也显得不那么重要。
步骤
获取当前APP版本号
react-native是不提供获取版本号模块的,所以我们需要自己去写一个原生模块去获取当前app的版本号。
传送门:原生模块
新建一个模块文件夹
新建一个文件夹在android/app/src/main/java/com/your-app-name/下,这里我取名叫appinfo
新建一个类
在appinfo新建一个类为AppInfoModule.java
1 | package com.your-app-name.appinfo; |
注册模块
用于在JavaScript 中访问,新建一个AppInfoPackage.java
1 | package com.your-app-name.appinfo; |
暴露方法
暴露该模块,修改android/app/src/main/java/com/your-app-name/MainApplication.java文件的getPackages方法
1 | import com.your-app-name.appinfo.AppInfoPackage; |
JavaScript调用
1 | NativeModules.AppInfo.getVersion((version) => { |
版本校验
写一个版本比较接口,把获取到的版本号提交上去,以此来判断是否需要更新
提供一个php的版本比较方法:
1 | private function compareVersion($v1,$v2) |
下载新版本
版本校验需要更新,得到更新的地址后去下载保存到本机
获取读取存储的权限
1 | ...... |
react-native-fs下载
接入文档react-native-fs
1 | import RNFS from 'react-native-fs'; |
安装
下载成功后,考虑到用户体验,还得有一个自动安装吧~
当然去打开指定路径的文件也是需要我们自己写原生模块的。
按照上面的流程,我新建了update模块和UpdateModule.java类
这里流程很上面的获取版本号一致,我直接贴UpdateModule.java的代码
1 | package com.your-app-name.update; |
更新下逻辑代码,下载成功后自动安装
1 | ...... |