Block Crush · Firebase Crashlytics

Toàn bộ sự kiện gửi lên Crashlytics

Mọi breadcrumb, custom key và lỗi non-fatal game ghi lại để đọc lại hiện trường khi crash. Chỉ chạy trên Android; trên desktop macOS các hàm là rỗng (DEC-203).

Cầu nối C++ → Java JNI Lớp phoenix::crash Tài liệu gốc docs/CRASHLYTICS-EVENTS.md
9
custom key
6
popup theo dõi
11
nhóm button
24
anim / fx

00 Cơ chế gửi

Năm hàm trong game/Source/platform/CrashReporting.h/.cpp, gọi AppActivity.java qua JNI.

Hàm C++Hàm JavaTác dụng
crash::log(msg)logCrashlyticsThêm một dòng breadcrumb vào log báo cáo (đệm ~64 KB, dòng cũ bị đẩy ra).
crash::setCustomKey(k,v)setCrashlyticsCustomKeyĐặt cặp key/value; báo cáo crash hiện giá trị cuối cùng.
crash::event(cat,name)gộp 2 hàm trênGhi log("cat: name") và setCustomKey("last_cat", name).
crash::recordException(name,msg)recordCrashlyticsExceptionLỗi non-fatal, vào mục Non-fatals trên Console.
crash::testCrashNative/Java()crashlyticsTestCrashÉp crash để kiểm, chỉ gọi từ nút debug.

01 Custom key key

Giá trị trạng thái cuối cùng hiện ra trong báo cáo crash.

KeyGiá trịVị trí
screenid màn hình vừa mởScreens.cpp:29
seedseed ván hiện tạiBoardPlay.cpp:499
game_over_scoređiểm khi thuaBoardPlay.cpp:316
autoplayon / offBoardPlay.cpp:1963
last_buttontên button bấm gần nhấtmọi event("button")
last_popup_openpopup mở gần nhấtmọi event("popup_open")
last_popup_closepopup đóng gần nhấtmọi event("popup_close")
last_animanim/fx chạy gần nhấtmọi event("anim")
last_asset_loadprefab/layout nạp gần nhấtFxService.cpp:288

02 Vòng đời app & màn hình log

LogKhi nàoVị trí
app: startApp khởi động xongAppDelegate.cpp:164
app: backgroundApp vào nềnAppDelegate.cpp:174
app: foregroundApp quay lạiAppDelegate.cpp:185
screen: <id> +key screenMở một màn qua registerScreenScreens.cpp:28-29

03 Ván chơi & lỗi

Breadcrumb trong ván Endless/Travel và các lỗi non-fatal.

Log / lỗiKhi nàoVị trí
play: start seed=<N> [resume(N)] +key seedBắt đầu / tiếp tục ván EndlessBoardPlay.cpp:497-499
play: resume ra game over ⇒ dựng ván mớiSave khôi phục ra bàn đã chết nên bỏ save, mở ván mớiBoardPlay.cpp:519
play: game over score=<N> +key game_over_scoreThuaBoardPlay.cpp:314-316
travel: start theme=.. level=.. seed=..Bắt đầu ván TravelBoardPlay.cpp:179
travel: result win|lose score=<N>Popup kết quả Travel hiệnBoardPlay.cpp:1317
board: drag kẹt, huỷ và nhặt lạiPhát hiện drag kẹt, tự huỷBoardPlay.cpp:1835
non-fatal ApplyInputErrorCore ném lỗi khi áp dụng inputBoardPlay.cpp:291
non-fatal LevelLoadErrorKhông đọc được levels/endless.jsonBoardPlay.cpp:457
non-fatal ResumeReplayErrorReplay save lỗi khi tiếp tục vánBoardPlay.cpp:510
autoplay: on / off +key autoplayBấm nút AUTO (bản debug)BoardPlay.cpp:1963
autoplay: move slot=.. r=..Mỗi nước tự chơiBoardPlay.cpp:2024
autoplay: no move, stopAUTO hết nước điBoardPlay.cpp:2019
test: native/java crashNút CRASH debugCrashReporting.cpp, BoardPlay.cpp:~1998

04 Sảnh & Travel log

Toàn bộ nhóm này mới thêm trong lần cập nhật event.

