Skip to content

維護模式(開發文檔)

最後更新:2026-04-10

📖 功能說明請參考 維護模式


架構

相關檔案

維護核心(3 個)
檔案說明
BBSport/Tools/MaintenanceManager/GameMaintenanceManager.swift維護管理器(核心)
BBSport/Tools/MaintenanceManager/GameMaintenanceStatusModel.swift維護狀態 Model
BBSport/API/STAPI/STAPI+ProductConfigRequest.swift維護狀態 API 定義
維護頁面(2 個)
檔案說明
.../BBMaintain/BBMaintainView.swift維護 UI
.../BBMaintain/BBMaintainViewController.swift維護頁面控制器

基礎路徑:BBSport/Tab/我的/Mine/Login_Register/登录注册/Maind/

體育相關(3 個)
檔案說明
BBSport/Tab/体育/Sport/Common/GameStatusManager/GameStatusManager.swift場館登入管理
BBSport/Tab/体育/Sport/HomePage/Adapter/SportMaintenanceAdapter.swift體育首頁維護適配
BBSport/Tab/体育/Sport/Common/GameStatusManager/Provider/SportStatusProvider.swift場館登入協定

API

維護狀態查詢


取得平台維護資訊

POST api/forehead/gamebet/product/productConfig — urlForm — STAPI.ProductConfigRequest

參數型別必填說明
typeInt非遊戲維護查詢時傳 2;查詢遊戲維護時不傳(isGame=true 時 parameters 為空)

Response: JSON String → [[String: Any]],每個元素為一個維護項目:

欄位型別說明
startDateInt維護開始時間(timestamp)
endDateInt維護結束時間(timestamp)
reasonString維護原因
statusInt1 = 維護中
maintenFlagInt維護旗標
itemListString平台 channelId(逗號分隔),空值 = APP 級別維護
transferListString轉帳列表

itemList 對應

含義說明
0(或空值)APP 整體維護itemList 為空且 status=1 時視為 APP 級別維護
1FB 體育對應 GameType.fbSport.sportChannelId
2體育端-iOS 維護Socket chId 425 data 中 key "2" 表示體育端 iOS 維護狀態(見下方 chId 425 說明)
3DB 體育對應 GameType.dbSport.sportChannelId
4UP 體育對應 GameType.upSport.sportChannelId

注意:itemList 中的值為動態 channelId,上表為常見預設值。實際比對邏輯在 GameMaintenanceManager.loadData() 中使用 GameType.xxx.sportChannelId 進行 switch。


Socket chId 425 data 格式

chId 425 推送的 data 為字典結構,以平台 ID 為 key:

json
{
  "2": {
    "children": [
      {
        "startDate": 1700000000,
        "endDate": 1700100000,
        "reason": "系統維護中",
        "status": 1,
        "maintenFlag": 1,
        "itemList": "1,3",
        "transferList": ""
      }
    ]
  }
}
  • key "2" 表示體育端-iOS 維護狀態
  • children 陣列結構同 ProductConfigRequest Response
  • 收到後呼叫 updateMaintenanceStatus → 取出 childrenSTNotify.maintainID.postreceiveSocketMaintenanceInfo → 共用 setUpMaintainData + loadData 解析邏輯

維護恢復流程

觸發方式說明
Socket 推送(chId 425)即時推送,status != 1 時自動恢復。無需額外 API 請求
API 主動查詢App 啟動時 GameMaintenanceManager.addObservers()checkStatus()requestMaintenanceInfo()

維護恢復的完整流程:

  1. 收到 chId 425 推送(status 不為 1 或 itemList 中移除了對應平台)
  2. loadData 重置所有維護狀態(app/fb/db/up.isGameMaintenance = false
  3. 重新解析當前維護項目,只有 status=1 的才設回維護中
  4. maintenanceResultHandler 回調通知 UI
  5. updateAppMainTainView:若 app.isGameMaintenance == false,將 tempRootVC 恢復為 window.rootViewController

維護模式沒有輪詢機制,依賴 Socket 即時推送 + App 啟動時的一次性 API 查詢。


GameMaintenanceStatusModel

屬性說明
isGameMaintenance是否維護中(@objc dynamic,可 KVO 觀察)
isShowH5是否顯示 H5 連結(APP 級別維護 = true
isShowBackBtn是否顯示返回按鈕(遊戲 IP 限制 = true

各平台存取

swift
GameMaintenanceManager.shared.app  // APP 級別
GameMaintenanceManager.shared.fb   // FB 體育(極速體育)
GameMaintenanceManager.shared.db   // DB 體育
GameMaintenanceManager.shared.up   // UP 體育

實作重點

  • 雙重資料來源:API 主動查詢 + Socket 被動推送,共用同一套解析邏輯
  • 快取優先策略checkStatus() 先用上次快取立即回調,再發 API 請求,避免畫面閃爍
  • 回調機制maintenanceResultHandler 為覆蓋式閉包,回傳 (app, fb, db, up, isFromNetWork) 五參數
  • APP 維護替換 rootVC:直接替換 window.rootViewController,維護結束用 tempRootVC 恢復
  • 全部維護時isAllSportMaintenance = true → 自動切換到娛樂 Tab
  • channelId 為動態值:透過 IFCommonUtil.fbSportChannelID() 等取得
  • 防重複客服openCustomerService 旗標防止在 IP 限制畫面上重複疊加客服
  • 夜間模式BBMaintainView 監聽夜間模式通知,動態切換背景圖和 Logo