iOS Launcher — Báo cáo cập nhật
Theme Store · Control Center — Tracking Analytics
100%
Dành cho Marketing & QA

Theme Store: 6 tab & Tracking chi tiết

3 phần: mỗi tab trong Store là gì, toàn bộ event Analytics đi kèm, và bản cập nhật Control Center — dùng để đối chiếu QA và báo cáo dữ liệu.

Version app: 1.0.10 · Update ngày 22/07/2026

6
Tab trong Store
Trước: 3 tab
49
Event Analytics
Vừa thêm apply_complete — 48 → 49
1

Theme Store: từ 3 tab lên 6 tab

Cửa hàng giao diện được thiết kế lại theo Figma mới, đổi sang dữ liệu API v2.

MỚI HOÀN TOÀN Tab Icons · Widgets · Me Làm mới Trending · Themes · Wallpaper Dữ liệu API v2

Trước đây Store chỉ có Trending · Wallpaper · Themes. Bản mới có 6 tab ở thanh dưới: Trending · Themes · Wallpaper · Icons · Widgets · Me. Ba tab đầu được làm mới giao diện, ba tab sau là hoàn toàn mới.

Đã có · làm mới

Trending

Trang chủ Store. Banner nổi bật, khối "Trending Today", "Featured".

  • Mục Categories đổi kiểu: tiêu đề + "100+ THEMES" đếm động theo dữ liệu thật.
  • Chip danh mục bo tròn, tự xuống dòng (không cuộn ngang).
Đã có · làm mới lớn

Themes

Bộ giao diện (hình nền + icon + widget đi kèm).

  • Khu Best Templates + danh sách theo danh mục.
  • Nút APPLY gradient xanh→tím có tia ✨.
  • Xem trước dạng carousel (lật ảnh) + số Lượt thích / Đánh giá / Lượt tải.
  • Áp dụng 3 bước (màn Set Theme): Hình nền → Icon → Widget, chọn Màn khoá / Màn chính / Cả hai.
  • Nút tim yêu thích + chia sẻ lời mời.
Đã có · làm mới

Wallpaper

Kho hình nền (194 ảnh, 4 bộ sưu tập).

  • Chip lọc + thumbnail có huy hiệu: lượt thích ♥, MỚI, Live.
  • Xem trước carousel lật ảnh; áp dụng Màn khoá / Màn chính / Cả hai.
  • Tim yêu thích + chia sẻ ảnh.
Tab mới

Icons MỚI

Bộ icon iOS thay cho icon mặc định của máy.

  • Hàng New Collections + khối theo danh mục (3 bộ mẫu / khối).
  • Xem trước trên mockup điện thoại → nút Apply Icons Pack.
  • 40 bộ icon, mở khoá bằng coin.
Tab mới

Widgets MỚI

Widget trang trí (ảnh) tải từ Store về màn hình chính.

  • Chia khối: Clock · Battery · Calendar · Photo.
  • Mỗi widget hiện giá coin 🪙; xem trước + thống kê.
  • Nút Add to Homescreen → gắn thẳng lên màn hình chính.
  • MỚI Preview hiện đúng tỉ lệ thật (vuông 1:1 / ngang 2:1) — trước đây widget vuông bị kéo méo trong khung xem trước.
Tab mới

Me MỚI

Trang cá nhân — tổng hợp món đã sở hữu.

  • Lưới My Themes / Icons / Wallpapers / Widgets (đã tải/mở khoá).
  • Favorites (đã tim) + khuyến mãi Get Premium.
  • Privacy Policy · About Us · Help & Support.
2

Tracking — theo dõi hành vi người dùng trong Store

48 sự kiện Firebase Analytics, phủ toàn bộ luồng Store, Coin & đường dẫn lên Premium — đã đối chiếu lại vị trí bắn (line số) và bổ sung 6 event từng bị bỏ sót so với bản báo cáo trước.

49 event (đã rà soát) Gắn liền coin-gate & apply flow Không làm crash app nếu Firebase lỗi
★ Trọng tâm 5 nhóm event đang được hỏi nhiều nhất

