一、概念
用來指定如何在app內(nèi)部實(shí)現(xiàn)頁面跳轉(zhuǎn)
二、使用場(chǎng)景
端外拉起app后,跳轉(zhuǎn)到指定頁面
端內(nèi)跳轉(zhuǎn)到指定頁面
h5、native、rn不同的頁面之間都可以互相跳轉(zhuǎn)、傳遞參數(shù)

三、目標(biāo)
一個(gè)UI頁面與一個(gè)uri關(guān)聯(lián),用Uri替代我們的頁面。
跳轉(zhuǎn)的時(shí)候就不需要強(qiáng)依賴UI頁面去做匹配,而只需要通過一段字符串去匹配就行
實(shí)現(xiàn)頁面之間的解耦、跳轉(zhuǎn)、傳參
四、優(yōu)缺點(diǎn)分析
和傳統(tǒng)native路由跳轉(zhuǎn)相比較:
簡(jiǎn)單易讀。通過字符串實(shí)現(xiàn)跳轉(zhuǎn)頁面并傳參
頁面解耦。實(shí)現(xiàn)頁面間完全解耦
靈活性強(qiáng)??赏ㄟ^動(dòng)態(tài)下發(fā)不同的字符串,動(dòng)態(tài)控制跳轉(zhuǎn)的邏輯
參數(shù)有限制。不支持復(fù)雜的數(shù)據(jù)格式
依賴客戶端路由模塊的實(shí)現(xiàn)
五、技術(shù)調(diào)研
動(dòng)態(tài)路由方案
- android
https://juejin.cn/post/7169017197442891806
- iOS
https://juejin.cn/post/7087875341460439071
六、方案內(nèi)容
6.1、Uri格式
整體參考uri的格式
基本格式 = protocol://hostname/path = 協(xié)議://主機(jī)地址/路徑

protocal: 協(xié)議頭,對(duì)應(yīng)吊起app的協(xié)議scheme,用于端外,吊起app
hostname/path: 域名和路徑,用來指定頁面形態(tài),native、hrn、h5
-
query: 參數(shù)。注意:只支持字符串格式。不包含端口號(hào)
pName: 頁面名稱
容器參數(shù):設(shè)置容器的初始化參數(shù)
rcName: rn中指定頁面的入口組件
業(yè)務(wù)參數(shù): 頁面內(nèi)部使用的參數(shù)
示例:
app外
protocol://protal/containerType?pName=pageA&query=1
-
端外打開native頁面:
-
端外打開rn頁面:
-
端外打開h5頁面:
app內(nèi)
- rn跳rn, h5跳rn

- rn跳native,h5跳native

- rn跳h5

