Skip to content

路由系統(MGJRouter)

最後更新:2026-04-07


功能說明

BBSport iOS 專案採用 MGJRouterMGJRouterBackup)作為模組間解耦的路由中樞。各業務模組(登入註冊、個人中心、錢包、體育、遊戲)透過 URL Pattern 註冊服務,其他模組以 MGJRouter.openURLMGJRouter.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對應動作
LoginByTokenWL://LoginByTokenTOKEN 免登入
OpenLoginRegisterVCLG://OpenLoginRegisterVC開啟登入/注冊頁
OpenLiveChatVCWL://OpenLiveChatVC開啟客服系統
OpenTransferWalletWL://OpenTransferWallet一鍵轉帳
GetAllWalletBalanceWL://GetAllWalletBalance取得所有錢包餘額
GetRechargeVCWL://GetUserInfoVC開啟充值頁

路由清單(體育)

常數名URL Pattern對應動作
OpenEventDetailControllerSPORT://OpenEventDetailController跳轉賽事詳情
OpenStreamerDetailControllerSPORT://OpenStreamerDetailController跳轉主播詳情
OpenEventDetailControllerWithEidSPORT://OpenEventDetailControllerWithEid透過 eid 跳轉賽事詳情(支援跟單)
OpenEventListSPORT://OpenEventListUrl跳轉運動頁面

實作重點

  1. OC 模組使用 +load 自動註冊(ModuleApi.mWalletModuleApi.m),App 啟動即生效;Swift 模組需手動呼叫 registerService()

  2. 參數傳遞:透過 withUserInfo: 傳入字典,在 Handler 中以 routerParameters[MGJRouterParameterUserInfo] 取出

  3. 頁面跳轉堆疊管理OpenEventDetailControllerOpenStreamerDetailController 跳轉時檢查當前頂部 ViewController,若已是同類型則移除前一個(nav?.viewControllers.remove(at: count - 2)),避免堆疊過深

  4. 跟單流程(OpenEventDetailControllerWithEid):先透過 RxSwift Observable.zip 等待投注資料與賽事資訊;若盤口存在且未關閉,直接開啟投注面板

  5. 橫豎屏判斷(OpenStreamerDetailController):依 isHorizontalScreen 參數決定使用 STFullAmuseHostViewController(直式)或 StreamerViewController(橫式)

  6. 注意事項GetRechargeVC 的 URL 為 WL://GetUserInfoVC,與 GetUserInfoVCHP://GetUserInfoVC)名稱類似但 Scheme 不同;彩票模組使用硬編碼字串 "openLotteryComponent" 而非常數


API 呼叫流程

路由系統無獨立 API

路由跳轉由 MGJRouter 處理,不直接呼叫 API。
推播通知路由流程見「Socket 與推送」文檔。

推播點擊路由:
  jppNotificationCenter(didReceive:)
  ├─ 有 matchId → OpenEventDetailControllerWithEid (賽事詳情)
  └─ 無 matchId → 依 type 路由:
     ├─ 1 → 活動 H5
     ├─ 2 → 賽事詳情
     ├─ 3 → 直播間
     ├─ 4 → 福利中心
     ├─ 8 → 娛樂主播
     ├─ 9 → 福利客服
     └─ 10 → 關注通知