Mục lục trang
1 Bản này đổi gì
Đọc 30 giây là đủ nắm. Chi tiết từng phần ở các mục dưới.
Flow ngắn hơn
Từ lúc mở app tới màn hình chính: 6 vị trí ads + 1 paywall → 3 vị trí ads, không paywall. Bỏ mọi chỗ khoá màn hình để chờ ads.
Event funnel đổi tên hết
Lần mở đầu tiên: 17 step còn 9. Các lần mở sau: 5 step còn 4. Tên cũ ngừng bắn hoàn toàn.
Carousel promo trên Home
Một dialog vuốt được, xoay 6 card giới thiệu tính năng. Thay dần dialog
default_launcher_prompt cũ.
Luật của carousel đã đổi so với bản mô tả đầu tiên: cách đếm lượt, nhịp lặp, limit, và hành vi khi lượt carousel bị chặn. Ai đọc bản trước phải đọc lại mục 5.
| Nhóm thay đổi | Trạng thái | Đọc ở mục |
|---|---|---|
| Flow mở app → màn hình chính ngắn hơn | ✅ Đã vào code (v1.0.15) | 2 · 3 |
| Bộ event funnel đổi tên + rút step | ✅ Đã vào code (v1.0.15) | 4 |
| Carousel promo + card set_default | ✅ Đã vào code, chưa phát hành | 5 · 6 |
Param source trên mini_app_open — mở mini app từ chỗ nào | ✅ Đã vào code, chưa phát hành | 5 |
| Dọn các vị trí native ads show rate thấp | ✅ Đã vào code (đợt sau v1.0.15) | 7 |
2 Flow mở app → màn hình chính: trước và sau
Cùng số màn hình, chỉ bớt thứ chen vào giữa. Chữ đỏ là phần đã bỏ, chữ xanh là phần mới.
Trước — 6 vị trí ads + 1 paywall
Splash native ads + full-screen ads
chờ tối thiểu ~4 giây
│
Intro 5 trang native ads
khoá vuốt + khoá nút Next 8 giây
│
Sub (paywall) → đóng lại thì ra inter ads
│
Language native ads #1 + native ads #2
khoá cả danh sách ngôn ngữ 8 giây
│
ChooseWallpaper
│
Hello
│
Màn hình chính
Sau — 3 vị trí ads, không paywall
Splash full-screen ads
giao diện mới, không có ads trong màn
│
Intro 5 trang native ads
vuốt / bấm được ngay từ giây đầu
│
Language native ads #1
danh sách bấm được ngay
chọn xong → hiện "Applying language…" ~3 giây
│
ChooseWallpaper
│
Hello
│
Màn hình chính
Từng màn đổi gì
| Màn | Trước | Sau | Vì sao |
|---|---|---|---|
| Splash (màn logo lúc mở app) |
Dùng chung giao diện với màn "đang tải ads": có ô native ads 250dp, có icon app, và phải giữ màn tối thiểu ~4 giây cho ads kịp hiện. | Giao diện riêng theo design mới: ảnh nền + tên app + thanh tiến trình. Không còn ô native ads. Chỉ còn mức giữ màn tối thiểu 3 giây theo cấu hình từ xa. | Bỏ mức chờ 4 giây của ô native → splash ngắn hơn ~4 giây ở lượt có ads. Full-screen ads vẫn giữ nguyên (AOA hoặc inter ads, tuỳ cấu hình). |
| Intro (5 trang giới thiệu) |
Vào màn là khoá vuốt và khoá nút Next 8 giây để chờ native ads về. | Vuốt và bấm được ngay. Native ads ghim đáy màn vẫn giữ, về lúc nào hiện lúc đó. | Native ads về trung bình sau 4,9–6,4 giây mà màn khoá 8 giây — người dùng tưởng app treo rồi bỏ. Riêng màn này mất −148 người ở bản trước. |
| Sub (màn mời mua gói) |
Chen giữa Intro và Language. Đóng màn này lại thì ra thêm một inter ads. | Bỏ khỏi onboarding. Intro xong đi thẳng sang Language. | Inter ads ở đây có tỉ lệ bấm 45,6% (410 show → 187 click → chỉ 112 người quay lại) — gần như toàn bộ là bấm nhầm, kèm rủi ro bị Google đánh dấu invalid traffic. Màn mua gói không bị xoá khỏi app, vẫn vào được từ Cài đặt. |
| Language (chọn ngôn ngữ) |
Khoá cả danh sách 8 giây. Có 2 vị trí native ads: một lúc vào màn, một sau khi chọn ngôn ngữ. Nút Continue chỉ bật khi ads thứ hai đã về. | Danh sách bấm được ngay, còn 1 vị trí native ads. Lần chọn ngôn ngữ đầu tiên hiện lớp phủ "Applying language…" ~3 giây rồi tự đóng, vẫn ở màn Language với nút Continue đã bật. Ads nào sẵn sàng đúng lúc lớp phủ đang chạy thì nút bấm của ads đổi sang màu xanh. | Màn này mất −142 người ở bản trước. Nút Continue giờ không phụ thuộc ads nữa. Lớp phủ 3 giây giữ lại một khoảng người dùng nhìn màn, thay cho việc khoá 8 giây. |
| Cả chuỗi (nút back của máy) |
Splash + Intro bấm back thì không làm gì, nhưng Language / ChooseWallpaper / Hello bấm back là thoát app. | Bấm back ở mọi màn trong chuỗi đều không làm gì. | Đây là một phần trong số người mất ở màn Language: bấm back cho đỡ chờ thì mất app luôn. |
Mất: khoảng 2.500–3.000 impression / 4 ngày (native ads ở Splash + native ads thứ hai ở Language + inter ads sau paywall).
Số show rate cũ của 2 vị trí bị bỏ (99,3% và 81%) không phải thành tích — nó cao vì người dùng bị màn hình khoá lại, không đi đâu được.
3 Bỏ gì, xoá gì
Danh sách đủ. Cột cuối cho biết việc bỏ đó ảnh hưởng số liệu ra sao.
Bỏ khỏi flow
| Bỏ gì | Ở đâu | Vì sao | Ảnh hưởng số liệu |
|---|---|---|---|
| Native ads ở màn Splash | Chỉ màn Splash lúc mở app từ đầu | Người dùng phải chờ thêm ~4 giây chỉ để ô ads kịp hiện, ngay ở giây đầu tiên dùng app | Mất 1 step funnel. Native ads ở màn đang tải của các app trong app (Clock, Gallery…), Theme Store và Chat AI giữ nguyên, không đụng tới |
| Màn mời mua gói (paywall) | Giữa Intro và Language | Chen một màn bán hàng vào lúc người dùng chưa biết app làm được gì | Mất 1 step. Màn này vẫn còn trong app, vào từ Cài đặt |
| Inter ads sau khi đóng paywall | Ngay sau màn mua gói | Tỉ lệ bấm 45,6% = bấm nhầm; rủi ro invalid traffic | Mất 1 step |
| Native ads thứ hai ở Language | Màn chọn ngôn ngữ | Nó là lý do nút Continue bị khoá. Show rate 99,3% chỉ vì người dùng không đi đâu được | Mất 1 step |
| Khoá màn để chờ ads (8 giây) | Intro + Language | Ads về sau 4,9–6,4 giây, khoá 8 giây là chờ vô ích | Show rate của native ads ở Intro sẽ giảm — đó là số thật, không phải hỏng. Lý do "không hiện" giờ hay là người dùng bấm đi tiếp trước khi ads về |
| Chờ tối thiểu 4 giây của ô native ở Splash | Màn Splash | Không còn ô native ads thì không có gì phải chờ | Splash ngắn hơn ~4 giây; vẫn giữ mức 3 giây đổi được từ xa để có nhịp branding |
| Icon app ở màn đang tải ads | Màn chờ inter ads · màn "Welcome back" · màn mở app trong app · Theme Store · Chat AI | Icon phải vẽ lại mỗi lần, không đem lại gì | Không ảnh hưởng event nào. Giữ lại: chữ, dòng ghi chú ads, thanh tiến trình, ô native ads |
Xoá khỏi bộ event
7 event bị xoá vì trùng thời điểm với event ngay trước nó. "Màn A xong" và "màn B hiện" là cùng một giây, cùng một đoạn code, không có chỗ nào người dùng bỏ được ở giữa — hai dòng số luôn bằng nhau, đọc chậm mà không thêm thông tin nào.
| Event bị xoá (tên cũ) | Trùng với |
|---|---|
gdpr_start — bắt đầu hỏi consent | app_open |
splash_done — Splash xong | on03_splash_end |
intro_p1 — thấy trang 1 của Intro | on03_splash_end |
intro_done — Intro xong | on05_intro_end |
lang_show — thấy màn Language | on05_intro_end |
wall_show — thấy màn ChooseWallpaper | on06_lang_done |
hello_show — thấy màn Hello | on07_wall_done |
Toàn bộ tên event bộ cũ đã xoá hẳn khỏi app — ob01…ob17
(lần mở đầu tiên) và rt01…rt05 (các lần mở sau). Không có bản
chạy song song hai bộ tên: từ ngày phát hành, tên cũ tụt về 0.
Nếu đang test bản giữa mà thấy không ra ads ở chỗ này thì không phải bug mới, kiểm tra lại là bản nào trước khi báo.
4 Event funnel hiện tại còn gì
Trang chính để đọc funnel vẫn là Flow mở app → Home. Mục này chỉ chốt lại: sau khi cắt, còn đúng những event nào và tên cũ tương ứng là gì.
Lần cài xong mở đầu tiên — 9 step
| Step | Event | Nghĩa | Param kèm theo |
|---|---|---|---|
| 01 | on01_app_open | Mở app, vào màn Splash | — |
| 02 | on02_gdpr_done | Form consent của Google trả kết quả (ngoài vùng GDPR thì qua luôn) | ms · can_ads · error_code |
| 03 | on03_splash_end | Rời màn Splash. Cũng là mốc đóng vị trí full-screen ads của màn này | reason (normal/timeout) · dur_ms |
| 04 | on04_intro_p2 … _p5 | Thấy trang 2 → 5 của Intro, mỗi trang một event. Trang 1 không có event riêng (trùng step 03) | — |
| 05 | on05_intro_end | Rời màn Intro (bấm nút ở trang cuối). Cũng là mốc đóng vị trí native ads đáy Intro | — |
| 06 | on06_lang_done | Bấm Continue rời màn Language | lang |
| 07 | on07_wall_done | Rời màn ChooseWallpaper | action (chọn hình nền / bỏ qua) |
| 08 | on08_hello_ready | Nút "Let's Start" ở màn Hello hiện ra | ms |
| 09 | on09_home | Đích — vào màn hình chính | dur_ms · ad_clicks · had_ad |
Một event phụ ở màn Language: on06_lang_select (kèm lang) bắn
mọi lần người dùng đổi ý chọn ngôn ngữ khác — cố ý không chống trùng, để đếm số lần
đổi ý. Không phải step funnel, đừng kéo vào báo cáo.
Các lần mở app sau — 4 step
| Step | Event | Nghĩa |
|---|---|---|
| 01 | rn01_app_open | Mở app |
| 02 | rn02_gdpr_done | Consent trả kết quả — lượt mở nào cũng chạy |
| 03 | rn03_splash_end | Rời màn Splash + mốc đóng vị trí full-screen ads |
| 04 | rn04_home | Đích — vào màn hình chính |
Còn đúng 2 vị trí ads có event riêng
Mỗi vị trí có 4 event con cùng tiền tố với step của nó — on03_splash…
(hoặc rn03_splash…) và on05_intro…:
| Hậu tố | Nghĩa |
|---|---|
_ad_show | Ads hiện ra trước mắt người dùng |
_ad_not_show | Ads không hiện, kèm reason cho biết vì sao |
_ad_click | Bấm vào ads (rời app) |
_ad_back | Quay lại app sau khi bấm ads, kèm away_ms. Dưới 700 ms không tính (khoá màn / hộp thoại quyền chớp nhoáng) |
Các giá trị của reason khi ads không hiện: rc_off (cấu hình từ xa
tắt) · premium (đã mua gói) · not_init (bộ ads chưa khởi tạo kịp)
· no_consent (consent không cho) · no_fill (không có ads để trả)
· timeout (hết giờ chờ) · loaded_no_show (có ads nhưng không show
được) · capped (chặn vì quá gần lần trước) · no_ad.
_ad_show + _ad_not_show = _end — luôn
đúng, dùng để kiểm số có sai lệch không.
2. Show rate của vị trí ads =
_ad_show ÷ _end.
3. Step trong báo cáo funnel phải kéo
_end, không kéo
_ad_show. Kéo _ad_show thì mọi lượt không có ads (đã mua gói,
tắt cấu hình, không có ads để trả…) bị tính là bỏ giữa đường và mất luôn ở mọi step sau.
rn01_app_open:
- Vừa đặt iOS Launcher làm launcher mặc định xong, quay lại app
- Bấm phím Home khi app đã là launcher mặc định (hệ điều hành đã thu hồi bộ nhớ)
- Vừa đóng một app trong app (Clock, Gallery, Chat AI…)
Dò tên cũ ↔ tên mới
| Step | Tên mới (v1.0.15) | Tên cũ (v1.0.14) |
|---|---|---|
| 01 | on01_app_open | ob01_app_open |
| 02 | on02_gdpr_done | ob02_gdpr_done |
| 03 | on03_splash_end | ob04_aoa_splash_end + ob05_splash_done (gộp 2 thành 1) |
| — | on03_splash_ad_show / _ad_click / _ad_back / _ad_not_show | ob04_aoa_splash_* |
| 04 | on04_intro_p2 … _p5 | ob06_intro_p2..p5 |
| 05 | on05_intro_end | ob07_nt_intro_end + ob08_intro_done (gộp) |
| — | on05_intro_ad_show / _ad_click / _ad_back / _ad_not_show | ob07_nt_intro_* |
| 06 | on06_lang_done | ob14_lang_done |
| — | on06_lang_select | ob11_lang_select |
| 07 | on07_wall_done | ob15_wall_done |
| 08 | on08_hello_ready | ob16_hello_ready |
| 09 | on09_home | ob17_home |
| 01 | rn01_app_open | rt01_app_open |
| 02 | rn02_gdpr_done | rt02_gdpr_done |
| 03 | rn03_splash_end | rt04_aoa_splash_end |
| 04 | rn04_home | rt05_home |
Vị trí native ads ở màn Language vẫn chạy nhưng không có step funnel nào. Nó sống
suốt màn nên không có mốc "rời vị trí" để đo. Đếm impression của nó bằng event
ad_displayed với param placement = native_language_1
— xem trang Events.
on01…on09
và rn01…rn04). Báo cáo cũ giữ nguyên để tra dữ liệu từ v1.0.14
trở về trước.
Dashboard hoặc cảnh báo nào đang treo vào tên cũ sẽ tụt về 0 ngay sau ngày phát hành — đó là đổi tên có chủ ý, không phải mất tracking.
Mốc so được giữa hai bộ chỉ có một: tỉ lệ vào màn hình chính.
ob17_home ÷ ob01_app_open = 64,0% ↔ on09_home ÷ on01_app_open,
mục tiêu 72–78%. Đo theo Users, không theo số lần bắn event.
5 Card set_default + carousel promo
Một dialog duy nhất, chạy ở 2 mode. Mode nào chạy khi nào,
chặn bởi gì, bấm vào thì đi đâu.
dialog— hộp nổi lên giữa màn hình chính. Chỉ có một dialog, chạy ở một trong hai mode dưới.mode FULL— carousel đầy đủ, vuốt ngang qua nhiềucard.mode SET_DEFAULT_ONLY— chỉ hiện đúngcard set_default, không vuốt được. Đó là card mời người dùng đặt iOS Launcher làm launcher mặc định.
full / set_default_only là giá trị thật của param
mode trên event — mở Firebase thấy đúng hai chữ này.
| Mode | Hình dạng | Khi nào chạy |
|---|---|---|
mode FULLcarousel đầy đủ |
Dialog vuốt ngang qua nhiều card, thấy hé card hai bên, có dấu chấm chỉ trang | Đúng "lượt của nó" — mặc định lượt thứ 1, 6, 11, 16… và còn suất trong ngày |
mode SET_DEFAULT_ONLYmột card set_default |
Đúng 1 card, không vuốt được | Mọi lượt còn lại, và cả lượt của carousel bị chặn — miễn là app chưa là launcher mặc định. Không có limit |
"Lượt" tính thế nào
Một lượt = một lần quay lại màn hình chính. Không còn điều kiện
"ở nền quá 10 phút" như thiết kế ban đầu — bỏ đi vì carousel đã bị chặn ở phía sau bằng
maxShowsPerDay + minMinutesBetweenShows rồi, và lượt chạy nhanh
chính là cái làm card set_default xuất hiện đều đặn.
| Hành động | Cộng lượt? | Đếm bằng đường nào |
|---|---|---|
| Quay lại app từ một app khác | ✅ Có | Tiến trình vừa từ nền trở lại → tín hiệu ON_START của hệ thống |
| Quay lại sau hộp thoại hệ thống (chọn launcher mặc định, xin quyền) | ✅ Có | Cũng là ON_START — hộp thoại hệ thống cũng đẩy app xuống nền |
| Đóng bất kỳ app trong app về Home — Cài đặt · Theme Store · Control center · Chat AI · Clock · Gallery · Weather · Calculator | ✅ Có | Cả 8 app này mở dưới dạng task riêng cùng tiến trình, nên hệ thống không báo "về nền". Phải đếm bằng đường riêng lúc Home sống lại |
Thứ không cộng lượt: những thao tác chưa từng rời màn hình chính — kéo mở control center / notification center, vuốt sang App Library, vào Spotlight, giữ icon để sắp xếp.
Số lượt cộng dồn từ lúc cài, không bao giờ reset. mode FULL rơi vào lượt
1, rồi cứ mỗi 5 lượt một lần → 1, 6, 11, 16… Con số 5 đổi được từ xa.
Quyết định — 4 nhánh, xét theo đúng thứ tự này
enabled = false hoặc chưa có lượt nào → không hiện gì.mode FULL.Giờ nhánh 3 hỏng thì rơi xuống nhánh 4 → vẫn hiện card set_default. Đó là cách card set_default hành xử giống hệt dialog cũ.
Limit — chỉ mode FULL mới có
mode FULL | mode SET_DEFAULT_ONLY | |
|---|---|---|
| Max mỗi ngày | 3 lần | Không limit |
| Cách nhau tối thiểu | 5 phút | Không có sàn |
| Trong một lần chạy app | Tối đa 1 lần | Mỗi lần về màn hình chính đều hiện lại |
| Bộ đếm | Có — tự reset sang ngày mới | Không có bộ đếm nào |
setDefaultNudgeMaxPerDay /
setDefaultNudgeMinMinutes). Hai param đó đã xoá khỏi cấu hình: card set_default giờ
chỉ là nhánh mặc định cho ai chưa đặt launcher mặc định, nên không cần suất riêng. Blob
JSON cũ còn mang hai khoá đó vẫn parse được, app bỏ qua chúng.
Ngày reset tính theo mốc 24 giờ kể từ lúc cài, không phải theo nửa đêm.
Khi nào KHÔNG hiện
Áp cho cả hai chế độ. Xét trước khi trừ suất, nên lượt bị chặn không tiêu mất suất của ngày.
- Đang không ở màn hình chính (Cài đặt, Theme Store, một app trong app…)
- Đang mở control center hoặc notification center
- Hỏi quyền thông báo chưa xong — hộp thoại hệ thống phải đóng trước
- Đang ở chế độ rung icon để sắp xếp, đang mở menu giữ-icon, hoặc đang mở picker
- Đang có full-screen ads hiện hoặc đang tải — không bao giờ đè dialog lên ads
- Dialog đang mở sẵn (chặn đánh giá lại lần hai)
- Không còn trang nào đủ điều kiện — đã là mặc định + đã mua gói thì carousel rỗng
Sau khi ads mở-app lúc quay lại app chạy xong, cờ "lần chạy này đã hiện carousel" được mở lại — carousel có thể hiện thêm một lần nữa nếu vẫn còn suất ngày và đủ giãn cách.
6 trang trong carousel
| Trang | Hiện với ai | Bấm vào thì đi đâu |
|---|---|---|
| Đặt làm mặc định | Chỉ khi app chưa là launcher mặc định | Bung hộp thoại của hệ điều hành để chọn Home app (máy cũ thì mở Cài đặt → Ứng dụng mặc định) |
| Theme | Tất cả | Mở kho theme / hình nền |
| Cài đặt | Tất cả | Mở Cài đặt |
| Control center | Tất cả | Mở màn thiết lập control center (không phải màn tuỳ biến giao diện — hiện chưa có đường vào thẳng màn đó) |
| Chat AI | Tất cả | Mở Chat AI |
| Mua gói | Chỉ khi chưa mua gói | Mở màn mua gói |
Thứ tự trang vừa xoay vòng vừa ưu tiên theo mức dùng: trang của app người dùng ít mở được đẩy lên trước. Xếp theo 4 nhóm mức dùng — 0 lần · 1–3 · 4–10 · trên 10 — trong cùng nhóm thì giữ nguyên thứ tự xoay vòng. Thứ tự được nhớ lại giữa các lần mở app, kể cả trang đang không đủ điều kiện hiện vẫn giữ chỗ trong hàng. Ưu tiên theo mức dùng luôn bật, không còn công tắc tắt nó nữa.
Bấm vào một trang thì gì xảy ra
Đóng bằng cách khác: bấm ra ngoài card hoặc bấm nút back → đóng và ghi nhận là bỏ qua, không xoay thứ tự. Vuốt qua trang khác hoặc bấm dấu chấm → chỉ đổi trang.
mode FULL
mới trừ. Xem rồi bỏ qua vẫn tiêu 1 trong 3 suất của ngày; trừ sau khi chọn thì người bỏ qua sẽ
bị hiện lại liên tục. Card set_default không trừ gì cả.
2. Chọn một trang thì lần sau trang đó tụt hạng gấp đôi. Vừa bị đẩy xuống cuối hàng, vừa bị tính là "app này đã mở rồi" nên mất ưu tiên của nhóm ít-mở. Đúng ý định: đừng nhắc lại thứ người dùng vừa xem.
Event mới
| Event | Bắn khi nào | Param |
|---|---|---|
promo_carousel_shown | Dialog hiện ra | mode (full / set_default_only) · turn (lượt thứ mấy) |
promo_carousel_page_picked | Bấm CTA trên card đang ở giữa | promo_page · turn · position (card đó đứng thứ mấy trong hàng, tính từ 0) |
promo_carousel_dismissed | Bấm ra ngoài card hoặc bấm back | mode · turn |
Param source mới trên mini_app_open
Không phải event mới — mini_app_open đã chạy từ trước. Đợt này nó
được gắn thêm param source: mở mini app đó từ chỗ nào.
mini_app_open{app} một mình chỉ trả lời "mini app nào được mở nhiều
nhất". Thêm source trả lời "và mở từ đâu" — đó mới là số quyết định một
surface (carousel promo · DailyOpen · App Library) có đáng giữ hay không.
Đọc phần đóng góp của carousel: lọc
source = promo_carousel.
Giá trị source | Mở mini app từ đâu |
|---|---|
promo_carousel | CTA trên card của dialog promo — số cần theo dõi của đợt này |
home | Icon trên một trang màn hình chính |
dock | Icon dưới dock |
folder | Icon bên trong một thư mục đang mở |
daily_open | Trang DailyOpen — widget shortcut + hàng app vừa dùng |
app_library | App Library, cả danh sách nhóm lẫn kết quả tìm |
spotlight | Ô tìm Spotlight |
settings | Cài đặt — danh sách Functions, các dòng mini app, deep-link |
control_center | Tile hoặc shortcut trong control center |
widget | Chạm widget trên màn hình chính (weather / clock / photos) |
theme_store | CTA trong Theme Store (vd sheet Add-Widget → "Get widgets") |
inhouse_app | Một mini app mở mini app khác |
notification | Notification báo thức / icon alarm trên status bar → Clock. Không phải surface của launcher |
unknown | Thiếu thông tin nguồn — hệ điều hành dựng lại task, hoặc một chỗ gọi quên gắn. Số này lên cao là bug, không phải hành vi người dùng |
source là Custom definition (Dimension) — chưa khai thì không lọc
được, và không hồi tố: chỉ có dữ liệu từ lúc khai trở đi.
2. Đừng đổi tên giá trị sau khi phát hành. Đổi
promo_carousel thành
tên khác là cắt đôi dữ liệu lịch sử của surface đó trên GA4.
Mở lại mini app khi task của nó còn sống (về Home rồi chạm icon lần nữa) cũng tính một
mini_app_open, và source đọc theo lần chạm mới — mở lại từ
chỗ khác thì ra giá trị khác.
default_launcher_prompt) và carousel không chạy cùng lúc — chỉ
một trong hai sống, quyết bởi công tắc ở mục 6. Bật carousel thì
default_launcher_prompt ngừng bắn hoàn toàn.
Báo cáo nào đang đo tỉ lệ đặt launcher mặc định phải chuyển sang:
promo_carousel_shown với mode = set_default_only →
promo_carousel_page_picked với promo_page = SET_DEFAULT.
Chuyển trước khi bật, không thì đọc ra như funnel chết.
🧪 Demo thử tại chỗ
Mô phỏng đúng 4 nhánh quyết định ở trên — cùng cách đếm lượt, cùng limit, cùng cách xếp thứ tự trang. Đổi cấu hình rồi bấm các nút hành động để xem chế độ nào chạy, hoặc vì sao không hiện gì.
Cấu hình từ xa
Trạng thái người dùng
Hành động
Bộ đếm hiện tại
Thứ tự trang đang nhớ
Màn hình chính
Event bắn ra
- Lượt 1 ra card set_default, không ra carousel. Reset, bấm Quay lại app từ app khác
1 lần → hiện card set_default dù lượt 1 đúng nhịp carousel. Giờ tick Đã là launcher mặc
định rồi Reset + bấm lại → lần này ra
mode FULL. - Card set_default không có limit. Giữ cấu hình mặc định, bấm Đóng app trong app về Home nhiều lần liên tiếp → trừ lượt trúng nhịp carousel, lần nào cũng ra card set_default, không bao giờ im. Đó là điều kiện để tỉ lệ đặt launcher mặc định không tụt.
- Lượt carousel bị chặn thì RƠI XUỐNG card set_default. Reset, đặt
maxShowsPerDay=1, tick Đã là launcher mặc định, bấm Quay lại app từ app khác → carousel hiện, tiêu hết suất ngày. Bỏ tick mặc định rồi bấm tiếp tới lượt 6 → hết suất nên không ra carousel, nhưng vẫn ra card set_default chứ không im hẳn. - Chọn 1 trang thì lần sau trang đó tụt hạng gấp đôi. Ở lượt carousel, vuốt tới
trang Theme rồi bấm nút xanh. Xem hàng chip bên trái: Theme xuống cuối
hàng và số
#của nó tụt xuống hạng chót vì đã tính là "app này đã mở rồi".
6 Cấu hình từ xa mới
Đúng 1 khoá mới trong cả bản này. Các công tắc còn lại không đổi — xem trang Remote Config.
Khoá: promo_carousel_config. Kiểu JSON chứ không phải một dãy công tắc
rời, vì bên trong có một danh sách thứ tự trang — dạng công tắc số/bật-tắt không diễn
tả được danh sách. Không set gì thì app dùng toàn bộ giá trị mặc định ở bảng dưới.
| Param | Mặc định | Nghĩa | Chỉnh khi nào |
|---|---|---|---|
enabled | true |
Bật carousel promo | Đặt false = quay về dialog đặt launcher mặc định cũ. Đây là
đường lùi không cần phát hành bản mới |
recurrenceEveryTurns | 5 |
Sau lượt 1, cứ mỗi bao nhiêu lượt lại hiện mode FULL → mặc định ra lượt
1, 6, 11, 16… |
Nâng lên để giãn tần suất |
maxShowsPerDay | 3 |
Max số lần hiện mode FULL trong một ngày. 0 = không limit |
Hạ xuống nếu người dùng phản hồi thấy dialog nhiều |
minMinutesBetweenShows | 5 |
Số phút tối thiểu giữa hai lần mode FULL. 0 = không sàn |
Nâng lên để giãn thêm trong ngày |
pageOrder | 6 tên trang | Vừa là thứ tự mặc định vừa là danh sách cho phép — trang không có tên trong đây thì không bao giờ hiện | Bỏ một trang khỏi vòng xoay = xoá tên nó khỏi danh sách này |
resumeDebounceMinutes · firstShowTurn ·
setDefaultNudgeMaxPerDay · setDefaultNudgeMinMinutes ·
perAppWeightEnabled.
Lượt giờ đếm mọi lần quay lại Home (không debounce) · lượt đầu tiên cố định là 1 ·
card set_default không còn suất riêng · ưu tiên app ít mở luôn bật. Blob JSON cũ
còn mang các khoá này vẫn parse được — app bỏ qua chúng, không cần dọn gấp.
Giá trị mẫu — dán được thẳng vào Firebase
{
"enabled": true,
"recurrenceEveryTurns": 5,
"maxShowsPerDay": 3,
"minMinutesBetweenShows": 5,
"pageOrder": ["SET_DEFAULT", "THEME", "SETTINGS", "CONTROL_CENTER", "CHAT_AI", "SUB"]
}
Ba kịch bản chỉnh nhanh
enabled → false. App quay về dialog đặt launcher mặc định cũ. Nhớ chuyển báo cáo về event cũ, xem cảnh báo ở mục 5.recurrenceEveryTurns 5 → 8 (giãn theo lượt) hoặc maxShowsPerDay 3 → 1 (giãn theo ngày). Đừng đổi cả hai một lúc, không tách được nguyên nhân. Giảm carousel không làm card set_default thưa đi — nó không có limit.pageOrder. Ví dụ tạm bỏ trang mua gói: để lại 5 tên, không có "SUB". Các trang còn lại tự dồn lên.7 Thay đổi ads khác trong cùng đợt
Không thuộc flow mở app, nhưng nằm cùng khoảng thời gian này — ghi ở đây để không ai tưởng chúng rơi khỏi tài liệu.
- Bỏ hẳn 3 vị trí native ads có show rate dưới 35%: trong tab Alarm của Clock (29%) · trong album ảnh của Gallery (32%) · trong thùng rác ảnh của Gallery (30%). Cả ba đều nằm dưới màn hình đầu ở những màn người dùng rời rất nhanh — số request bỏ ra không thu lại được impression tương ứng. Ba tab còn lại của Clock giữ nguyên. Không thêm lại nếu chưa đổi được vị trí đặt slot.
- Native ads ở 2 trang màn hình chính: giờ chỉ bắt đầu load khi trang đã dừng hẳn (trước đây trang bên cạnh được dựng sẵn nên load cả ads của trang người dùng chưa xem). Đồng thời giữ lại ads chưa ai xem thay vì huỷ đi rồi load lại.
- Trả lại inter ads khi đóng màn mua gói từ Cài đặt / Theme Store — xem mục 3.