Các dòng tô tím nhạt + có nhãn ★ Trọng tâm trong bảng bên dưới là 5 nhóm hành vi hay được dùng để trả lời câu hỏi thực tế: (1) chạm tab nào, (2) chọn category/item nào, (3) bấm Apply món nào + có thấy màn Success hay không, (4) bấm icon coin ở màn nào, (5) mua gói coin nào tại màn Coin. Các event còn lại (điều hướng phụ, share, favorite, billing…) giữ nền trắng như cũ để không làm loãng bảng.

Hạ tầng chung
Mọi event bắn qua 1 cổng duy nhất Analytics.log(event, Bundle) (file analytics/Analytics.kt) — bọc try/catch nên không bao giờ crash app dù Firebase lỗi, có echo Log.d khi debug. Tên event & tham số khai báo tập trung ở analytics/AnalyticsEvents.kt (object ThemeStore + object Coin) — không rải rác hardcode string khắp nơi. Event Ads & Default Launcher (ad_displayed, default_launcher_*…) nằm ở báo cáo riêng: Đo lường Ads & Default Launcher →

Điều hướng (Trending · Themes · Wallpaper · Icons · Widgets · Me)

Event Vị trí Tham số Khi nào bắn
theme_store_open ThemeStoreRoot.kt:150 source Mở Store (ghi nhận tab đầu tiên hiện ra)
theme_store_tab_view ★ Tab click ThemeStoreRoot.kt:791 tab Chạm 1 icon ở thanh 6 tab dưới cùng (khác tab hiện tại)
theme_store_back ThemeStoreRoot.kt:139 source = tên màn Chạm mũi tên Back trên bất kỳ màn con nào (preview, category, set-theme…)
theme_store_wallpaper_open ★ Item click ThemeStoreRoot.kt:505/597/892/918/939 source Chạm 1 ảnh wallpaper ở Trending / tab Wallpaper / Category / Section / Featured
theme_store_theme_open ★ Item click ThemeStoreRoot.kt:528/629/639/994/1113 source, id Click 1 theme ở banner Trending / tab Themes / "You might like" / Category Detail. Riêng nút "Apply" nhanh trên card cũng tính là mở Theme Preview trước (source=themes_tab_apply)
theme_store_icon_pack_open ★ Item click ThemeStoreRoot.kt:556/670/1033/1199 source, id Chạm 1 bộ icon ở Trending / tab Icons / See-All / Category Detail
theme_store_widget_open ★ Item click ThemeStoreRoot.kt:711/1310/1348 source, id Chạm 1 widget ở tab Widgets / "You might like" / Category Detail
theme_store_category_open ★ Category click ThemeStoreRoot.kt:516/589/648/680/719 source, id Chạm 1 chip/card danh mục ở bất kỳ tab nào
theme_store_see_all ThemeStoreRoot.kt:538/549/608/690/1004/1326 kind, id Click "See All" tại:
  • Khối Featured (kind=featured)
  • Khối Icon Packs (kind=icon_packs)
  • 1 danh mục ở tab Wallpaper (kind=category)
  • New Collections tab Icons (kind=icons_new)
  • "You might like" của Theme Preview (kind=theme_related) / Widget Preview (kind=widget_related)
theme_store_preview_on_device ThemeStoreRoot.kt:843 id Chạm thumbnail trong Wallpaper Preview để mở "Preview on device"
theme_store_device_face WallpaperDevicePreviewScreen.kt:116 mode = lock/home Chạm toggle Lock/Home ở màn Device Preview
theme_store_set_theme_step SetThemeScreen.kt:116 value = bước 1-3 Wizard Set Theme chuyển bước (Wallpaper → Icons → Widget)
theme_store_item_impression ThemeStoreViewModel.kt:794 (bắn từ StoreCells.kt qua logImpression()) kind, id 1 card catalog cuộn vào tầm nhìn lần đầu (dedupe theo session)

Apply & Monetization (áp dụng theme / icon / wallpaper / widget)

