Skip to content

每日任務與簽到

最後更新:2026-04-09


功能說明

提供使用者每日簽到(連續簽到獎勵)與每日任務完成系統。完成任務可獲得金幣、券(現金券/流水券/存送券)或稱號等獎勵。入口位於「我的」Tab 首頁。

使用者流程

每日簽到

  1. 進入「我的」→ 點擊任務/簽到入口 → BBTasksDetailViewControllerisSingMy = true
  2. 頁面顯示本月簽到日曆,已簽到日期標記
  3. 顯示當前連續簽到天數與下一次獎勵預覽
  4. 點擊「立即簽到」→ 呼叫簽到 API
  5. 簽到成功 → 顯示 SignInSuccessViewController 動畫頁
  6. 顯示本次獎勵(金幣/券/稱號)

每日任務

  1. 進入「我的」→ 點擊任務入口 → BBTasksDetailViewControllerisSingMy = false
  2. 列表顯示今日任務(BBDailyTaskCellViewModel):任務名稱、獎勵類型、完成進度;已完成 ✓、可領取、未完成三種狀態
  3. 點擊「領取」→ 呼叫領取 API
  4. 領取成功 → 更新任務狀態

頁面跳轉

  • 「我的」首頁 → BBTasksDetailViewController(簽到,isSingMy = true
  • 「我的」首頁 → BBTasksDetailViewController(任務,isSingMy = false
  • 簽到成功 → SignInSuccessViewController(動畫獎勵展示頁)

技術視角(開發看這裡)

相關檔案

類型檔案路徑
ViewController(任務主頁)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/C/BBTasksDetailViewController.swift
ViewController(簽到成功)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/C/SignInSuccessViewController.swift
ViewModel(任務詳情)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/VM/BBTasksDetailViewModel.swift
ViewModel(每日任務 Cell)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/M/BBDailyTaskCellViewModel.swift
View(每日任務主視圖)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/BBDailyTaskView.swift
View(簽到日曆 Cell)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyMySignCell.swift
View(簽到資訊 Cell)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyMySignInfoCell.swift
View(簽到獎勵 Cell)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyMySignRewardCell.swift
View(任務進度條)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyTaskProgressBarView.swift
View(任務進度條 Wrapper)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyTaskProgressBarWrapper.swift
View(任務副標題)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyTaskSubtitleView.swift
View(任務摘要 Cell)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyTaskSummaryCell.swift
View(任務標題)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/MyDailyTaskTitleView.swift
View(簽到規則彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Mine/Tasks/V/SignRuleAlertView.swift
任務管理器(核心)/Users/user/Work/bbsport-new/BBSport/Tools/TaskManager/STTaskManager.swift
任務管理器(通用)/Users/user/Work/bbsport-new/BBSport/Tools/TaskManager/GeneralTaskManager.swift
任務管理器(FB 體育)/Users/user/Work/bbsport-new/BBSport/Tools/TaskManager/FBSportTaskManager.swift
任務管理器(UP 體育)/Users/user/Work/bbsport-new/BBSport/Tools/TaskManager/UPSportTaskManager.swift
任務管理器(DB 體育)/Users/user/Work/bbsport-new/BBSport/Tools/TaskManager/DBSportTaskManager.swift
ViewModel(簽到主頁)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Home/M/MyTask/STCheckInViewModel.swift
Model(簽到)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Home/M/MyTask/STTaskCheckInModel.swift
Model(任務首頁)/Users/user/Work/bbsport-new/BBSport/Tab/我的/Home/M/MyTask/STTaskHomeModel.swift
API(每日任務進度)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Task/STAPI+TaskDailyMissionRequest.swift
API(任務領取獎勵)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Task/STAPI+DailyMissionGetRewardRequest.swift
API(簽到百分比)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Task/STAPI+TaskSignPercentageRequest.swift
API(活動設定)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Task/STAPI+TaskActivityInfoRequest.swift
API(簽到/領獎)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Task/STAPI+TaskGetRewardRequest.swift
API(可領取狀態)/Users/user/Work/bbsport-new/BBSport/API/STAPI/STAPI+ActivityActReceiveInfoRequest.swift
API(活動 ID 查詢)/Users/user/Work/bbsport-new/BBSport/API/STAPI/Task/STAPI+OperatePicRequest.swift

API

功能說明NamespaceEndpointMethod主要參數
每日任務進度STAPIapi/forehead/activity/dailyMission/getPOST urlForm
每日任務領取獎勵STAPIapi/forehead/activity/dailyMission/award/getPOST urlFormmissionId
簽到百分比STAPIapi/forehead/activity/act/userInfoPOST urlFormactId, template=signPercentage
活動設定(簽到日曆)STAPIapi/forehead/activity/act/infoPOST urlFormactId, template=signPercentage
簽到/簽到進度領獎STAPIapi/forehead/activity/act/getPOST urlFormactId, actionType(0=簽到、1=領獎), subId, template=signPercentage
可領取狀態檢查STAPIapi/forehead/activity/act/receive/infoPOST urlForm
活動 ID 查詢STAPIapi/forehead/system/config/images/queryPOST urlFormcategoryId(任務用 "40201")

資料模型

AwardType(獎勵類型枚舉)

rawValue類型圖示
-9, 0, 15.coin(金幣/現金合併顯示)sign_coin_not / sign_coin_ed
8, 12, 13.roll(券)sign_roll_not / sign_roll_ed
17.title(稱號)sign_title_not / sign_title_ed

後端獎勵類型對照:

說明
-9現金
0金幣
3實物
8現金券
11VIP 經驗值
12存送券
13流水券
15金幣
16禮品券(未使用)
17稱號

前端 .coin 類型合併了現金(-9)、金幣(0)、金幣(15),僅影響圖示顯示,不區分這三種獎勵。

TaskDailyMissionDataModel

包含今日任務列表,各任務含:任務名稱、獎勵類型、完成條件、當前進度、是否可領取。

STTaskCheckInModel

包含:本月簽到日曆數據、連續簽到天數、待簽到狀態。

實作重點

  1. 任務/簽到共用 VCBBTasksDetailViewController 透過 isSingMy 屬性決定顯示「簽到」或「任務」Section;TaskSection 枚舉:.singInMy(簽到)/ .taskMy(任務)

  2. 簽到獎勵類型判斷AwardType(rawValue:) 依後端回傳的 awardType 數字映射到前端顯示類型;同一獎勵數字可能在前端顯示相同類型(如 -9, 0, 15 都是 .coin

  3. 簽到百分比請求:需要傳入 actId(活動 ID)+ template: "signPercentage",用於顯示本月簽到完成百分比進度條

  4. 已知限制:活動領取 API(ActivityActReceiveInfoRequest)為通用接口,不同活動類型需傳不同參數


API 呼叫流程

載入簽到與任務 (BBMineViewController → MyTaskViewModel)

setMySighAndTesk()
  ├─ fetchSigns() (循序):
  │  ├─ [API 1] POST api/forehead/system/config/images/query {categoryId:"40201"}
  │  │  → 取得簽到活動 actId
  │  │
  │  ├─ [API 2] POST api/forehead/activity/act/info {actId, template:"signPercentage"}
  │  │  → 簽到獎勵設定、百分比里程碑
  │  │
  │  └─ [API 3] POST api/forehead/activity/act/userInfo {actId, template:"signPercentage"}
  │     → 已簽到天數、簽到紀錄、累計獎勵

  └─ fetchTasks():
     └─ [API 4] POST api/forehead/activity/dailyMission/get
        → 任務列表、進度、活躍度獎勵

用戶操作

簽到: POST api/forehead/activity/act/get
  {actId, actionType:0, subId:0, template:"signPercentage"}

領取累計獎勵: POST api/forehead/activity/act/get
  {actId, actionType:1, subId:<獎勵ID>, template:"signPercentage"}

領取任務獎勵: POST api/forehead/activity/dailyMission/award/get
  {missionId}