Tracking Block Club: phần gắn bổ sung

Đối chiếu file Block_Club_Event_Tracking (2).xlsx (bản 1.0.2, 05/11/2026) với code. Kết quả: 3 event mới đã gắn, 4 event có sẵn được thêm param. Ngày 05/11/2026, bản web test v168.

22event đã gắn đủ từ trước
3event mới gắn thêm
4event được thêm param
7tên trong sheet cố ý không bắn

1. Event mới gắn thêm

EventBắn lúc nàoParamChống trùngVị trí code
mới
no_space_left
Core xác nhận hết chỗ: lúc offer hồi sinh mở, hoặc lúc ván chết thẳng (không có offer). Trước revive_offer và trước round_end/level_end. Finish (Settings, op replay) và Adventure thắng không bắn. round_id, game_mode, no_space_index, score, moves_count, duration, revive_count; Adventure thêm level_id, attempts Khoá round_id + no_space_index. Cờ "đã gửi" lưu UserDefault (qua redraw/resume). Lượt hết chỗ kế tiếp chỉ mở sau revive_success. BoardPlay.cpp:727 (Session::pxApply)
AnalyticsTrack.cpp:439
mới
result_view
Ngay sau khi màn kết quả hiện. Classic: settlement mở (sau interstitial endInsertFail nếu có). Adventure: màn Thắng/Thua Travel dựng xong. round_id (lượt vừa kết thúc), game_mode, result, score; Adventure thêm level_id, attempts Một lần mỗi round_id vừa kết thúc. Reloader đổi cỡ màn dựng lại settlement không gửi lại. BoardPlay.cpp:913 (Classic)
BoardPlay.cpp:1748 (Adventure)
AnalyticsTrack.cpp:460
mới
result_action
Người chơi bấm trên màn kết quả, trước khi chuyển scene. round_id (lượt vừa kết thúc), game_mode, result, action; Adventure thêm level_id, attempts Một lần mỗi round_id vừa kết thúc: bấm đúp chỉ tính một. AnalyticsTrack.cpp:478, xem bảng action bên dưới

Giá trị action đã gắn

actionNútVị trí
playClassic: nút Chơi trên settlementBoardPlay.cpp:885
next_levelAdventure thắng: nút Next (chế độ điểm có theme, chế độ điểm thường, màn kết quả thắng)BoardPlay.cpp:1784, :1851
retry_levelAdventure thua: nút Chơi lạiBoardPlay.cpp:1915
backAdventure: nút Back về lobby (màn thắng, Well Done, màn thua)BoardPlay.cpp:1752, :1866, :1910

Không có action restart, đúng sheet.

2. Param thêm vào event có sẵn

EventParam thêmCách tínhVị trí
đổi
round_start
start_reason, previous_round_id round_end lưu pending (round_id + end_reason). Ván Classic kế tiếp: after_no_space_left / after_finish. Chưa từng chơi Classic: first_game (bỏ previous_round_id). Có lịch sử mà mất pending (bản cũ): unknown. AnalyticsTrack.cpp:329
đổi
round_end
best_score_before, is_new_record best_score_before = GameState::topScoreOnEnterGame chốt lúc round_start, lưu cùng round qua resume/revive. is_new_record = 1 khi score > best_score_before. Thiếu baseline thì bỏ cả hai. BoardPlay.cpp:942/1065/1083 truyền baseline
đổi
level_end
goal_type, goal_required, goal_achieved, goal_remaining way 0 = score (requiredScore), 2 = line_clear (requiredRowCol), 1 = collection (tổng required). achieved kẹp trong [0, required]; remaining = max(required - achieved, 0). way khác 0/1/2 thì bỏ cả nhóm. BoardPlay.cpp:772-774
AnalyticsTrack.cpp:395
đổi
revive_success
game_mode, moves_count, duration, no_space_index; Adventure thêm level_id, attempts Cùng bộ đếm với no_space_left và end. Sau khi bắn, mở lượt hết chỗ kế tiếp. AnalyticsTrack.cpp:544

3. Tên trong sheet cố ý không bắn

TênLý do
level_win, level_loseSheet quy về level_end (success / reason). Bắn thêm là đếm đôi; test tracking-plan-excel cấm hai tên này.
tutorial_stepSheet quy về tutorial_start / tutorial_end.
revive_rewarded, travel_prop_clear, travel_prop_hammer, travel_prop_universalGiá trị placement (location) của sheet IAA, không phải tên event. Đã có trong các event quảng cáo.

4. File đã sửa

5. Kiểm chứng

Chưa nghiệm thu runtime. Chưa xem event trên Firebase DebugView. Nên chạy checklist dưới trên máy thật trước khi chốt.

6. Checklist QA (theo sheet Level)