Event Vị trí Tham số Khi nào bắn
theme_store_apply_sheet ThemeStoreRoot.kt:986, WallpaperPreviewScreen.kt:170, WallpaperDevicePreviewScreen.kt:134 surface Chạm nút "Apply" mở bottom sheet chọn Lock/Home/Both
theme_store_apply_target ApplyWallpaperSheet.kt:77 target Chọn radio Lock Screen / Home Screen / Both trong sheet
theme_store_wallpaper_apply ★ Apply ThemeStoreViewModel.kt:716 (source=wallpaper_tab), :1045 (source=themes_tab) target, source, id (chỉ có ở nguồn themes_tab) Bắn lúc bắt đầu tải wallpaper để apply (chưa xong):
  • Bấm "Apply Now" ở Wallpaper/Device Preview (source=wallpaper_tab)
  • Bước 1 "Apply Wallpaper" trong wizard Set Theme (source=themes_tab)
Apply xong thật dùng theme_store_apply_complete bên dưới.
theme_store_theme_apply ThemeStoreViewModel.kt:895 (tự gọi lại ở :956) id, target SỬA Chỉ là retry nội bộ của applyTheme() khi tải lại icon pack lỗi — không còn nút UI nào gọi trực tiếp (bước 1 wizard hiện bắn theme_store_wallpaper_apply ở trên thay vì event này)
theme_store_icon_pack_apply ★ Apply ThemeStoreViewModel.kt:987/998 (source=icons_tab), :1099 (source=themes_tab), ThemeStoreRoot.kt:1023 (source=icons_tab) id, source Bắn khi apply 1 icon pack:
  • Nút "Apply Icon Pack" độc lập ở Icon Pack Preview, gồm cả chọn "System" (reset về icon máy)
  • Bước 2 wizard Set Theme
  • "Reset to default" ở màn See All Icons
theme_store_widget_add ★ Apply ThemeStoreViewModel.kt:1145, ThemeStoreRoot.kt:1237/1257/1278 id, source Bắn khi thêm 1 widget vào Home:
  • Bước 3 wizard Set Theme (source=themes_tab)
  • Nút "Add to Homescreen" ở Widget Preview (source=widgets_tab) — gộp chung 3 loại widget: clock-face code, widget hệ thống built-in, ảnh coin-gated
theme_store_wallpaper_save MỚI trong report ThemeStoreViewModel.kt:751 id Chạm nút tải/lưu ảnh gốc về thư viện máy (Pictures/iOSLauncher) ở Wallpaper Preview — có trong code (AnalyticsEvents.ThemeStore) nhưng bản báo cáo cũ bỏ sót, chưa từng liệt kê
theme_store_item_favorite ThemeStoreViewModel.kt:773 kind, id, value=1/0 Chạm icon trái tim trên bất kỳ màn Preview nào
theme_store_wallpaper_share ThemeStoreViewModel.kt:820 id Chạm nút share trên Wallpaper Preview (chia sẻ ảnh thật)
theme_store_theme_share / theme_store_icon_pack_share ThemeStoreRoot.kt:978 / :1096 id Chạm nút share trên Theme Preview / Icon Pack Preview (chia sẻ lời mời text)
theme_store_apply_complete ★ Apply completed MỚI ApplySuccessScreen.kt kind Bắn ngay lúc màn Apply Success hiện ra (không đợi user bấm nút) — màn này chỉ hiện ra sau khi apply đã thành công thật (tải xong + set xong mới navigate tới), nên đây là tín hiệu "apply completed" chuẩn xác, tính cả trường hợp user bấm Back thoát ngang không đụng tới 2 nút CTA bên dưới
theme_store_success_action ThemeStoreRoot.kt:1435/1443 action, kind CTA "Go To Home Screen" / "Explore More" trên màn Apply Success — đo tiếp người dùng làm gì sau khi đã completed (không phải tín hiệu completed, dùng theme_store_apply_complete ở trên cho việc đó)

Tab Me

