Skip to content

系統設定

最後更新:2026-04-07


功能說明

系統設定分為兩個層級:

通用系統設定(BBSystemSettings):位於「我的」Tab 下,提供震動設置、返水自動領取、日/夜間主題切換、版本更新檢查、登出。

體育設定(SportSet):位於「我的」或體育相關頁面,提供盤口設置(歐洲/香港盤)、各平台賠率接受策略、進球推送設定、投注音效設置、賽事列表顯示模式。

使用者流程

通用系統設定

  1. 從「我的」頁面點擊「系統設定」→ BBSystemSettingsViewController
  2. 震動設置 / 返水自動領取 → UISwitch 切換
  3. 主題模式 → BBSystemSegmentedControl 切換(索引 0 = 日間,索引 1 = 夜間)
  4. 版本號 → 點擊 cell 呼叫版本檢查 API,有新版則跳轉 BBVersionController
  5. 登出 → 彈出確認框 → 執行登出

體育設定

  1. 從「我的」或體育頁進入 SportSetViewController
  2. 賠率/盤口變更後透過 IFHomeServices.updateOddsSetup() 同步後端
  3. 設定值存放於 IFUserModel.sharedInstance() 的各屬性中

頁面跳轉

  • 「我的」首頁 → 系統設定 → BBSystemSettingsViewController
  • 系統設定版本號點擊 → BBVersionController(有新版時)
  • 系統設定登出 → popToRootViewController
  • 「我的」首頁 → 體育設定 → SportSetViewController

技術視角(開發看這裡)

相關檔案

