Skip to content

App啟動(開發文檔)

最後更新:2026-04-10

📖 功能說明請參考 App啟動


架構

相關檔案

AppDelegate / SceneDelegate(4 個)
檔案說明
AppDelegate.swiftApp 初始化入口
AppDelegate+JPPush.swift極光推送初始化
AppDelegate+SDK.swift三方 SDK 初始化
SceneDelegate.swift場景管理 + 登入判斷

基礎路徑:BBSport/AppDelegate/

Service / Manager(6 個)
檔案說明
BBSport/Tab/我的/Mine/Login_Register/IFLoginService.mOC 登入核心
BBSport/Tab/我的/Mine/Login_Register/IFLoginService.h登入服務 Header
BBSport/Tools/MaintenanceManager/GameMaintenanceManager.swift維護管理
BBSport/Tools/Domain/M/AppDomain.swift域名管理
BBSport/Tools/STDomainListManager/STDomainListManager.swift域名探測核心
BBSport/Tab/我的/Mine/Login_Register/ModuleApi.m路由註冊(OC)
三方 SDK / 推送(3 個)
檔案說明
BBSport/Tools/STThirdPartyManager/STThirdPartyManager.swift三方 SDK 初始化
BBSport/Tools/STThirdPartyManager/ThirdPartyKey.swift三方 SDK Key 定義
BBSport/Tools/Push/JPPService.h極光推送 Header
Helper(1 個)
檔案說明
BBSport/Tools/NotificationManager/STNotifyExtension.swift通知定義

API

啟動時載入


投注自訂參數

POST api/forehead/system/config/get/common/config — urlForm — STAPI.XJBetConfigRequest

無參數,靠 Header token/uid 認證。

Response: JSON String,動態解析為字典(無強型別 Model),內容為投注自訂參數配置。常用 Key:

Key說明
OBAcceptDB 賠率接受策略(1/2/3)
STAcceptBB 賠率接受策略(0/1/2)
UPAcceptUP 賠率接受策略(0/1/2)
game上次遊戲類型(GameType rawValue)
handicap盤口類型(1=歐洲盤, 2=香港盤)
push_event推送事件配置
push_notice推送通知開關
vibrate是否震動
pattern日/夜模式(0=夜間, 1=日間)
bet_pattern投注模式

呼叫路徑

路由 WL://BetListParameterIFLoginService.getXJConfigWithHanderHttpService.getXJBetConfig


充值運營圖

POST api/forehead/system/config/images/query — urlForm — STAPI.RechargeOperatePicRequest

參數型別必填說明
categoryIdString運營位分類 ID,固定值 "20401,20402,...,20415" 多個逗號分隔

Response: JSON String,結構同 [STQueryResponseModel](見分享螢幕圖 Response)。


分享螢幕圖

POST api/forehead/system/config/images/query — urlForm — STAPI.OperatePicRequest

參數型別必填說明
categoryIdString運營位分類 ID,傳入 "20304"

共用 Endpoint

與充值運營圖共用同一 endpoint,差異僅在 categoryId。回傳中過濾 imageKey == "mem-app-gc-jpfx" 的圖片。

Response:[STQueryResponseModel]

Response 完整欄位(16 個)
欄位型別說明
actionContentString動作內容(如跳轉 URL)
actionTitleString動作標題
actionTypeSTQueryActionType動作類型
categoryIdInt運營位分類 ID
contentString內容描述
endTimeInt結束時間(timestamp)
idInt記錄 ID
imageIdInt圖片 ID
imageKeyString圖片 Key(用於過濾)
imagesString圖片 URL
nameString名稱
sortInt排序值
sourceTypeInt來源類型
startTimeInt開始時間(timestamp)
statusInt狀態
textString文字內容

登入成功後載入


好友域名

POST api/forehead/user/domain/friend/domain — urlForm — STAPI.FriendDomainRequest

無參數,靠 Header token/uid 認證。

Response: String — 好友推薦域名字串。


邀請碼

POST api/forehead/activity/rmd/getInviteCode — urlForm — STAPI.InviteCodeRequest

無參數,靠 Header token/uid 認證。

Response:InviteCodeModel

欄位型別說明
codeString推廣碼
createTimeInt創建時間(timestamp)
statusBool是否有效(0=無效, 1=有效)
updateTimeInt更新時間(timestamp)
userIdInt使用者 ID
usernameString脫敏使用者名稱