Event Vị trí Tham số Khi nào bắn
theme_store_my_content_open ThemeStoreRoot.kt:744 kind Chạm 1 trong 4 ô "My Themes/Icons/Wallpapers/Widgets"
theme_store_favorites_open ThemeStoreRoot.kt:750 Chạm menu "Favorites"
theme_store_me_menu ThemeStoreRoot.kt:755/762/769 action Chạm "Privacy" / "About" / "Help" trong menu Me
theme_store_premium_click ThemeStoreRoot.kt:567/739/1467 Bấm crown ở header, "Get Premium" ở tab Me, hoặc "Unlock All" ở dialog Hết coin
theme_store_notify_click ThemeStoreRoot.kt:571 Bấm chuông ở header → xin quyền thông báo

Coin economy

Event Vị trí Tham số Khi nào bắn
coin_screen_view ★ Coin icon click ThemeStoreRoot.kt:577/617/660/699/731/778/854/1120/1245 source Click icon coin pill:
  • Header 6 tab ở màn Theme chính (source = trending_pill / wallpaper_pill / themes_pill / icons_pill / widgets_pill / me_pill)
  • 3 màn Preview (Wallpaper Preview, Icon Pack Preview, Set Theme wizard), source = wallpaper_preview_pill / icon_pack_preview_pill / set_theme_pill
  • Click "Get Coin Free" ở dialog Hết coin (source=out_of_coin)
coin_earn_ad ThemeStoreRoot.kt:298 value = số coin thưởng · reward_no MỚI = lượt 1/2/3 trong ngày Xem xong rewarded ad "Watch Ads" trên My Coin
coin_checkin_claim MyCoinScreen.kt:234 value = ngày 1-7 Chạm ô điểm danh đang mở (claimable)
coin_earn_notification ThemeStoreRoot.kt:322/337 "Enable notification" trên My Coin, thưởng 1 lần
coin_spend_unlock ThemeStoreViewModel.kt:311 kind, id, value=giá Apply 1 món tính coin, đủ số dư → trừ coin thành công
coin_out_of_coin ThemeStoreViewModel.kt:320 kind, id, value=giá Apply 1 món tính coin nhưng không đủ số dư → mở dialog Hết coin
coin_pack_buy ★ Coin purchase ThemeStoreViewModel.kt:361 plan = productId Click 1 gói coin trên My Coin → mở luồng mua billing.
Lưu ý: event không lưu "vào màn Coin từ đâu" — muốn biết nguồn phải tự nối chéo với coin_screen_view bắn ngay trước đó cùng phiên (theo timestamp/user), code hiện chưa tự gắn 2 event này với nhau.

Billing / Premium (nguồn gắn theme_store)

Event Vị trí Tham số Khi nào bắn
sub_paywall_view LauncherViewModel.kt:2788 (gọi từ MainActivity.kt:622/791) source=theme_store Bất kỳ CTA Premium nào trong Store mở paywall của launcher
sub_price_loaded MỚI trong report LauncherViewModel.kt:2883 has_month, has_year Query xong giá 2 gói Play Billing ngay sau khi paywall mở (không có source riêng — chỉ suy ra qua thời điểm mở từ Store)
sub_plan_selected MỚI trong report LauncherViewModel.kt:2826 plan=month/year Chọn gói Tháng/Năm trên màn paywall
sub_checkout_start MỚI trong report LauncherViewModel.kt:2943 plan, source=theme_store Bấm nút mua trên paywall, đã resolve xong ProductDetails → mở luồng Play Billing
sub_restore_start ThemeStoreViewModel.kt:386 (My Coin), LauncherViewModel.kt:2803 (paywall) Bấm "Restore" trên My Coin, hoặc "Restore" trên màn paywall Premium
sub_restore_result BillingManager.kt:185 active (bool) Kết quả query purchase sau khi restore
sub_purchase_success BillingManager.kt:225 (coin), :240 (credit chat_ai), :271 (subscription) plan, source=theme_store/theme_store_coin Mua thành công gói Premium (subscription) hoặc gói coin từ My Coin
sub_purchase_failed MỚI trong report BillingManager.kt:68 code = BillingResponseCode Play Billing trả lỗi (không phải do người dùng huỷ)
sub_purchase_cancelled MỚI trong report BillingManager.kt:65 Người dùng tự đóng luồng mua Play Billing (USER_CANCELED)
sub_paywall_dismissed MỚI trong report LauncherViewModel.kt:2809 Đóng paywall (nút back/close/"Continue with Ads") dù mua hay không