6.2、參數(shù)
query信息分為三部分:
pName:頁面名稱【必填】
給容器使用的參數(shù):指定容器的一些行為. 所有字段使用rnc開頭
業(yè)務(wù)參數(shù): 業(yè)務(wù)內(nèi)部使用
protal/hrn?pName=pageA&rncDegradeUrl=www.baidu.com
protal/hrn?pName=pageA&rncDegradeUrl=www.baidu.com&rncDegradeVersion=1.0.0&rncTransparent=1&rcName=index&id=123&name=zhangsan
6.2.1、容器參數(shù)
query參數(shù)預(yù)留字段,指容器使用的字段:
預(yù)留字段命名規(guī)范:盡量避免和業(yè)務(wù)參數(shù)重名,推薦添加rn前綴 rnc react-native-container 和 react-native-config的簡(jiǎn)寫
| qurey字段名 | 含義 | 數(shù)據(jù)格式 | 默認(rèn)值 | 示例 | |
|---|---|---|---|---|---|
| pName | 頁面名稱。rn里也指bundle的名稱 | 字符串 | 必填 | pName=pageA | |
| rncDegradeUrl | 降級(jí)的url | urldecode以后得url鏈接 | undefined: 默認(rèn)沒有值 | https://www.baidu.com | |
| rncDegradeVersion | 在某個(gè)版本以上降級(jí),更低的版本不允許降級(jí) | 字符串 | undefined:默認(rèn)沒有值,不指定版本 | “1.0.0” | |
| 是否允許頁面降級(jí) | 字符串, '0' 或者 ‘1’ | “0”:不降級(jí) | 1 | ||
| 容器類型 | "screen" | "view" | “screen” | ||
| rncTransparent | 容器是否透明 | 字符串 “0” ~ “1” | “0”: 不透明,可以設(shè)置其他0-1之間的值。1:全透明 | 0 | |
| rncHeight | 50% 400px | ||||
| rncRouterType | 路由跳轉(zhuǎn)的類型,用來控制是否走全頁面觸達(dá)的邏輯 | 字符串 | base | rncRouterType=base;rncRouterType=allPage,當(dāng)值為allPage的時(shí)候,相關(guān)參數(shù)需要按照全頁面觸達(dá)的要求傳參 | |
| rncIsTranslucentBar | 是否沉浸式導(dǎo)航欄, | 字符串 | true | rncIsTranslucentBar=true | |
| rncBarMode | 狀態(tài)欄文字的顏色 | 字符串 | dark | rncBarMode=dark | light |
| hasTitleBar | 是否為原始的頭部(Android 專用) | 字符串 | false | hasTitleBar=false;hasTitleBar=true;一般情況下不需要傳,只有一些特殊頁面需要傳 |
| 字段名 | 含義 | 數(shù)據(jù)格式 | 默認(rèn)值 | 示例 |
|---|---|---|---|---|
| rcName | 加載的入口組件名稱,registerComponentName | 字符串 | index | name="demo" |
| 其他初始化參數(shù) | rn頁面初始化的時(shí)候,傳遞的業(yè)務(wù)參數(shù) | 字符串 | undefined |
native需要的參數(shù)(技術(shù)文檔:
<colgroup><col width="176"><col width="176"><col width="176"><col width="176"><col width="176"></colgroup>
| 參數(shù)名 | 含義 | 數(shù)據(jù)格式 | ||
|---|---|---|---|---|
| redirectType | native跳轉(zhuǎn)的類型 | 字符串 | ||
| redirectValue | 具體的內(nèi)容 | json字符串 |
6.2.2、參數(shù)的數(shù)據(jù)格式
下表為支持的數(shù)據(jù)格式,以及對(duì)應(yīng)的簡(jiǎn)寫,
只支持基本數(shù)據(jù)格式,不支持?jǐn)?shù)組、字典等復(fù)雜的結(jié)構(gòu)
| 數(shù)據(jù)格式 | iOS的類 | Android的類 | 簡(jiǎn)寫前綴 |
|---|---|---|---|
| 字符串 | NSString | String | S_ |
| boolean | BOOL | boolean | B_ |
| 數(shù)字 int | NSInteger | int | I_ |
| 數(shù)字 float | float | float | F_ |
| 數(shù)字double | double | double | D_ |
示例:
比如需要往目標(biāo)頁面pageA傳遞三個(gè)參數(shù):
id:數(shù)字類型,1234535
name:字符串類型,zhangsan
最終的跳轉(zhuǎn)鏈接如下:
protal/native?pName=pageA&id=I_1234535&name=S_zhangsan
6.2.3、參數(shù)處理邏輯
除pName、rcName、rnc開頭的參數(shù),其它參數(shù)傳遞到rn頁面內(nèi)
6.2.4、當(dāng)前app的現(xiàn)狀
暫無通用路由模塊,主要以硬編碼實(shí)現(xiàn)跳轉(zhuǎn)為主。
-
有全頁面觸達(dá)邏輯,
- 需要提前配置好,只支持配置好的頁面
6.2.5、rn中頁面跳轉(zhuǎn)邏輯

Android現(xiàn)在的架構(gòu)設(shè)計(jì),對(duì)路由跳轉(zhuǎn)有何影響
-
Android實(shí)現(xiàn)頁面跳轉(zhuǎn)邏輯的實(shí)現(xiàn)是怎么樣的,和通用路由協(xié)議是否有沖突的地方
是否必須使用全頁面觸達(dá),如果不通過全頁面觸達(dá)是否有影響
除了全頁面觸達(dá)的邏輯,還有沒有實(shí)現(xiàn)頁面跳轉(zhuǎn)的寫法
全頁面觸達(dá)對(duì)通用路由協(xié)議的影響和相互之間的關(guān)系應(yīng)該是怎么樣的
七、風(fēng)險(xiǎn)
- 安全性
八、收益
頁面解耦
跳轉(zhuǎn)邏輯更靈活可控,可動(dòng)態(tài)配置
能力拓展:開關(guān)系統(tǒng)開關(guān)系統(tǒng)設(shè)計(jì)方案