Appearance
路由系統(開發文檔)
最後更新:2026-04-10
📖 功能說明請參考 路由系統
架構
相關檔案
路由核心(5 個)
| 檔案 | 說明 |
|---|---|
.../Main/RouterComponent.h | 路由頭文件 |
.../Main/IFMainSwitch.h | 全域開關 Header |
.../Main/IFMainSwitch.m | 全域開關實作 |
.../Main/BBUrlListModel.h | URL 列表 Model Header |
.../Main/BBUrlListModel.m | URL 列表 Model 實作 |
基礎路徑:
BBSport/Tools/RouterComponent/Classes/
常數定義(10 個)
| 檔案 | 說明 |
|---|---|
.../Service/IFLoginRegisterConfig.h | 登入/錢包常數 Header |
.../Service/IFLoginRegisterConfig.m | 登入/錢包常數實作 |
.../Service/IFUserInfoConfig.h | 用戶資訊常數 Header |
.../Service/IFUserInfoConfig.m | 用戶資訊常數實作 |
.../Service/LFWalletInfoConfig.h | 錢包常數 Header |
.../Service/LFWalletInfoConfig.m | 錢包常數實作 |
.../Service/IFSportConfig.h | 體育常數 Header |
.../Service/IFSportConfig.m | 體育常數實作 |
.../Service/IFLiveConfig.h | 直播常數 Header |
.../Service/IFLiveConfig.m | 直播常數實作 |
基礎路徑:
BBSport/Tools/RouterComponent/Classes/
路由註冊(5 個)
| 檔案 | 說明 |
|---|---|
BBSport/Tab/我的/Mine/Login_Register/ModuleApi.m | 登入模組 |
BBSport/Tab/我的/Mine/Service/WalletModuleApi.m | 錢包模組 |
BBSport/Tab/我的/Mine/Service/ConfigManager.swift | 個人中心 |
BBSport/Tab/体育/Sport/Common/SportComponent.swift | 體育模組 |
BBSport/Tab/游戏/Amuse/Lottery/Classes/Config/LotteryConfigManager.swift | 彩票模組 |
URL Scheme 分類
| Scheme | 用途 |
|---|---|
LG:// | 登入相關 |
WL:// | 錢包及通用服務 |
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 | 對應動作 |
|---|---|---|
GetUserInfoVC | HP://GetUserInfoVC | 取得個人中心控制器 |
GetNewsViewController | LG://BBMineNewsViewController | 取得廣場控制器 |
GetBBHomeViewController | LG://GetBBHomeViewController | 取得娛樂首頁控制器 |
OpenSafeCenterVC | UI://OpenSafeCenterVC | 開啟安全中心 |
GetNoticeCount | UI://GetNoticeCount | 取得未讀通知數量 |
註冊於
ConfigManager.swift(UserInfoConfigManager.registerService())
路由清單(彩票)
| 常數名 | URL Pattern | 對應動作 |
|---|---|---|
| (硬編碼) | openLotteryComponent | 開啟彩票模組(傳入 currentNav、deviceId、userId、userNickname) |
註冊於
LotteryConfigManager.swift,使用硬編碼字串而非常數
路由清單(體育)
| 常數名 | URL Pattern | 對應動作 |
|---|---|---|
OpenEventDetailController | SPORT://OpenEventDetailController | 跳轉賽事詳情 |
OpenStreamerDetailController | SPORT://OpenStreamerDetailController | 跳轉主播詳情 |
OpenEventDetailControllerWithEid | SPORT://OpenEventDetailControllerWithEid | 透過 eid 跳轉(支援跟單) |
OpenStreamerDetailControllerWithEid | SPORT://OpenStreamerDetailControllerWithEid | 透過 eid 跳轉娛樂主播詳情 |
OpenEventList | SPORT://OpenEventListUrl | 跳轉運動頁面 |
UploadLog | SPORT://UploadLog | 日誌上傳(OC 用) |
路由調用範例
objc
// OC 呼叫範例 — 跳轉賽事詳情
NSDictionary *params = @{
@"eventId": @"1010311",
@"plat": @"up",
@"sportId": @(1),
@"isInplay": @(YES),
@"pt": @(4), // 4 = 滾球
@"openLive": @(0),
@"liveHostId": @(0)
};
[MGJRouter openURL:OpenEventDetailController
withUserInfo:params
completion:nil];swift
// Swift 呼叫範例 — 一鍵轉帳
MGJRouter.openURL(OpenTransferWallet,
withUserInfo: ["toChannelId": IFCommonUtil.fbSportChannelID()],
completion: { _ in
// 轉帳完成後的回調
})參數透過
withUserInfo:傳入字典,Handler 中以routerParameters[MGJRouterParameterUserInfo]取出。
H5 JS Bridge 路由
App 內 WebView 使用 WKScriptMessageHandler 進行 H5 ↔ Native 通訊。
| 協議名 | 方向 | 說明 |
|---|---|---|
window.webkit.messageHandlers.didTap.postMessage(...) | H5 → Native | 站內信點擊事件 |
JS Bridge 目前使用範圍較小(主要在
BBMessageWebViewController),大部分 H5 頁面透過IFStaticWebViewController/IFNewStaticWebViewController加載,以 URL Scheme 和userInfo攔截方式進行通訊,而非標準 JS Bridge 協議。
推播點擊路由流程
注意事項
GetRechargeVC的 URL 為WL://GetUserInfoVC,與GetUserInfoVC(HP://GetUserInfoVC)名稱類似但 Scheme 不同- 彩票模組使用硬編碼字串
"openLotteryComponent"而非常數
實作重點
- OC 模組使用
+load自動註冊,App 啟動即生效;Swift 模組需手動呼叫registerService() - 參數傳遞:透過
withUserInfo:傳入字典,Handler 中以routerParameters[MGJRouterParameterUserInfo]取出 - 頁面堆疊管理:跳轉賽事詳情或主播詳情時,若頂部已是同類型則移除前一個,避免堆疊過深
- 跟單流程:
OpenEventDetailControllerWithEid透過 RxSwiftObservable.zip等待投注資料與賽事資訊;盤口存在且未關閉 → 直接開啟投注面板 - 橫豎屏判斷:
OpenStreamerDetailController依isHorizontalScreen參數決定直式或橫式播放器