Widget từ Store → gắn lên Home

Event Vị trí Tham số Khi nào bắn
widget_added LauncherViewModel.kt:1899/2213/2239 kind, source Sau khi tải xong PNG ở Widget Preview và đặt lên home grid — source dùng chung 1 event cho cả 3 nguồn: theme_store / builtin_picker / dailyopen
Ghi chú cho QA
Widget ảnh từ Store (STORE_IMAGE) bắn widget_added với source="theme_store". Nhưng nếu người dùng thêm widget "sống" built-in (Pin/Ảnh/Clock/Calendar) từ cùng bảng "Add Widget", path đó lại gắn source="builtin_picker" dù cũng mở từ tab Widgets — hai nguồn khác nhau dù giao diện gộp chung, cần lưu ý khi lọc báo cáo theo source.
Event cũ đã xoá
theme_store_unlock_*theme_store_wallpaper_favorite không còn call-site nào trong code hiện tại — chỉ còn ghi chú lịch sử, không xuất hiện trong dashboard analytics kể từ bản này.

↑ Về đầu trang

3

Control Center: giao diện mới & Now Playing nghe nhạc

Tinh chỉnh lại kích thước/bo góc toàn bộ tile, và thay khối Now Playing từ dữ liệu giả sang lấy thẳng từ media session của app nhạc đang phát trên máy.

MỚI Media session Tinh chỉnh giao diện Không cần xin quyền mới
Cập nhật 18–20/07/2026

Giao diện Control Center

Bo lại góc + tinh chỉnh khoảng cách toàn bộ tile cho gọn mắt, đỡ nặng hơn bản cũ.

  • Bo góc thống nhất 30dp cho tile Connectivity / Now Playing / Large.
  • Giảm khoảng cách lưới 18→16dp, icon badge tròn 52→44dp — tile đỡ to nặng, mắt nhìn thoáng hơn.
  • Tile tròn 1×1 (icon app) thêm khoảng inset tránh bị bo góc cắt mất viền icon.
  • Kéo cao phần chrome trên cùng (giờ/ngày) sát vùng status-bar ẩn, đỡ khoảng trống thừa phía trên.
Cập nhật 18/07/2026

Now Playing nghe nhạc MỚI

Trước đây khối Now Playing chỉ hiện dữ liệu giả (tên bài/nghệ sĩ cố định). Giờ đọc thẳng session nhạc đang phát trên máy.

  • Tự nhận diện app nhạc đang phát (Spotify, YouTube Music, trình phát nhạc hệ thống…), ưu tiên app đang play.
  • Hiện đúng tên bài, nghệ sĩ, ảnh bìa album lấy trực tiếp từ bài đang phát — không còn text mẫu cứng.
  • Nút Play/Pause/Next/Previous + thanh tua điều khiển thẳng app nhạc đó (không giả lập).
  • Chỉnh volume trong Control Center đồng bộ 2 chiều với volume nhạc của máy.
  • Không cần xin thêm quyền mới — tái dùng quyền Notification Access app đã có sẵn (dùng chung cho tính năng đếm badge thông báo).
Ghi chú cho QA
Khối Now Playing chỉ hiện dữ liệu khi (1) máy đã bật quyền Notification Access cho app (Settings → Notification access), và (2) đang có ít nhất 1 app nhạc mở session phát nhạc. Thiếu 1 trong 2 điều kiện trên, khối Now Playing sẽ ở trạng thái rỗng/ẩn — đây là hành vi đúng, không phải bug.

↑ Về đầu trang