Appearance
路由系統(MGJRouter)
最後更新:2026-04-07
功能說明
BBSport iOS 專案採用 MGJRouter(MGJRouterBackup)作為模組間解耦的路由中樞。各業務模組(登入註冊、個人中心、錢包、體育、遊戲)透過 URL Pattern 註冊服務,其他模組以 MGJRouter.openURL 或 MGJRouter.object(forURL:) 跨模組呼叫,無需直接引用目標類別。
使用者流程
路由系統為底層機制,使用者無直接感知。主要作用:
- 推播通知點擊 → 跳轉對應賽事詳情或直播間
- WebView H5 呼叫原生頁面(充值、客服、登入等)
- 影片播放器內點擊跳轉到其他頁面
頁面跳轉(主要路由場景)
| 場景 | 路由 URL |
|---|---|
| 開啟客服 | WL://OpenLiveChatVC |
| 開啟充值頁 | WL://GetUserInfoVC |
| 開啟登入頁 | LG://OpenLoginRegisterVC |
| 開啟賽事詳情 | SPORT://OpenEventDetailController |
| 開啟主播詳情 | SPORT://OpenStreamerDetailController |
| Token 免登入 | WL://LoginByToken |
技術視角(開發看這裡)
相關檔案
| 類型 | 檔案路徑 |
|---|---|
| 路由頭文件 | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Main/RouterComponent.h |
| 全域開關(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Main/IFMainSwitch.h |
| 全域開關實作(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Main/IFMainSwitch.m |
| URL 列表 Model Header | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Main/BBUrlListModel.h |
| URL 列表 Model 實作 | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Main/BBUrlListModel.m |
| 登入/錢包常數(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFLoginRegisterConfig.h |
| 登入/錢包常數實作(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFLoginRegisterConfig.m |
| 用戶資訊常數(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFUserInfoConfig.h |
| 用戶資訊常數實作(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFUserInfoConfig.m |
| 錢包常數(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/LFWalletInfoConfig.h |
| 錢包常數實作(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/LFWalletInfoConfig.m |
| 體育常數(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFSportConfig.h |
| 體育常數實作(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFSportConfig.m |
| 直播常數(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFLiveConfig.h |
| 直播常數實作(OC) | /Users/user/Work/bbsport-new/BBSport/Tools/RouterComponent/Classes/Service/IFLiveConfig.m |
| 路由註冊(登入) | /Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Login_Register/ModuleApi.m |
| 路由註冊(錢包) | /Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Service/WalletModuleApi.m |
| 路由註冊(個人中心) | /Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Service/ConfigManager.swift |
| 路由註冊(體育) | /Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/Common/SportComponent.swift |
| 路由註冊(彩票) | /Users/user/Work/bbsport-new/BBSport/Tab/游戏/Amuse/Lottery/Classes/Config/LotteryConfigManager.swift |
API
路由系統為 App 內部機制,不涉及外部 API。
資料模型
URL Scheme 分類
| Scheme | 用途 |
|---|---|
LG:// | 登入相關(Login) |
WL:// | 錢包及通用服務(Wallet) |
HP:// | 首頁相關 |
UI:// | UI 元件 |
SPORT:// | 體育模組 |
路由清單(登入/錢包/通用)
| 常數名 | URL Pattern | 對應動作 |
|---|---|---|
LoginByToken | WL://LoginByToken | TOKEN 免登入 |
OpenLoginRegisterVC | LG://OpenLoginRegisterVC | 開啟登入/注冊頁 |
OpenLiveChatVC | WL://OpenLiveChatVC | 開啟客服系統 |
OpenTransferWallet | WL://OpenTransferWallet | 一鍵轉帳 |
GetAllWalletBalance | WL://GetAllWalletBalance | 取得所有錢包餘額 |
GetRechargeVC | WL://GetUserInfoVC | 開啟充值頁 |
路由清單(體育)
| 常數名 | URL Pattern | 對應動作 |
|---|---|---|
OpenEventDetailController | SPORT://OpenEventDetailController | 跳轉賽事詳情 |
OpenStreamerDetailController | SPORT://OpenStreamerDetailController | 跳轉主播詳情 |
OpenEventDetailControllerWithEid | SPORT://OpenEventDetailControllerWithEid | 透過 eid 跳轉賽事詳情(支援跟單) |
OpenEventList | SPORT://OpenEventListUrl | 跳轉運動頁面 |
實作重點
OC 模組使用
+load自動註冊(ModuleApi.m、WalletModuleApi.m),App 啟動即生效;Swift 模組需手動呼叫registerService()參數傳遞:透過
withUserInfo:傳入字典,在 Handler 中以routerParameters[MGJRouterParameterUserInfo]取出頁面跳轉堆疊管理:
OpenEventDetailController與OpenStreamerDetailController跳轉時檢查當前頂部 ViewController,若已是同類型則移除前一個(nav?.viewControllers.remove(at: count - 2)),避免堆疊過深跟單流程(OpenEventDetailControllerWithEid):先透過 RxSwift
Observable.zip等待投注資料與賽事資訊;若盤口存在且未關閉,直接開啟投注面板橫豎屏判斷(OpenStreamerDetailController):依
isHorizontalScreen參數決定使用STFullAmuseHostViewController(直式)或StreamerViewController(橫式)注意事項:
GetRechargeVC的 URL 為WL://GetUserInfoVC,與GetUserInfoVC(HP://GetUserInfoVC)名稱類似但 Scheme 不同;彩票模組使用硬編碼字串"openLotteryComponent"而非常數
API 呼叫流程
路由系統無獨立 API
路由跳轉由 MGJRouter 處理,不直接呼叫 API。
推播通知路由流程見「Socket 與推送」文檔。
推播點擊路由:
jppNotificationCenter(didReceive:)
├─ 有 matchId → OpenEventDetailControllerWithEid (賽事詳情)
└─ 無 matchId → 依 type 路由:
├─ 1 → 活動 H5
├─ 2 → 賽事詳情
├─ 3 → 直播間
├─ 4 → 福利中心
├─ 8 → 娛樂主播
├─ 9 → 福利客服
└─ 10 → 關注通知