@@ -11,53 +11,99 @@ React native增量更新,支持多入口多业务。
1111
1212## 安装和使用
1313
14- #### iOS安装增量更新
14+ 客户端与后台相对独立,可集成客户端增量更新模块,自己构建后台版本接口,也可采用我们后台框架搭建(暂时还未开源)。
15+
16+ #### 安装增量更新
1517
1618工程根目录执行:
1719
1820` npm install --save react-native-diff-update `
1921
2022` react-native link react-native-diff-update `
2123
22- 打开工程可以看到` LLibraries ` 下` LDRNDiffUpdate ` 就是增量更新模块。
24+ 打开工程可以看到` Libraries ` 下` LDRNDiffUpdate ` 就是增量更新模块。
2325
2426
25- #### iOS使用
27+ #### iOS使用方式
2628
2729首先进行相关配置,配置信息在` LDRNBundleList.m ` 文件中,核心设置有:
2830
29- ```
30- appKey //应用唯一标识
31+ ``` json
32+ appKey //应用唯一标识
3133rnVersion //当前工程使用的React Native版本
32- originBundles //工程内置的业务bundle
33- originBundlesHash //业务bundle的md5 (可选)
34+ originBundles //工程内置的业务bundle
35+ originBundlesHash //业务bundle的md5 (可选)
3436entryJSName //bundle入口文件名称
35- patchFileName //补丁bundle入口文件名称
37+ patchFileName //补丁bundle入口文件名称
3638versionUrl //版本请求接口地址
3739```
3840
39- 配置好信息后,在自己的需要加载bundle的` viewController ` 中引入头文件` #import "LDRNDiffUpdate.h" ` ,然后指定jsBundle文件名即可:
41+ 配置好信息后,在自己的需要加载bundle的` viewController ` 中引入头文件` #import "LDRNDiffUpdate.h" ` ,然后指定jsBundle文件名即可(每个jsBundle代表一个独立的业务) :
4042
4143``` OC
4244NSURL *jsCodeLocation = [LDRNDiffUpdate jsBundleUrl:@"LDBusinessEntry"];
4345```
4446
47+ #### android相关方式
48+
49+ 在应用启动时启动RnModuleDiffUpdateService这个service,当应用关闭时请停止此service。
50+
51+ ## 版本请求接口说明
52+
53+ 每次启动app时,检测本地所有jsBundle是否有更新,如果有更新则根据下载条件浸没下载,再根据加载策略进行实时更新还是下次启动更新RN业务。也可以对有问题的jsBundle业务进行回滚操作。
54+
55+ ``` js
56+ 接口名称[POST ]:/ RN / patchVersion
57+
58+ 请求body:
59+ {
60+ appKey: " " , // app唯一标识
61+ appVersion: " " , // app当前版本
62+ rnVersion: " " , // react native集成版本
63+ resBody: {
64+ " LDBizName1" : " 1.2" , // 业务名称: 版本号
65+ " LDBizName2" : " 1.1" ,
66+ ......
67+ }
68+ }
69+
70+ 响应body:
71+
72+ ` ` ` json
73+ {
74+ retCode: '000000', //响应码:000000代表成功,其他代表失败
75+ retDesc: 'xxx', //失败原因描述
76+ rspBody: {
77+ patchs:[
78+ {
79+ "zipPath": "https://xx.xx.com/patchzip/LDBizModuleName1.zip", //下载路径
80+ "version": "1.3", //业务版本号
81+ "moduleName": "LDBizName1", //jsBundle名称
82+ "zipHash": "xxxxxx", //zip文件md5值
83+ "jsbundleHash": "xxxxxx", //差异合并后js文件md5值
84+ "downloadNow": "3", //0:总是下载, 1:wifi下载,2: 4g和wifi下载
85+ "uploadNow": "true", //true:即刻更新,false:下次启动更新
86+ "needGoBack": "false", //是否需要回退版本
87+ },
88+
89+ ......
90+ ]
91+ }
92+ }
4593
46- #### android安装增量更新
47- 工程根目录执行:
94+ ` ` `
4895
49- ` npm install --save react-native-diff-update-android `
96+ ## 安全策略
5097
51- ` react-native link react-native-diff-update-android `
98+ 增量更新安全主要涉及到jsBundle,jsBundle只是js代码,虽然经过混淆处理,但依然是纯明文,虽然可以对js做加密处理,但这种行为不太明智。
5299
53- #### android相关配置
54- ` 在应用启动时启动RnModuleDiffUpdateService这个service,当应用关闭时请停止此service `
100+ 主要考虑以下安全因素:
55101
56- ## 接口说明
102+ 1. 网络接口安全。这点其实和增量更新关系不大,版本接口复用原有后台安全策略即可。
57103
58- #### 版本请求接口
104+ 2. jsBundle篡改安全。为防止篡改js入侵app业务,需对jsBundle做签名校验,一是下载文件后校验其完整性,二是每次加载jsBundle时校验,这样就防止了整条链路篡改风险。
59105
60- ## 安全
106+ 3. jsBundle业务安全。因为jsBundle是明文,所以业务中需要进行加解密等敏感措施就不能在js侧实现,解决的办法是native实现加解密暴露给js接口调用。
61107
62108
63109
0 commit comments