Skip to content

場館登入

最後更新:2026-04-07


功能說明

本平台登入成功後,系統自動啟動體育場館登入流程:

  1. 場館登入觸發 — 本平台登入成功後自動啟動體育場館登入
  2. SportStatusProvider 登入 — 三場館(FB/UP/DB)各自取得 Token

使用者流程

  1. 主畫面載入後 → 系統自動登入上次使用的體育場館(FB/UP/DB)
  2. 場館登入成功 → STNotify.userLoginFB/UP/OB → 體育首頁開始載入賽事資料
  3. 切換場館時 → 觸發新場館的 SportStatusProvider.connect()

頁面跳轉

  • 場館登入成功 → STNotify.userLoginFB/UP/OB → 體育首頁開始載入賽事資料

技術視角(開發看這裡)

相關檔案

類型檔案路徑
GameStatusManager/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/Common/GameStatusManager/GameStatusManager.swift
SportStatusProvider(協議)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/Common/GameStatusManager/Provider/SportStatusProvider.swift
FBSportStatusProvider/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/Common/GameStatusManager/Provider/FB/FBSportStatusProvider.swift
UPSportStatusProvider/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/Common/GameStatusManager/Provider/UP/UPSportStatusProvider.swift
DBSportStatusProvider/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/Common/GameStatusManager/Provider/DB/DBSportStatusProvider.swift
GameType/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/Common/GameStatusManager/GameType.swift
維護管理/Users/user/Work/bbsport-new/BBSport/Tools/MaintenanceManager/GameMaintenanceManager.swift
API(代理跳轉)/Users/user/Work/bbsport-new/BBSport/API/STAPI/STAPI+ProxyJumpRequest.swift

API

功能說明NamespaceEndpointMethod主要參數
場館登入(三場館共用)STAPISTAPI.GameJumpRequestPOSTgameId = channelId,回傳含 token + apiSrc 的 URL

資料模型

三場館對照表

項目FB 極速體育UP/BB 體育DB 體育
ProviderFBSportStatusProviderUPSportStatusProviderDBSportStatusProvider
登入成功通知STNotify.userLoginFBSTNotify.userLoginUPSTNotify.userLoginOB
Token 失效通知STNotify.reLoginFBSTNotify.reLoginUPSTNotify.reLoginOB
維護判斷GameMaintenanceManager.shared.fbGameMaintenanceManager.shared.upGameMaintenanceManager.shared.db

getDefaultGameType() 預設場館選擇邏輯

條件返回值
savedGameType == .bbAmuse(上次在娛樂).bbAmuse
所有體育都維護(isAllSportMaintenance.bbAmuse
FB 維護 + 上次是 FB優先 UP,UP 也維護則 DB
DB 維護 + 上次是 DB優先 FB,FB 也維護則 UP
UP 維護 + 上次是 UP優先 FB,FB 也維護則 DB
其他savedGameType(上次選擇的場館)

GameJump 多平台登入

App 內嵌入多個第三方體育平台(FB / DB / UP),各平台使用 GameJump 機制取得帶 token 的 URL 進行登入。

架構

SportStatusProvider (protocol)
  ├── FBSportStatusProvider   (FB 體育)
  ├── DBSportStatusProvider   (DB 體育)
  └── UPSportStatusProvider   (UP 體育)

GameStatusManager 統一管理各平台登入狀態。

流程

  1. 觸發時機:使用者進入體育 Tab 或切換體育平台時,SportStatusProvider.connect() 被呼叫
  2. 前置檢查:確認本平台已登入(isLoginThisPlatform)且該平台未維護(isMaintenanceFactory),且非正在登入中(loginStatus != .logging
  3. 請求 GameJump:呼叫 STAPI.GameJumpRequest(gameId: channelId) → 後端回傳帶 token 的 URL
  4. 解析 URL:從回傳 URL 中解析 token 和域名(FB/UP 解析 apiSrc,DB 解析 apiDomain),存入 Provider 的 tokengameJumpURL 屬性,同時更新 UserDefaults(如 fbSportPathupSportPath
  5. 驗證:URL 不能包含 //localhost:game_error.html,且必須包含 token 和對應域名欄位
  6. 失效重連:監聽 STNotify.reLoginFB / reLoginOB / reLoginUP,失效後呼叫 reconnect() → 重新 fetchGameJumpURL,最多重試 5 次,超過則觸發 onLogout() 登出

GameJump 預檢

STAPI.GameJumpPreCheckRequest 在跳轉遊戲前檢查:

  • transferAvailable:是否可轉帳(false 時彈窗提示)
  • userHasAwardAmount:使用者是否有獎金餘額
  • userHasRecharge:使用者是否有充值記錄

GameJump 配置

登入成功時,logonDataProcessing 會呼叫 IFMainSwitch.updateGameJumpConfig(response["data"]["gameJumpConfig"]),將後端下發的各遊戲 jump path 配置快取至 IFMainSwitch.gameJumpConfigs

實作重點

  1. 三場館共用同一 APISTAPI.GameJumpRequest(body: .init(gameId: channelId)),差異僅在 channelId
  2. 場館登入是自動的:本平台登入成功後 STNotify.loggedGameStatusManager.start() 自動啟動場館登入,使用者無需手動操作
  3. 只登入當前場館start(by: currentGameType) 只登入上次使用的場館,切換場館時才觸發其他場館登入
  4. 維護優先於登入connect() 判斷維護中直接 return,不嘗試登入
  5. 重連上限 5 次:Token 失效後最多重連 5 次,超過直接登出整個 App 回到登入頁
  6. BB = UP 別名GameType.bbSport = GameType.upSporttypealias BBSportAPI = UPSportAPI,所以場館實際上是 FB/UP/DB 三個

API 呼叫流程

場館登入序列

STNotify.logged 觸發
  └─ GameStatusManager.start(by: currentGameType)
     └─ SportStatusProvider.connect()
        ├─ 前置檢查: isLoginThisPlatform + !isMaintenanceFactory + loginStatus != .logging
        └─ STAPI.GameJumpRequest(gameId: channelId)
           ├─ 成功 → 解析 token + 域名 → STNotify.userLoginFB/UP/OB
           └─ 失敗 → reconnect() (最多 5 次) → 超過則 onLogout()

場館選擇

5 個 Tab: 廣場 / 遊戲 / 體育 / 注單 / 我的
  └─ 預設場館: savedGameType (上次選擇)
     └─ 若維護: 自動切換至可用場館 (FB 優先)