app的router進化史
? ? ? ?我們在做iOS開發(fā)的時候,通常會在遠程推送,h5與native互相跳轉(zhuǎn)的時候使用到遠程URL;當我們只有幾個url要處理的時候,我們可以直接判斷URL的host用if.else來處理這完全沒有問題;而當我們有幾十個url要處理的時候,再用if.else就很不合適了,代碼會變得非常難維護,而且顯得太low了。這時候我們就要從實際需求考慮優(yōu)化代碼,每次一個遠程URL過來到進入一個VC,是不是都經(jīng)過一些相同的步驟?顯然是的!1.根據(jù)URL和其他條件判斷進入哪個VC(或者調(diào)起哪個服務(wù))2.獲取VC或者服務(wù)3.選擇跳轉(zhuǎn)方式進入VC;這就是app端router跳轉(zhuǎn)的主流程,當然在主流程之外你可能還有一些附加的需求要做,比如埋點,發(fā)個通知等等。
? ? ? ?其中步驟1和3每個url每個app的處理各不相同,而步驟2則可以按主流的rewrite邏輯來處理,即將遠程url轉(zhuǎn)化為nativeurl然后通過nativeurl找到相應(yīng)VC(ZZRouter就是這樣處理的,通過nativeurl找到相應(yīng)VC這一步是通過mediator處理的,基于castaway大神的CTMediator)。再來說說步驟1和3,步驟1其實就是一個redirect的邏輯,步驟3的跳轉(zhuǎn)方式在app里有push,present,switchTabBar,自定義跳轉(zhuǎn)等,在一個app里步驟1和3的這些特性很適合用plist文件配置,然后通過一個小的解析類來處理即可。而如果你想做成通用組件,那么步驟1的步驟3的邏輯則要抽象成protocol,由具體的app來實現(xiàn)。然后ZZRouter就誕生了。
用法
導入ZZRouter的pod后,你需要做如下步驟:
? ? ? ? 1.redirect邏輯和跳轉(zhuǎn)方式的邏輯實現(xiàn):新建不同的類實現(xiàn)ZZRouterJumpTypeProtocol(跳轉(zhuǎn)類型),ZZRouterRedirectProtocol(redirect 邏輯),ZZRouterSequentialIndependenceProtocol(與主流程無關(guān)的邏輯)
? ? ? ? 2.創(chuàng)建方法配置的plist文件,格式如下:

? ? ? ? ?3.創(chuàng)建url配置的plist文件,格式如下:

? ? ? ? ? 4.在AppDelegate的類里的didFinishLaunchingWithOptions方法中,調(diào)用注冊兩個plist文件的方法:
[ZZRouterHelper registMethodListName:@"RouterMethod" urlListName:@"UrlList"];
? ? ? ? ? ?5.配置url type里面的scheme

? ? ? ? ?6.遠程url規(guī)范:
一.scheme為url type里面配置的scheme
二.host為頁面描述
三.?后面接參數(shù)
四.&拼接參數(shù)
五.scheme,host,params均為小些,符合URL規(guī)范
示例:zzrouter://orderlist?orderid=23245&type=3
問題
關(guān)于ZZRouter如發(fā)現(xiàn)什么問題或bug可以github上建issue或者加qq群:436043199。