LogKhi nàoVị trí
lobby: open mainMở sảnh chínhLobbyScreens.cpp createMainLobby
lobby: enter endlessVào Classic 8×8 từ sảnhLobbyScreens.cpp enterEndless
lobby: enter travelVào Travel từ sảnhLobbyScreens.cpp enterTravel
travel_lobby: open style=<K>Mở màn chọn level TravelTravelLobbyScreen.cpp createTravelLobby
travel_lobby: play level=<N> style=<K>Bấm nút chơi level TravelTravelLobbyScreen.cpp TravelLevelBtn
forgecrown: game_start mode=<M>Bắt đầu ván tính tiến độ Forge CrownForgeCrownService.cpp onGameStart
forgecrown: settle mode=<M> status=<S> score=<N>Kết toán ván cho Forge CrownForgeCrownService.cpp onGameSettle
forgecrown: travel_collect sum=<N>Tiến độ nhiệm vụ Travel đổiForgeCrownService.cpp onTravelCollectionAdded

05 Popup popup_open / popup_close

PopupTên ghiVị trí
Settings / Language / More SettingsUISettingView_Android, UILanguageSettingView, UIMoreSettingViewmở SettingsScreens.cpp:226; đóng :212
Điều khoảnUIPolicyViewmở FirstRunScreens.cpp:291; đóng :309
Hỏi tuổiUIAgeSurveyViewmở FirstRunScreens.cpp:228; đóng :246
Thư WelcomeUIEmailPopupViewmở SettlementScreens.cpp:1272; đóng :1238
Mục tiêu TravelTravelTargetmở BoardPlay.cpp:1143; đóng :1189
Kết quả TravelTravelWin / TravelFail (chỉ mở)BoardPlay.cpp:1316

06 Button button

ButtonVị trí
Settings / Language / More (toggle sound, bgm, rung, nút đóng)SettingsScreens.cpp:189
Màn kết toán (Continue, Share, đóng thư)SettlementScreens.cpp:235
First-run (đồng ý/từ chối điều khoản, chọn tuổi)FirstRunScreens.cpp:105
Bánh răng cài đặt ButtonSettingBoardView.cpp:463
Bỏ qua hướng dẫn JumpNewGuideBoardView.cpp:528
Sảnh chính: LobbyJourneyBtn, LobbyClassicsBtn, LobbyClassicTab, LobbyTravelTab, ForgeCrownIcon (đang ẩn)LobbyScreens.cpp:101
Sảnh Travel: TravelMagnifier, TravelHomeTab, TravelLevelBtnTravelLobbyScreen.cpp:60
Nút quay lại ván Travel TravelBackBoardPlay.cpp:1125
Nút trong popup Travel TravelPopup:<chữ nút>BoardPlay.cpp:1214, :1269

07 Anim / FX anim

Trong BoardFx.cpp, mỗi id là một hiệu ứng được đánh dấu khi chạy.

idÝ nghĩaDòng
line_clearXoá hàng/cột317
combo_countHiện số combo500
combo_petPet phản ứng combo503
praiseChữ khen (Good, Great)609
new_recordKỷ lục mới746
unbelievableHiệu ứng Unbelievable1155
perfect_stepPerfect step1305
crush_perfectCrush perfect1324
pre_matchPre clear báo trước xoá1671
pre_match_clearscreenPre clear biến thể clear screen1682
pre_match_replacePre clear biến thể replace1687
pre_match_coloramaPre clear biến thể colorama1692
pre_match_rainbow_stayPre clear rainbow giữ lại1798
start_bannerBanner bắt đầu ván1824
combo_edge_glowViền sáng combo1853
combo_tips_breakGợi ý combo vỡ1870
help_hintGợi ý nước đi1979
clear_boardXoá sạch bàn (2 chỗ)2183, 2217
game_overAnim thua (No Space Left)2428

Anim/FX ngoài BoardFx.cpp:

idÝ nghĩaVị trí
iq_scoreAnim điểm IQ màn kết toánSettlementScreens.cpp:937
crownVương miện kỷ lụcSettlementScreens.cpp:999
settlementAnim màn kết toánSettlementScreens.cpp:1003
letterAnim mở thư WelcomeSettlementScreens.cpp:1292
pet_clickPet bị chạmPetSpine.cpp:210
Cố ý bỏ qua vì tần suất cao (tránh tràn log mỗi khung hình): score_add, cur_score, put_spread, board_click, block_lift, screen_shake, pet_idle.

08 Nạp asset asset_load

asset_load: <tên prefab> ghi mỗi lần một prefab/layout/AnimatorController được đánh dấu nạp (fx::markAsset) tại FxService.cpp:288, gọi từ ui/LayoutLoader.cpp và vài anim (ví dụ EmailPopupView).