一、概念
用來(lái)指定如何在app內(nèi)部實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)
二、使用場(chǎng)景
端外拉起app后后室,跳轉(zhuǎn)到指定頁(yè)面
端內(nèi)跳轉(zhuǎn)到指定頁(yè)面
h5、native混狠、rn不同的頁(yè)面之間都可以互相跳轉(zhuǎn)岸霹、傳遞參數(shù)
三、目標(biāo)
一個(gè)UI頁(yè)面與一個(gè)uri關(guān)聯(lián)将饺,用Uri替代我們的頁(yè)面贡避。
跳轉(zhuǎn)的時(shí)候就不需要強(qiáng)依賴(lài)UI頁(yè)面去做匹配痛黎,而只需要通過(guò)一段字符串去匹配就行
實(shí)現(xiàn)頁(yè)面之間的解耦、跳轉(zhuǎn)刮吧、傳參
四湖饱、優(yōu)缺點(diǎn)分析
和傳統(tǒng)native路由跳轉(zhuǎn)相比較:
簡(jiǎn)單易讀。通過(guò)字符串實(shí)現(xiàn)跳轉(zhuǎn)頁(yè)面并傳參
頁(yè)面解耦杀捻。實(shí)現(xiàn)頁(yè)面間完全解耦
靈活性強(qiáng)井厌。可通過(guò)動(dòng)態(tài)下發(fā)不同的字符串致讥,動(dòng)態(tài)控制跳轉(zhuǎn)的邏輯
參數(shù)有限制仅仆。不支持復(fù)雜的數(shù)據(jù)格式
依賴(lài)客戶(hù)端路由模塊的實(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: 域名和路徑咳榜,用來(lái)指定頁(yè)面形態(tài),native姚糊、hrn贿衍、h5
-
query: 參數(shù)。注意:只支持字符串格式救恨。不包含端口號(hào)
pName: 頁(yè)面名稱(chēng)
容器參數(shù):設(shè)置容器的初始化參數(shù)
rcName: rn中指定頁(yè)面的入口組件
業(yè)務(wù)參數(shù): 頁(yè)面內(nèi)部使用的參數(shù)
示例:
app外
protocol://protal/containerType?pName=pageA&query=1
-
端外打開(kāi)native頁(yè)面:
-
端外打開(kāi)rn頁(yè)面:
-
端外打開(kāi)h5頁(yè)面:
app內(nèi)
- rn跳rn, h5跳rn
- rn跳native释树,h5跳native
- rn跳h5
6.2肠槽、參數(shù)
query信息分為三部分:
pName:頁(yè)面名稱(chēng)【必填】
給容器使用的參數(shù):指定容器的一些行為. 所有字段使用rnc開(kāi)頭
業(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)寫(xiě)
qurey字段名 | 含義 | 數(shù)據(jù)格式 | 默認(rèn)值 | 示例 | |
---|---|---|---|---|---|
pName | 頁(yè)面名稱(chēng)。rn里也指bundle的名稱(chēng) | 字符串 | 必填 | pName=pageA | |
rncDegradeUrl | 降級(jí)的url | urldecode以后得url鏈接 | undefined: 默認(rèn)沒(méi)有值 | https://www.baidu.com | |
rncDegradeVersion | 在某個(gè)版本以上降級(jí)桩盲,更低的版本不允許降級(jí) | 字符串 | undefined:默認(rèn)沒(méi)有值寂纪,不指定版本 | “1.0.0” | |
是否允許頁(yè)面降級(jí) | 字符串, '0' 或者 ‘1’ | “0”:不降級(jí) | 1 | ||
容器類(lèi)型 | "screen" | "view" | “screen” | ||
rncTransparent | 容器是否透明 | 字符串 “0” ~ “1” | “0”: 不透明赌结,可以設(shè)置其他0-1之間的值捞蛋。1:全透明 | 0 | |
rncHeight | 50% 400px | ||||
rncRouterType | 路由跳轉(zhuǎn)的類(lèi)型,用來(lái)控制是否走全頁(yè)面觸達(dá)的邏輯 | 字符串 | base | rncRouterType=base柬姚;rncRouterType=allPage拟杉,當(dāng)值為allPage的時(shí)候,相關(guān)參數(shù)需要按照全頁(yè)面觸達(dá)的要求傳參 | |
rncIsTranslucentBar | 是否沉浸式導(dǎo)航欄, | 字符串 | true | rncIsTranslucentBar=true | |
rncBarMode | 狀態(tài)欄文字的顏色 | 字符串 | dark | rncBarMode=dark | light |
hasTitleBar | 是否為原始的頭部(Android 專(zhuān)用) | 字符串 | false | hasTitleBar=false量承;hasTitleBar=true搬设;一般情況下不需要傳穴店,只有一些特殊頁(yè)面需要傳 |
字段名 | 含義 | 數(shù)據(jù)格式 | 默認(rèn)值 | 示例 |
---|---|---|---|---|
rcName | 加載的入口組件名稱(chēng),registerComponentName | 字符串 | index | name="demo" |
其他初始化參數(shù) | rn頁(yè)面初始化的時(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)的類(lèi)型 | 字符串 | ||
redirectValue | 具體的內(nèi)容 | json字符串 |
6.2.2泣洞、參數(shù)的數(shù)據(jù)格式
下表為支持的數(shù)據(jù)格式,以及對(duì)應(yīng)的簡(jiǎn)寫(xiě)默色,
只支持基本數(shù)據(jù)格式斜棚,不支持?jǐn)?shù)組、字典等復(fù)雜的結(jié)構(gòu)
數(shù)據(jù)格式 | iOS的類(lèi) | Android的類(lèi) | 簡(jiǎn)寫(xiě)前綴 |
---|---|---|---|
字符串 | NSString | String | S_ |
boolean | BOOL | boolean | B_ |
數(shù)字 int | NSInteger | int | I_ |
數(shù)字 float | float | float | F_ |
數(shù)字double | double | double | D_ |
示例:
比如需要往目標(biāo)頁(yè)面pageA傳遞三個(gè)參數(shù):
id:數(shù)字類(lèi)型该窗,1234535
name:字符串類(lèi)型,zhangsan
最終的跳轉(zhuǎn)鏈接如下:
protal/native?pName=pageA&id=I_1234535&name=S_zhangsan
6.2.3弟蚀、參數(shù)處理邏輯
除pName、rcName酗失、rnc開(kāi)頭的參數(shù)义钉,其它參數(shù)傳遞到rn頁(yè)面內(nèi)
6.2.4、當(dāng)前app的現(xiàn)狀
暫無(wú)通用路由模塊规肴,主要以硬編碼實(shí)現(xiàn)跳轉(zhuǎn)為主捶闸。
-
有全頁(yè)面觸達(dá)邏輯,
- 需要提前配置好拖刃,只支持配置好的頁(yè)面
6.2.5删壮、rn中頁(yè)面跳轉(zhuǎn)邏輯
Android現(xiàn)在的架構(gòu)設(shè)計(jì),對(duì)路由跳轉(zhuǎn)有何影響
-
Android實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)邏輯的實(shí)現(xiàn)是怎么樣的兑牡,和通用路由協(xié)議是否有沖突的地方
是否必須使用全頁(yè)面觸達(dá)央碟,如果不通過(guò)全頁(yè)面觸達(dá)是否有影響
除了全頁(yè)面觸達(dá)的邏輯,還有沒(méi)有實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的寫(xiě)法
全頁(yè)面觸達(dá)對(duì)通用路由協(xié)議的影響和相互之間的關(guān)系應(yīng)該是怎么樣的
七均函、風(fēng)險(xiǎn)
- 安全性
八亿虽、收益
頁(yè)面解耦
跳轉(zhuǎn)邏輯更靈活可控,可動(dòng)態(tài)配置
能力拓展:開(kāi)關(guān)系統(tǒng)開(kāi)關(guān)系統(tǒng)設(shè)計(jì)方案