產品配置 / 維護狀態

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

參數型別必填說明
typeInt非遊戲維護查詢時傳 2;查詢遊戲維護時不傳

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

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

AppDelegate 初始化順序

順序操作說明
1音訊類別設定AVAudioSession.setCategory(.playback)
2忽略 SIGPIPEsignal(SIGPIPE, SIG_IGN)
3Firebase 初始化FirebaseApp.configure()
4阿里雲日誌設定setAliyuanLogConfig()
5設定預設域名AppDomain.shared.setDefaultUrls()
6獲取設備號getDeviceId()(優先啟動)
7OC 顏色管理初始化STColorManager.sharedInstance().start()
8三方 SDK 初始化Bugly + 熱修復 + 極光推送 + LiveChat + 阿里雲 APM
9本地 URL 列表載入IFMainSwitch.getURLListFromLocal()
10域名探測配置registerDomainList 讀取 st_domain_config.json
11尋找最快域名異步,成功後觸發投注參數、運營圖、視頻動畫、分享螢幕圖
12添加通知監聽登入、登出、客服退出等
13路由服務註冊SportManager + UserInfoManager + LotteryConfigManager
14SDWebImage 設定快取 Key 過濾主機地址、1 個月快取、WebP 支援
15DD 客服域名設定DDConfigManager.configLocalDomain + configHost
16客服 SDK 初始化阿里雲 OSS 客服域名 → DDConfigManager.registerServices
17熱修復任務檢查STHotFixTaskManager.shared.checkHotfixTask()
18資料庫初始化DBEngine.shared
19語言強制簡中Bundle.setLanguage(lang: .chinese(.simplified))

Token 自動登入

切換到主畫面邏輯

情境 A:從已有頁面 push 出的登入頁

  1. dismiss 登入頁
  2. 已登入 → 延遲 0.1s → 發送登入成功通知

情境 B:冷啟動的登入頁

  1. 檢查 APP 級別維護 → 維護中直接 return(停在維護頁)
  2. 切換 rootViewController 至主畫面
  3. 已登入 → 延遲 0.2s → 發送登入成功通知

實作重點

  • 域名探測詳細機制
    • 候選域名來源:① 本地檔案 BTHostList.plist(上次成功保存)→ ② 內建 st_domain_config.json 中的 realese_domains → ③ UserDefaults 快取的上次最快域名 → 去重後並行探測
    • 探測方式:對每個候選域名發送 POST {domain}{api_domain_path},攜帶 device-idos-typetimestampversionsign 等 Header
    • 超時時間:單次請求 10 秒;全局超時 10 秒DispatchQueue.main.asyncAfter 10s
    • Fallback 機制:所有域名失敗 → 從阿里雲 OSS(aliyun_oss_url,Base64 解碼)取得 IP 列表 → 以 IP 重跑一次 startFindFastDomain;IP 也失敗 → completion(nil) + 通知 findFastHost(0)
    • 成功後處理:保存最快域名至 UserDefaults;解析 response 中的 data 陣列寫入 IFMainSwitch;將 appMainUrlArray 域名寫入 BTHostList.plist
  • 域名探測是前置條件:探測成功後才觸發核心業務請求,失敗則後續請求無法進行
  • Token 自動登入:判斷 Token 存在且未過期,直接免登入進入
  • 前後台輪詢管理:進入背景暫停、回到前台恢復,避免背景無效請求
  • 登出統一收口:手動登出、被踢、平台失效、重連失敗,都走統一登出流程

啟動失敗排查清單

現象排查方向
白屏卡在啟動域名探測全部失敗 → 檢查 st_domain_config.json 中的 realese_domainsaliyun_oss_url 是否可用
10 秒無回應STDomainListManager 10 秒超時觸發 → 檢查網路環境或 DNS 解析
域名探測成功但 API 失敗api_domain_path 路徑配置錯誤,或域名返回的 data 格式異常
客服不可用OSS 客服域名取得失敗 → 檢查 aliyun_oss_url 中的 kfUrl
Token 免登入失敗Token 過期或格式異常 → SceneDelegate 跳轉登入頁
路由跳轉無效Swift 模組需手動呼叫 registerService(),確認 SportManager / UserInfoManager / LotteryConfigManager 已註冊
推送不工作極光推送 Key 配置錯誤,或 AppDelegate+JPPush 初始化失敗