類型檔案路徑
ViewController(系統設定)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SystemSet/C/BBSystemSettingsViewController.swift
Cell/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SystemSet/V/BBSystemSettingsCell.swift
SegmentedControl/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SystemSet/V/BBSystemSegmentedControl.swift
ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SystemSet/VM/BBSystemSettingsViewModel.swift
ViewController(體育設定)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/V/SportSetViewController.swift
設定同步 Service/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Service/IFHomeServices.swift
日夜模式常量定義/Users/user/Work/bbsport-new/BBSport/STUIKit/STUITools/STDayNightDefine.swift
顏色管理(OC)/Users/user/Work/bbsport-new/BBSport/Tools/UtilityToolComponentOC/Classes/Helper/ColorManager/STColorManager.m
LanguageManager/Users/user/Work/bbsport-new/BBSport/Tools/LanguageManager/LanguageManager.swift
IFUserModel (OC)/Users/user/Work/bbsport-new/BBSport/STUIKit/STBusiness/Models/User/IFUserModel.m
ViewModel(Cell)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SystemSet/VM/BBSystemSettingsCellViewModel.swift
Service(設定管理)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Service/ConfigManager.swift
Service(錢包 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Service/IFWalletService.m
Service(錢包模組 API)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Service/WalletModuleApi.m
Model(公告服務)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/M/NoticeService.swift
Model(OB 公告)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/M/OBNoticeModel.swift
Model(ST 公告)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/M/STNoticeModel.swift
ViewController(公告分頁)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/V/MatchNoticePageViewController.swift
ViewController(公告基底)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/V/NoticeBoardBaseViewController.swift
Cell(公告列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/V/NoticeBoardTableViewCell.swift
ViewController(教學影片)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/V/TapeCourseViewController.swift
ViewModel(DB 公告)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/VM/DBNoticeBoardViewModel.swift
ViewModel(FB 公告)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/VM/FBNoticeBoardViewModel.swift
ViewModel(公告分頁)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/VM/MatchNoticePageViewModel.swift
ViewModel(公告基底)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/VM/NoticeBoardBaseViewModel.swift
ViewModel(公告 Cell)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/VM/NoticeBoardTemplateCellModel.swift
ViewModel(UP 公告)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/VM/UPNoticeBoardViewModel.swift
API(返水狀態查詢)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Settings/STAPI+RebateStatusRequest.swift
API(設定返水狀態)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Settings/STAPI+SetRebateStatusRequest.swift
API(更新賠率設定)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Settings/STAPI+UpdateOddsConfigRequest.swift
API(信用投注設定)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Settings/STAPI+XJBetConfigRequest.swift
API(版本資訊)/Users/user/Work/bbsport-new/BBSport/API/STAPI/STAPI+VersionInfoRequest.swift
API(版本安裝)/Users/user/Work/bbsport-new/BBSport/API/STAPI/STAPI+VersionInstallRequest.swift
API(版本用戶紀錄)/Users/user/Work/bbsport-new/BBSport/API/STAPI/STAPI+VersionUserRecordRequest.swift
API(好友域名)/Users/user/Work/bbsport-new/BBSport/API/STAPI/STAPI+FriendDomainRequest.swift
Service(FB 賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/C/FBMatchResultDetailServices.swift
Service(OB 冠軍賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/C/OBMatchResultChampionServices.swift
ViewController(OB 賽果篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/C/OBMatchResultsFilterController.m
ViewController(ST 賽果篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/C/STMatchResultsFilterController.m
Service(UP 賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/C/UPMatchResultDetailServices.swift
DB(DB 賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/DB/DBMatchResultDB.swift
DB(FB 賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/DB/FBMatchResultDB.swift
DB(賽果基底)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/DB/MatchResultDB.swift
DB(UP 賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/DB/UPMatchResultDB.swift
Cell(賽果數據空狀態)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/Cell/MatchResultDetailDataEmptyCell.swift
Cell(賽果比分)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/Cell/MatchResultDetailDataScoreCell.swift
Cell(賽果比分列表 2)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/Cell/MatchResultDetailDataScoreList2Cell.swift
Cell(賽果比分列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/Cell/MatchResultDetailDataScoreListCell.swift
Cell(賽果多比分)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/Cell/MatchResultDetailDataScoresCell.swift
Cell(賽果標題)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/Cell/MatchResultDetailDataTitleCell.swift
Extension(美式足球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+AmericanFootBall.swift
Extension(棒球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+BaseBall.swift
Extension(籃球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+BasketBall.swift
Extension(足球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+FootBall.swift
Extension(冰球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+IceHockey.swift
Extension(MMA)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+MMA.swift
Extension(橄欖球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+Rugby.swift
Extension(斯諾克)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+Snooker.swift
Extension(網球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+Tennis.swift
Extension(排球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView+VolleyBall.swift
View(賽果數據)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Data/MatchResultDetailDataView.swift
View(賽果 Header 隊伍)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Header/MatchResultDetailHeaderTeamView.swift
Extension(賽果 Header 卡片)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Header/MatchResultDetailHeaderView+CardView.swift
View(賽果 Header)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Header/MatchResultDetailHeaderView.swift
View(賽果詳情)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/MatchResultDetailView.swift
ViewController(賽果詳情)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/MatchResultDetailViewController.swift
ViewModel(賽果詳情)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/MatchResultDetailViewModel.swift
Model(賽果詳情 - 美足)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+AmericanFootBall.swift
Model(賽果詳情 - 棒球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+BaseBall.swift
Model(賽果詳情 - 籃球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+BasketBall.swift
Model(賽果詳情 - 轉換)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+Convert.swift
Model(賽果詳情 - 足球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+FootBall.swift
Model(賽果詳情 - 冰球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+IceHockey.swift
Model(賽果詳情 - MMA)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+MMA.swift
Model(賽果詳情 - 橄欖球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+Rugby.swift
Model(賽果詳情 - 斯諾克)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+Snooker.swift
Model(賽果詳情 - 網球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+Tennis.swift
Model(賽果詳情 - 排球)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel+VolleyBall.swift
Model(賽果詳情基底)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/Detail/Model/MatchDetailModel.swift
Cell(聯賽篩選列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/LeagueFilter/LeagueFilterListCell.swift
View(聯賽篩選 Header)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/LeagueFilter/LeagueFilterListHeader.swift
View(聯賽篩選列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/LeagueFilter/LeagueFilterListView.swift
ViewModel(聯賽篩選列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/LeagueFilter/LeagueFilterListViewModel.swift
View(聯賽篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/LeagueFilter/LeagueFilterView.swift
ViewController(聯賽篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/LeagueFilter/LeagueFilterViewController.swift
ViewModel(聯賽篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/LeagueFilter/LeagueFilterViewModel.swift
Model(篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/M/FilterModel.swift
Model(賽果 Cell OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/M/MatchResultCellModel.m
Model(賽果日期 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/M/MatchResultDateCateModel.m
Model(賽果 Section OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/M/MatchResultSectionModel.m
Model(賽事排序 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/M/MatchSortModel.m
View(賽事篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/MatchFilter/MatchFilterView.swift
ViewModel(賽事篩選)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/MatchFilter/MatchFilterViewModel.swift
Cell(賽事列表基底)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/MatchList/Cell/BaseMatchListCell.swift
Cell(冠軍賽事)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/MatchList/Cell/ChampionMatchListCell.swift
View(賽事列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/MatchList/MatchListView.swift
ViewModel(賽事列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/MatchList/MatchListViewModel.swift
Model(篩選日期)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/New/Model/FilterDateModel.swift
View(新版賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/New/NewMatchResultView.swift
ViewController(新版賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/New/NewMatchResultViewController.swift
ViewModel(新版賽果)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/New/NewMatchResultViewModel.swift
Extension(Hook OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/T/NSObject+HookExtension.m
Extension(空資料集 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/T/UIScrollView+EmptyDataSet.m
Extension(折疊展開 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/T/UITableView+FoldExpand.m
Extension(Header 點擊 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/T/UITableViewHeaderFooterView+DidSelect.m
View(聯賽按鈕)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchLeagueButton.swift
View(聯賽選擇列表)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchLeagueChooseListView.swift
View(聯賽索引)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchLeagueSectionIndexView.swift
Cell(新版聯賽選擇)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchNewLeagueChooseCell.swift
View(賽果篩選底部 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchResultsFilterBottomView.m
Cell(賽事排序 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchSortCollectionViewCell.m
View(賽事排序 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchSortView.m
View(運動選擇 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/MatchSportChooseBar.m
View(導航標題 OC)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/NavtitleView.m
View(賽果導航)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/SportMenu/EventResult/V/ResultNavView.swift

API

功能說明NamespaceEndpointMethod主要參數
取得返水自動領取狀態STAPIapi/forehead/activity/rebate/getPOST urlForm
設定返水自動領取狀態STAPIapi/forehead/activity/rebate/setPOST urlFormswitchKey: 1=開/0=關
更新賠率/設定配置STAPIapi/forehead/system/cfg/setPOST urlFormcollect="UserConfig", jsonStr
版本檢查STAPIapi/forehead/system/versionGET urlFormbundleID, username

資料模型

賠率接受策略(IFUserModel 屬性)

屬性平台值域
oddsSTIDBB體育0=接受更好, 1=接受任何, 2=不接受
oddsUPIDUP體育0=接受更好, 1=接受任何, 2=不接受
oddsOBIDDB體育1=接受更好, 2=接受任何, 3=不接受

版本檢查 Response

欄位說明
version最新版本號
status0=強制, 1=不強制
updateType0=不強制, 1=強制更新, 2=證書掉線跳網頁
certificateType0=企業, 1=超級簽

實作重點

  1. 主題切換機制:使用 SwiftTheme 框架,ThemeManager.setTheme(index:) 切換;同時更新 OC 端 STColorManager;發送 STNotify.nightPatternOpen.post() 全域刷新 UI

  2. 返水自動領取:進入頁面呼叫 RebateStatusRequest 取得當前狀態;使用者關閉時額外彈出 STNormalAlertView 提醒手動領取

  3. 體育設定同步:所有體育設定統一透過 IFHomeServices.updateOddsSetup() 打包成 JSON 呼叫 UpdateOddsConfigRequest

  4. 語言切換:透過 Bundle.setLanguage(lang:) 設定;內建防抖機制(間隔 < 1 秒延遲合併觸發);發送 STNotify.languageDidChange

  5. 版本檢查:透過 IFCommonUtil.compareVersion() 比對;有新版跳轉 BBVersionController;無新版顯示 toast「已是最新版本」

  6. 登出確認:使用 STNormalAlertView.leftAlertView 樣式(取消在左、確認在右);確認後執行 GameStatusManager.shared.logout()


API 呼叫流程

進入設定頁 (BBSystemSettingsViewController)

viewDidLoad → 無 API 呼叫 (全部為本地設定)
  ├─ 搖一搖開關 → 本地 UserDefaults
  ├─ 自動領返水 → 本地 Toggle
  ├─ 深色/淺色模式 → 本地 Toggle
  └─ 版本號 → 顯示用

版本檢查

用戶點擊「版本檢查」
  └─ IFCommonUtil.compareVersion()
     ├─ 有新版 → 跳轉 BBVersionController
     └─ 無新版 → toast「已是最新版本」

登出

用戶點擊「登出」→ 確認對話框
  └─ GameStatusManager.shared.logout()