32 event, một tầng chung, Segment tính ở server
Toàn bộ sự kiện analytics trong bản port: gom tham số ở phoenix::analytics, đẩy xuống SDK qua game_beacon theo bốn nền tảng. Nguồn sự thật là tracking-plan.yaml, đối chiếu bản Excel B17.
Luồng dữ liệu client → server
phoenix::analytics →
game_beacon::trackEvent → Android / iOS / Web / Desktop → SDK
Mỗi event tự gắn 6 common params: game_mode, schema_version, event_id (UUID), environment (production/demo), app_build, app_session_id. Event chỉ gửi sau khi có consent; trước đó xếp hàng chờ.
Đối chiếu file Excel ↔ plan
File Block_Club_Event_Tracking.xlsx có 13 sheet; chỉ 5 sheet chứa event. Cộng không trùng ra 34 event. Plan port giữ 32: bỏ 3 tên cũ, thêm 1 event Segment.
| Sheet trong file | Event (không trùng) | Vào plan? |
|---|---|---|
| Session | 21 | 18 — bỏ level_win, level_lose, tutorial_step (tên cũ) |
| Level | 5 riêng | 5 — level_end, level_continue, no_space_left, result_view, result_action |
| Tutorial | 2 | 2 |
| Event | 6 | 6 — chuỗi khởi động app |
| IAA | 6 (trùng Session) | đã có · revive_rewarded, travel_prop_* là giá trị location, không phải event |
| Segment | 0 event server | +1 · age_survey_result (mới) |
| Parameters, Placements, Tutorial Map, Common Params, Doi chieu, Quy tac va QA, Version | 0 | sheet từ điển / quy tắc |
| Cộng | 34 | 32 trong plan (34 − 3 cũ + 1 mới) |
Danh mục event theo nhóm
Mỗi thẻ: tên event, nguồn sheet, trạng thái, nơi bắn, và danh sách tham số.
User property 5 khóa
difficulty_bucket và ab_group có trong plan nhưng chưa có call setUserProperty trong code — chỉ nhóm age_* được gửi thật (từ pxAgeGroupUpdate).Phần Segment sheet mới
Sheet Segment là đặc tả tầng dữ liệu: vòng đời, tần suất, mode, kết quả, trợ giúp, quảng cáo, độ tuổi, trình độ — tính hằng ngày ở server (T = 00:00 Asia/Saigon, cửa sổ W7 / W28). Client không tính cũng không bắn segment.
Không tạo segment_change / segment_rule_trigger — đúng yêu cầu sheet.
Client đã gắn: event age_survey_result (param age_group, age_data_status, age_source) + ba user property tuổi, mặc định unknown / not_collected / unknown. Hàm pxAgeGroupUpdate() bắn lần đầu mỗi cài đặt và khi giá trị đổi.
Mirror doc: docs/tracking/Segment.csv, khai trong tracking-plan.yaml + Event_Tracking.csv.
Khoảng trống chưa làm
Tham số segment thiếu ở event nguồn
game_mode ở tutorial_end và app_ready; rewarded ở ad_revenue_sdk; play_mode ở ab_exposure.
Phần E — đo trình độ
Chưa đo decision_time_ms, drag_place_time_ms, invalid_drop_count, rows_cleared / columns_cleared / lines_cleared. valid_placement_count có thể tái dùng moves_count.
Nguồn tuổi
B17 chưa có UI/khảo sát thu tuổi → age_group luôn unknown. Không đoán tuổi từ hành vi.
Property chưa set runtime
difficulty_bucket và ab_group chưa được gán khi chạy.
Quảng cáo thật
AppLovin MAX vẫn môi trường demo, key placeholder — ad_revenue_sdk chưa có doanh thu thật.