Questari
questari · flutter · 實作規格版本 0.2.0
有:新手引導、帳號註冊、小遊戲、付費
沒有:廣告(報表中看不到這些步驟是正常的,不是流失)
建議漏斗
GA4 → 探索 → 開始新的探索 → 漏斗探索。按「步驟」旁的編輯,依下方順序「加入步驟」:每一步選事件,有寫條件的就在那個事件加上參數條件。要按某個代號拆開看,把它放進「細分維度」(GA4 依使用者進入漏斗那一步的值分組)。每個 app 在自己的 GA4 資源各建一次,存好之後數字會自動更新。以 first_open 開頭的漏斗只算報表期間內新安裝的人;升級上來的舊用戶不會出現在裡面。
新手引導完成率:首次啟動引導
每一步還剩多少人,看在哪一步流失最多。
first_opencfd_onboarding_step,條件flow_id=first_run、step_id=grade_pick、action=viewedcfd_onboarding_step,條件flow_id=first_run、step_id=team_intro、action=viewedcfd_onboarding_step,條件flow_id=first_run、step_id=energy_intro、action=viewedcfd_onboarding_step,條件flow_id=first_run、step_id=dex_intro、action=viewedcfd_onboarding_step,條件flow_id=first_run、step_id=dex_intro、action=completed
註冊轉換
安裝後有多少人完成註冊。
first_opensign_up
付費轉換
看到付費牆的人有多少付款;用細分維度看是哪個付費牆。
cfd_paywall_viewpurchase
細分維度:
paywall_idpurchase 要等 RevenueCat → Firebase 串接開好(或 app 自己送)才會有。
遊戲完成率
開始一局的人有多少打完;用細分維度看是哪個遊戲。
cfd_game_startcfd_game_end,條件outcome=completed
細分維度:
game_id功能使用
各功能用了多少:報表 → 參與 → 事件,點 cfd_feature_enter,依 feature_id 拆分。這個不適合做成漏斗:漏斗的細分看第一步,而 first_open 沒有 feature_id。
功能
在報表中用 feature_id/item_id 篩選
地圖
map
隊伍
team
圖鑑
dex
商店
shop
學習中心
learn
學習週報
weekly_report
學期報告
semester_report
課綱覆蓋
coverage
錯題重練
retry
知識點練習
practice
冒險者手冊
handbook
勳章牆
medals
家長中心
parent_center
小遊戲
在報表中用 game_id/item_id 篩選
答題戰鬥・野怪一(易)
battle_wild_1
答題戰鬥・野怪二(難)
battle_wild_2
答題戰鬥・野怪三(混合難度)
battle_wild_3
答題戰鬥・頭目(非常難)
battle_boss
畫面
在報表中用 screen_name 篩選
地圖
map
隊伍
team
圖鑑
dex
圖鑑內頁
dex_book
商店
shop
學習中心
learn
冒險者手冊
handbook
勳章牆
medals
戰鬥
battle
錯題重練
retry
知識點練習
practice
新手引導
onboarding
家長中心
parent_center
新手引導流程
在報表中用 flow_id 篩選
首次啟動引導
first_run
步驟:grade_pick → team_intro → energy_intro → dex_intro
付費牆
在報表中用 paywall_id 篩選
家長中心購買頁
parent_purchase
此 app 專屬事件
首頁沒有列的事件都在這裡;名稱以 questari_ 開頭
打贏章節頭目(通關)
questari_chapter_clear
Boss defeated. params subject, grade, chapter_id (chapter is identified by all three — ch1 repeats across grades), is_first_clear = true | false
參數 subject
參數 grade
參數 chapter_id
參數 is_first_clear
擲球捕捉野生怪物
questari_capture
Capture attempt resolves after a wild-monster win. success = true | false, species_id = catalog monster id, is_shiny = true | false
參數 success(與共用表同義)
參數 species_id
參數 is_shiny
孩子點了付費章節(被帶去訂閱入口)
questari_unlock_notice
A non-member child taps a paid chapter; since PT-6511 the tap opens the subscription entry (Parent Center) instead of expanding. subject, grade, chapter_id, sku = the entitlement that would unlock it (pack.<subject>.g<N>)
參數 subject
參數 grade
參數 chapter_id
參數 sku
領每日答題任務獎勵
questari_daily_claim
Daily reward claimed on the map (requires 10 correct answers that day — not a visit/check-in)
用金幣買道具
questari_shop_buy
Coin purchase succeeds in the shop or in battle (not real money). shop_item = ball | potion | extra_time | hint
參數 shop_item
家長按下購買某個方案
questari_checkout_start
Parent taps buy in parent_purchase, before the store sheet. product_id = store product id; sku = pass.all | pack.<subject>.g<N> | bundle.g<N>; plan = monthly | yearly | pack | other_subscription; placement as cfd_paywall_view
參數 product_id
參數 sku
參數 plan
參數 placement(與共用表同義)
購買結果(買了哪個方案、成功與否)
questari_purchase_result
Store flow returns for a buy attempt. Same product_id / sku / plan / placement as checkout_start. purchase_outcome = granted | pending | cancelled | already_owned | owned_by_other_account | retryable | failed (pending = waiting for Ask to Buy / store approval). error_code = bounded cause on non-granted outcomes. No value/currency — revenue comes only from the RevenueCat → Firebase integration. failed / retryable also log cfd_error(operation=purchase)
參數 product_id
參數 sku
參數 plan
參數 placement(與共用表同義)
參數 purchase_outcome
參數 error_code(與共用表同義)
恢復購買結果
questari_restore_result
Restore purchases returns. purchase_outcome = granted | nothing_to_restore | cancelled | owned_by_other_account | retryable | failed; failures also log cfd_error(operation=restore_purchase)
參數 purchase_outcome
參數 error_code(與共用表同義)
購買頁能不能買(看不到購買鈕的原因)
questari_checkout_availability
Purchase area in parent_purchase becomes visible or its state changes. placement as cfd_paywall_view; availability = ready | needs_account | store_unavailable | not_configured | empty_catalog | load_failed
參數 paywall_id(與共用表同義)
參數 placement(與共用表同義)
參數 availability
一場答題的成績
questari_learning_summary
A battle, practice, retry or similar-question session ends (result screen or explicit exit). learning_mode = battle | practice | retry | similar; learning_result = completed | failed | quit; subject, grade, chapter_id; encounter_slot = wild_1 | wild_2 | wild_3 | boss | none; difficulty_band = easy | hard | very_hard | mixed; answered_count, correct_count, timeout_count are integers
參數 learning_mode
參數 learning_result
參數 subject
參數 grade
參數 chapter_id
參數 encounter_slot
參數 difficulty_band
參數 answered_count
參數 correct_count
參數 timeout_count
訂閱狀態變化(試用、轉付費、續訂、到期)
questari_subscription_change
An entitlement change is seen between two refreshes in the same session. change_type = renew | expire today (trial_start / trial_convert / cancel reserved; no data source yet). sku as checkout_start. No revenue fields
參數 change_type
參數 sku
家長綁定/登入帳號的每一步
questari_account_step
Account flow step in Parent Center. auth_flow = bind | login | pin_recovery; method = apple | google | email; account_step = started | email_sent | cancelled | failed. Success is logged by sign_up / login, not here
參數 auth_flow
參數 method(與共用表同義)
參數 account_step