@hungvv/super-ads-skills 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +71 -13
  2. package/dist/cli.js +8 -2
  3. package/package.json +1 -1
  4. package/skills/README.md +4 -0
  5. package/skills/adspro-to-superads/SKILL.md +157 -732
  6. package/skills/adspro-to-superads/references/global-invariant-check.md +49 -0
  7. package/skills/adspro-to-superads/references/migration-contract.md +57 -0
  8. package/skills/adspro-to-superads/references/phase-0-inventory.md +39 -0
  9. package/skills/adspro-to-superads/references/phase-1-2-gradle-manifest.md +85 -0
  10. package/skills/adspro-to-superads/references/phase-3-config-migration.md +159 -0
  11. package/skills/adspro-to-superads/references/phase-4-wrapper-observability.md +70 -0
  12. package/skills/adspro-to-superads/references/phase-5-7-callsites-layout-cleanup.md +73 -0
  13. package/skills/adspro-to-superads/references/principles-and-authority.md +73 -0
  14. package/skills/adspro-to-superads/references/user-questions.md +53 -0
  15. package/skills/adspro-to-superads/snippets/ads-api-quick.md +20 -0
  16. package/skills/adspro-to-superads/templates/migration-inventory.md +42 -0
  17. package/skills/super-ads-ab-test/SKILL.md +91 -23
  18. package/skills/super-ads-adb-test/SKILL.md +85 -36
  19. package/skills/super-ads-adb-test/{references → examples}/scenarios-sample.md +5 -5
  20. package/skills/super-ads-add-placement/SKILL.md +145 -50
  21. package/skills/super-ads-add-placement/references/call-site-api.md +33 -0
  22. package/skills/super-ads-add-placement/snippets/app-open.md +25 -0
  23. package/skills/super-ads-add-placement/snippets/fullscreen-nav.md +14 -0
  24. package/skills/super-ads-add-placement/snippets/inline-banner-native.md +19 -0
  25. package/skills/super-ads-add-placement/snippets/preload-event.md +13 -0
  26. package/skills/super-ads-add-placement/snippets/reward.md +17 -0
  27. package/skills/super-ads-config/SKILL.md +94 -36
  28. package/skills/super-ads-debug/SKILL.md +87 -37
  29. package/skills/super-ads-debug/references/logging-setup.md +2 -0
  30. package/skills/super-ads-debug/scripts/filter-logads.sh +21 -0
  31. package/skills/super-ads-debug-override/SKILL.md +154 -81
  32. package/skills/super-ads-debug-override/snippets/arm-override.md +9 -0
  33. package/skills/super-ads-debug-override/snippets/check-module.md +8 -0
  34. package/skills/super-ads-debug-override/snippets/clear-override.md +9 -0
  35. package/skills/super-ads-debug-override/snippets/confirm-active.md +16 -0
  36. package/skills/super-ads-guide/SKILL.md +129 -0
  37. package/skills/super-ads-guide/references/compatibility.md +26 -0
  38. package/skills/super-ads-guide/references/sdk-version-check.md +50 -0
  39. package/skills/super-ads-integrate/SKILL.md +145 -47
  40. package/skills/super-ads-integrate/references/application-setup.md +2 -21
  41. package/skills/super-ads-integrate/references/gradle-setup.md +1 -13
  42. package/skills/super-ads-integrate/snippets/consent-request.md +12 -0
  43. package/skills/super-ads-integrate/templates/application-oncreate.md +17 -0
  44. package/skills/super-ads-integrate/templates/gradle-dependencies.md +17 -0
  45. package/skills/super-ads-release-check/SKILL.md +85 -32
  46. package/skills/super-ads-show-rate/SKILL.md +87 -36
  47. package/skills/super-ads-show-rate/references/collect-snippet.md +2 -36
  48. package/skills/super-ads-show-rate/scripts/show-rate.sh +25 -0
  49. package/skills/super-ads-show-rate/snippets/show-events-logger.md +26 -0
  50. package/skills/super-ads-upgrade/SKILL.md +137 -0
  51. package/skills/super-ads-upgrade/references/upgrade-hops.md +26 -0
  52. package/skills/super-ads-upgrade/templates/changelog-template.md +39 -0
  53. package/skills/super-ads-add-placement/references/call-site-snippets.md +0 -90
  54. /package/skills/super-ads-ab-test/{references → templates}/firebase-handoff-template.md +0 -0
  55. /package/skills/super-ads-config/{references → examples}/patch-examples.md +0 -0
@@ -0,0 +1,129 @@
1
+ ---
2
+ schema: 1
3
+ name: super-ads-guide
4
+ description: Use when working on anything involving the SuperAds SDK, its ads config JSON or the super-ads MCP
5
+ version: 1.0.0
6
+ group: Ads
7
+ superAds: ">=4.0.0 <5.0.0"
8
+ ---
9
+
10
+ # SuperAds Guide (điểm vào)
11
+
12
+ Skill điểm vào cho mọi việc liên quan SuperAds: chọn **đúng một skill chủ** cho task, đọc skill đó **trước** khi đụng file, và kiểm version SDK của app trước khi làm theo skill nào khác.
13
+
14
+ ## When to use
15
+ - Bắt đầu bất kỳ task nào có SuperAds, `Ads.*`, file config JSON quảng cáo hoặc MCP `super-ads`.
16
+ - Chưa rõ task thuộc skill nào trong bộ `super-ads-*`.
17
+ - Cần kiểm app đang dùng SuperAds bản nào so với bản mà skill viết cho (`superAds` trong frontmatter).
18
+ - Skill báo app dùng bản SDK thấp hơn khoảng hỗ trợ và cần quyết định có nâng cấp không.
19
+
20
+ ## 🚫 When NOT to use
21
+ - Đã biết rõ skill chủ và đã kiểm version trong phiên này: đọc thẳng skill đó.
22
+ - Code app không liên quan quảng cáo: dùng skill chung của repo app, không phải bộ này.
23
+
24
+ ## 📋 Prerequisites
25
+ > **Not applicable for this skill.**
26
+
27
+ ## ⚡ Quick Reference
28
+
29
+ | Task | Skill chủ |
30
+ |---|---|
31
+ | App chưa có SDK quảng cáo, gắn SuperAds từ đầu | [super-ads-integrate](../super-ads-integrate/SKILL.md) |
32
+ | App đang dùng AdsPro, chuyển sang SuperAds | [adspro-to-superads](../adspro-to-superads/SKILL.md) |
33
+ | App đã có SuperAds, thêm hoặc đổi vị trí ad | [super-ads-add-placement](../super-ads-add-placement/SKILL.md) |
34
+ | Đổi giá trị, bật tắt, xoá key trong config qua MCP | [super-ads-config](../super-ads-config/SKILL.md) |
35
+ | A/B test config qua Firebase | [super-ads-ab-test](../super-ads-ab-test/SKILL.md) |
36
+ | Ad không hiện, load lỗi, hiển thị sai, crash | [super-ads-debug](../super-ads-debug/SKILL.md) |
37
+ | Đo hoặc giải thích show rate theo placement | [super-ads-show-rate](../super-ads-show-rate/SKILL.md) |
38
+ | Chạy kịch bản kiểm trên thiết bị, không sửa app | [super-ads-adb-test](../super-ads-adb-test/SKILL.md) |
39
+ | Bản debug chạy một lần với config khác asset | [super-ads-debug-override](../super-ads-debug-override/SKILL.md) |
40
+ | Rà trước khi phát hành | [super-ads-release-check](../super-ads-release-check/SKILL.md) |
41
+ | App dùng SuperAds cũ hơn skill cần, hoặc user muốn nâng SuperAds | [super-ads-upgrade](../super-ads-upgrade/SKILL.md) |
42
+
43
+ Một task có đúng một skill chủ. Skill khác chỉ hỗ trợ (vd thêm placement dùng lại vòng của `super-ads-config`), không giành quyền quyết định phạm vi.
44
+
45
+ Tài liệu nằm ở đâu:
46
+ - MCP `super-ads` (19 tool) và quy trình config: `tools/ai_agent_tools/README.md`, `tools/ai_agent_tools/AI_ADS_PLAYBOOK.md`.
47
+ - Thay đổi giữa các bản SDK: `MIGRATION.md` ở gốc repo SDK (mục mới nhất ở đầu file).
48
+ - Danh mục skill: `tools/super-ads-skills/skills/README.md`.
49
+ - Quy trình kiểm version: [references/sdk-version-check.md](references/sdk-version-check.md). Bảng tương thích: [references/compatibility.md](references/compatibility.md).
50
+
51
+ ## 🏗️ Recommended Architecture
52
+ > **Not applicable for this skill.**
53
+
54
+ ## Workflow
55
+ 1. **Chọn skill chủ** theo bảng ở Quick Reference. Không khớp một hàng nào hoặc khớp hai: hỏi user, nêu 2-3 lựa chọn kèm đề xuất.
56
+ 2. **Kiểm version SDK của app** (đầy đủ ở [references/sdk-version-check.md](references/sdk-version-check.md)): đọc version `SuperAds` khai trong Gradle của app, so với `superAds` trong frontmatter skill chủ.
57
+ 3. **Version trong khoảng**: đọc skill chủ và làm theo.
58
+ 4. **Version thấp hơn khoảng**: không làm tiếp một cách im lặng. Báo user, **đề xuất** `super-ads-upgrade` để nâng core và mọi plugin cùng một bản mới nhất, rồi cập nhật logic, key JSON, config, kèm changelog. Chỉ nâng khi user đồng ý. User từ chối thì nói rõ phần nào của skill có thể không đúng với bản của họ, rồi hỏi có tiếp tục không.
59
+ 5. **Version cao hơn khoảng**: báo rằng skill có thể đã cũ, dựa vào `MIGRATION.md` và code SDK, không dựa vào skill khi hai bên lệch.
60
+ 6. **Sửa config thì qua MCP `super-ads` trước**, theo `super-ads-config`. Không sửa JSON tay khi MCP làm được.
61
+ 7. Kết thúc, báo đúng những gì đã chạy (xem Output).
62
+
63
+ ## 🔧 API Reference
64
+ > **Not applicable for this skill.**
65
+
66
+ ## ✅ Best Practices
67
+ - Đọc skill chủ trước khi viết code hay sửa config, không đọc sau.
68
+ - Dùng MCP `super-ads` cho mọi thay đổi config; chỉ rơi về sửa file khi MCP không phủ.
69
+ - Gặp điểm dừng `mustAsk` của `impact_of_patch`: dừng, hỏi nguyên văn từng câu trong `askReasons`, chờ trả lời rõ (xem `super-ads-config`).
70
+ - Không chắc thì hỏi: nêu 2-3 lựa chọn và một đề xuất.
71
+ - Báo đúng việc đã chạy: lệnh nào, output nào. Bước bỏ qua ghi là bỏ qua.
72
+
73
+ ## ❌ Anti-patterns
74
+ - Đoán tên key, format, network, layout hay API `Ads.*` không có trong schema MCP, `MIGRATION.md` hoặc code SDK.
75
+ - Áp patch chỉ vì `mustAsk = false`: vẫn cần user duyệt đúng patch đó.
76
+ - Tự nâng version SuperAds khi user chưa đồng ý, hoặc nâng riêng core mà không nâng plugin.
77
+ - Làm theo skill viết cho bản mới trên app dùng bản cũ mà không báo user.
78
+ - Khẳng định build, test hay kiểm thiết bị đã qua khi chưa chạy.
79
+
80
+ ## ⚠️ Common Issues
81
+
82
+ | Problem | Cause | Solution |
83
+ |---|---|---|
84
+ | Không tìm thấy dòng version SuperAds | Version nằm ở biến, `libs.versions.toml` hoặc module khác | Làm theo [references/sdk-version-check.md](references/sdk-version-check.md); vẫn không thấy thì hỏi user |
85
+ | Core và plugin lệch version | Nâng một phần | `NoClassDefFoundError` / `NoSuchMethodError` lúc chạy (`MIGRATION.md:7-16`); nâng cùng bản qua `super-ads-upgrade` |
86
+ | Hai skill cùng khớp task | Task gồm nhiều phần | Chọn skill chủ cho phần quyết định phạm vi, hỏi user nếu vẫn mơ hồ |
87
+
88
+ ## Files created
89
+ This skill does not create source files.
90
+
91
+ ## Files modified
92
+ This skill does not modify source files.
93
+
94
+ ## Verification
95
+ - Đã nêu tên skill chủ và lý do chọn.
96
+ - Đã ghi version SuperAds đọc được của app (kèm file, dòng) và so với khoảng `superAds` của skill chủ.
97
+ - Nếu version thấp hơn: đã báo user và hỏi ý kiến về `super-ads-upgrade`, chưa tự nâng.
98
+
99
+ ## Checklist
100
+ - [ ] Chọn đúng một skill chủ, đã mở `SKILL.md` của nó.
101
+ - [ ] Đã đọc version SuperAds của app và so với khoảng `superAds`.
102
+ - [ ] Version thấp hơn thì đã đề xuất `super-ads-upgrade`, chờ user.
103
+ - [ ] Config đi qua MCP `super-ads`, có duyệt đúng patch.
104
+ - [ ] Không đoán key, API hay coordinate; chỗ không chắc đã hỏi.
105
+ - [ ] Báo cáo ghi đúng điều đã chạy.
106
+
107
+ ## 📈 Performance Notes
108
+ > **Not applicable for this skill.**
109
+
110
+ ## 🔒 Security Notes
111
+ > **Not applicable for this skill.**
112
+
113
+ ## 🔄 Migration Guide
114
+ > **Not applicable for this skill.**
115
+
116
+ ## Output
117
+ Báo user: skill chủ đã chọn; version SuperAds của app và kết quả so với khoảng skill hỗ trợ; quyết định về nâng cấp (nếu có); các việc đã chạy và việc đã bỏ qua.
118
+
119
+ ## Examples
120
+ - Bảng tương thích skill và bản SuperAds: [references/compatibility.md](references/compatibility.md).
121
+ - Quy trình đọc và so version, kèm ca lệch: [references/sdk-version-check.md](references/sdk-version-check.md).
122
+
123
+ ## 📚 References
124
+ - [super-ads-upgrade](../super-ads-upgrade/SKILL.md): nâng SuperAds khi version thấp hơn.
125
+ - [super-ads-config](../super-ads-config/SKILL.md): vòng sửa config và các điểm dừng `mustAsk`.
126
+ - `MIGRATION.md`, `tools/ai_agent_tools/AI_ADS_PLAYBOOK.md`, `tools/ai_agent_tools/README.md` ở repo SDK.
127
+
128
+ ## 🏷️ Tags
129
+ `super-ads`, `router`, `entry-point`, `sdk-version`, `routing`, `mcp`
@@ -0,0 +1,26 @@
1
+ # Bảng tương thích skill và SuperAds
2
+
3
+ Mọi skill trong bộ `super-ads-*` khai `superAds: ">=4.0.0 <5.0.0"` trong frontmatter, nghĩa là viết và kiểm cho SuperAds 4.x (bản hiện tại của repo SDK: `4.0.0`, `super-ads/build.gradle:6`).
4
+
5
+ | Skill | superAds | Version skill |
6
+ |---|---|---|
7
+ | super-ads-guide | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
8
+ | super-ads-upgrade | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
9
+ | super-ads-integrate | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
10
+ | adspro-to-superads | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
11
+ | super-ads-add-placement | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
12
+ | super-ads-config | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
13
+ | super-ads-ab-test | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
14
+ | super-ads-debug | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
15
+ | super-ads-show-rate | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
16
+ | super-ads-adb-test | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
17
+ | super-ads-debug-override | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
18
+ | super-ads-release-check | `>=4.0.0 <5.0.0` | xem frontmatter `SKILL.md` |
19
+
20
+ Cột "Version skill" không chép số ở đây để khỏi lệch: số thật nằm trong `version:` của frontmatter từng `SKILL.md`.
21
+
22
+ ## Cách dùng
23
+ - Version SuperAds của app nằm trong khoảng: dùng skill bình thường.
24
+ - Thấp hơn khoảng: xem bước 4 của Workflow trong [../SKILL.md](../SKILL.md) và [sdk-version-check.md](sdk-version-check.md).
25
+ - Cao hơn khoảng: skill có thể cũ; xem mục "Version cao hơn" trong [sdk-version-check.md](sdk-version-check.md).
26
+ - Khi bump khoảng `superAds` của một skill (sau khi kiểm skill với bản SDK mới), cập nhật cả bảng này.
@@ -0,0 +1,50 @@
1
+ # Kiểm version SuperAds của app
2
+
3
+ Mục tiêu: biết app đang dùng SuperAds bản nào, so với khoảng `superAds` trong frontmatter của skill sắp dùng, và quyết định dừng hay tiếp tục. Chỉ đọc, không sửa file.
4
+
5
+ ## 1. Đọc version từ Gradle của app
6
+
7
+ Artifact SuperAds có group `com.android.fullhd.ads`. Mẫu khai trong repo (`super-ads-integrate/references/gradle-setup.md`, mục 2 và `MIGRATION.md:9-16`):
8
+
9
+ ```gradle
10
+ def superAds = '4.0.0'
11
+ implementation "com.android.fullhd.ads:SuperAds:$superAds"
12
+ implementation "com.android.fullhd.ads:SuperAdsAdmob:$superAds"
13
+ ```
14
+
15
+ Việc cần làm:
16
+ 1. Tìm trong file Gradle của module app (và file Gradle gốc, các file `apply from`) dòng chứa `com.android.fullhd.ads:SuperAds`. Repo không chỉ định tên file cố định cho app thật, nên tìm bằng grep, không đoán file.
17
+ 2. Dòng dùng biến (như `$superAds`): lần theo biến tới chỗ gán `def superAds = '...'` hoặc tương đương. Version khai thẳng trong chuỗi thì đọc tại chỗ. Repo không mô tả version catalog, nên nếu dependency nằm ở nơi khác (catalog, `buildSrc`, convention plugin), đọc đúng nơi đó hoặc hỏi user.
18
+ 3. Xác nhận bằng Gradle khi build chạy được (lệnh từ `gradle-setup.md`, mục 1b; thay `<app>` bằng tên module app):
19
+
20
+ ```bash
21
+ ./gradlew :<app>:dependencies --configuration releaseRuntimeClasspath | grep "com.android.fullhd.ads:"
22
+ ```
23
+
24
+ 4. Ghi lại: file, dòng, version của `SuperAds` và của từng plugin (`SuperAdsAdmob`, `SuperAdsInHouse`, ...). `SuperAdsContract` có version riêng (`1.0.0-alpha`), không tính vào so sánh.
25
+ 5. Core và mọi plugin phải cùng một version (`MIGRATION.md:7-16`). Lệch nhau là lỗi cần báo ngay, kể cả khi core nằm trong khoảng.
26
+
27
+ Không tìm thấy dòng nào: hỏi user, không giả định bản.
28
+
29
+ ## 2. So với khoảng `superAds` của skill
30
+
31
+ Khoảng nằm trong frontmatter skill (hiện `>=4.0.0 <5.0.0`).
32
+
33
+ | Kết quả | Việc làm |
34
+ |---|---|
35
+ | Trong khoảng | Tiếp tục với skill chủ |
36
+ | Thấp hơn | Mục 3 |
37
+ | Cao hơn | Mục 4 |
38
+ | Core và plugin lệch version | Báo user; đề xuất `super-ads-upgrade` đưa tất cả về cùng một bản |
39
+
40
+ ## 3. Version thấp hơn khoảng
41
+
42
+ Không tiếp tục im lặng.
43
+ 1. Báo user: app đang dùng bản `X`, skill viết cho `>=4.0.0 <5.0.0`.
44
+ 2. **Đề xuất** dùng [super-ads-upgrade](../../super-ads-upgrade/SKILL.md) để nâng lên bản SuperAds mới nhất, core và mọi plugin cùng một bản, sau đó cập nhật logic, key JSON và config, kèm changelog.
45
+ 3. Chờ user đồng ý. Không nâng khi chưa có đồng ý rõ.
46
+ 4. User từ chối: nêu phần nào của skill có thể sai với bản của họ (import, key config, API) rồi hỏi có tiếp tục với rủi ro đó không. Không tự suy luận khác biệt; đối chiếu `MIGRATION.md`.
47
+
48
+ ## 4. Version cao hơn khoảng
49
+
50
+ Skill có thể đã cũ so với SDK. Báo user, rồi dựa vào `MIGRATION.md` (mục mới nhất ở đầu file) và code SDK khi skill và SDK khác nhau. Đừng áp quy tắc của skill lên phần SDK đã đổi.
@@ -1,54 +1,62 @@
1
1
  ---
2
2
  schema: 1
3
3
  name: super-ads-integrate
4
- description: Use when an Android app has no ads SDK yet (or a fresh module) and needs SuperAds wired in — Gradle artifacts, manifest keys, Application init, consent, premium, first config and first placement.
5
- version: 1.0.0
4
+ description: Use when an app has no ads SDK yet and needs SuperAds wired in - Gradle, manifest, init, consent, first config
5
+ version: 1.1.0
6
6
  group: Ads
7
+ superAds: ">=4.0.0 <5.0.0"
7
8
  ---
8
9
 
9
10
  # Gắn SuperAds vào app mới
10
11
 
11
12
  Đưa app từ "chưa có ads" tới "placement đầu tiên chạy được và đã kiểm trên máy". Mỗi bước đụng Gradle, manifest hoặc `Application` đều phải được user duyệt trước.
12
13
 
13
- | Bước | Tài liệu |
14
- |---|---|
15
- | Artifact, version, Next-Gen, manifest | [references/gradle-setup.md](references/gradle-setup.md) |
16
- | `Application`, init, consent, premium | [references/application-setup.md](references/application-setup.md) |
17
- | Bật log | [../super-ads-debug/references/logging-setup.md](../super-ads-debug/references/logging-setup.md) |
18
- | Placement đầu tiên | `super-ads-add-placement` |
19
- | Quy trình MCP config | `tools/ai_agent_tools/AI_ADS_PLAYBOOK.md` |
20
-
21
14
  ## When to use
15
+
22
16
  - App chưa có SDK quảng cáo nào, hoặc module mới cần SuperAds.
23
17
 
24
- ## When NOT to use
18
+ ## 🚫 When NOT to use
19
+
25
20
  - App còn AdsPro → `adspro-to-superads`.
26
- - App đã có SuperAds, chỉ thêm vị trí → `super-ads-add-placement`.
27
- - Nâng SuperAds 3.x lên 4.0.0 (đổi package, sửa import) hoặc 2.x lên 3.0.0 → làm theo `MIGRATION.md` (skill nâng cấp chưa có).
21
+ - App đã có SuperAds, chỉ thêm vị trí → [super-ads-add-placement](../super-ads-add-placement/SKILL.md).
22
+ - Nâng SuperAds 3.x lên 4.0.0 (đổi package, sửa import) hoặc 2.x lên 3.0.0 → [super-ads-upgrade](../super-ads-upgrade/SKILL.md) (theo `MIGRATION.md`).
28
23
  - App đang dùng SDK quảng cáo khác (AppLovin/IronSource trực tiếp, wrapper riêng…): Stop, hỏi user về phạm vi thay thế.
29
24
 
30
- ## Authority order
31
- 1. Code SDK và Gradle của repo SDK.
32
- 2. `MIGRATION.md`.
33
- 3. Tài liệu skill. `app/` trong repo SDK chỉ là **ví dụ**: không chép App ID, key, unit, tên config của nó.
25
+ ## 📋 Prerequisites
34
26
 
35
- ## Contract
36
- **MUST**
37
- - Core và mọi plugin cùng một version (`MIGRATION.md:7-16`).
38
- - Chỉ thêm plugin network mà config thật sự dùng, **trừ bộ nền luôn thêm**: `SuperAdsInHouse` và `SuperAdsDebug` (`implementation`), `SuperAdsDebugOverride` (`debugImplementation`) ([gradle-setup.md](references/gradle-setup.md) mục 1b).
39
- - Logger được init trước `Ads.init`; bản release tắt hoặc chỉ `WARN` trở lên.
40
- - `isDebug = BuildConfig.DEBUG` (hoặc tương đương). Bản release phải là `false`, vì `true` thay unit AdMob bằng unit test (`super-ads/src/main/java/com/android/fullhd/super_ads/engine/load/AdItemLoader.kt:64`).
41
- - Consent chạy và có kết quả **trước** preload/show đầu tiên (`MIGRATION.md:126-127`).
42
- - Config đầu tiên tạo bằng MCP `super-ads` (`create_config` / `create_ad` → `validate_config` → `sync_to_source`).
43
- - Build module app sau mỗi bước Gradle và trích output thật.
27
+ - Định tuyến skill và kiểm version SDK: [super-ads-guide](../super-ads-guide/SKILL.md).
28
+ - Quy tắc version: skill này nhắm SuperAds `>=4.0.0 <5.0.0`. App chưa có SDK nên cài **bản 4.x mới nhất**. Nếu app đã có SuperAds bản thấp hơn, dừng lại và khuyến nghị (không ép) nâng cấp bằng [super-ads-upgrade](../super-ads-upgrade/SKILL.md) trước khi tiếp tục.
29
+ - Thứ tự nguồn sự thật: (1) code SDK và Gradle của repo SDK, (2) `MIGRATION.md`, (3) tài liệu skill. `app/` trong repo SDK chỉ là **ví dụ**: không chép App ID, key, unit, tên config của nó.
30
+ - Có từ user trước khi viết Gradle/manifest: AdMob App ID, ad unit id (hoặc key của network khác), network sẽ dùng, GMS cổ điển hay Next-Gen, quyền truy cập repo Maven chứa artifact SuperAds.
31
+
32
+ ## ⚡ Quick Reference
33
+
34
+ | Cần | Mở |
35
+ |---|---|
36
+ | Artifact, version, bộ nền, Next-Gen, manifest | [references/gradle-setup.md](references/gradle-setup.md) |
37
+ | `Application`, ba cách init, consent, premium | [references/application-setup.md](references/application-setup.md) |
38
+ | Mẫu khai dependency để copy | [templates/gradle-dependencies.md](templates/gradle-dependencies.md) |
39
+ | Mẫu `Application.onCreate` để copy | [templates/application-oncreate.md](templates/application-oncreate.md) |
40
+ | Consent UMP ở Activity đầu | [snippets/consent-request.md](snippets/consent-request.md) |
41
+ | Bật log | [../super-ads-debug/references/logging-setup.md](../super-ads-debug/references/logging-setup.md) |
42
+ | Placement đầu tiên | [super-ads-add-placement](../super-ads-add-placement/SKILL.md) |
43
+ | Quy trình MCP config | `tools/ai_agent_tools/AI_ADS_PLAYBOOK.md` |
44
+
45
+ ## 🏗️ Recommended Architecture
44
46
 
45
- **MUST NOT**
46
- - Không thêm dependency, repo Maven, meta-data khi user chưa đồng ý.
47
- - Không bịa App ID, SDK key, ad unit id.
48
- - Không trộn `SuperAdsAdmobNextGen` với `SuperAdsAdmob` hoặc `SuperAdsArbiter` (`MIGRATION.md:160-172`).
49
- - Không đặt `Ads.show` ở `Application`, trừ App Open qua `AppLifecycleMonitor`.
47
+ Thứ tự lắp, mỗi tầng chỉ làm sau khi tầng trước đã build/chạy được:
48
+
49
+ 1. Gradle: core + bộ nền (`SuperAdsInHouse`, `SuperAdsDebug`, `SuperAdsDebugOverride`) + plugin network theo config, cùng version.
50
+ 2. Manifest: meta-data cho từng network.
51
+ 3. `Application`: logger → `Ads.init`.
52
+ 4. Config đầu tiên: tạo bằng MCP `super-ads`, sync vào đúng file asset app nạp.
53
+ 5. Consent ở Activity đầu, rồi mới preload/show; premium đặt lại mỗi lần khởi động.
54
+ 6. Placement đầu tiên qua `super-ads-add-placement`.
55
+
56
+ ## Workflow
57
+
58
+ ### Stop conditions (dừng và hỏi user)
50
59
 
51
- ## Stop conditions (dừng và hỏi user)
52
60
  - Chưa có AdMob App ID, ad unit id, hoặc key của network khác.
53
61
  - Chưa chọn network, hoặc chưa chọn GMS cổ điển hay Next-Gen.
54
62
  - Không truy cập được repo Maven chứa artifact SuperAds.
@@ -59,48 +67,103 @@ group: Ads
59
67
  - Repo Maven không có đủ artifact đúng version (`SuperAdsUmp`, `SuperAdsAdmobNextGen`, `SuperAdsTracking`…).
60
68
  - Chưa rõ app xử lý thế nào khi consent trả `canRequestAds = false`, `Error` hoặc `Timeout` ([application-setup.md](references/application-setup.md) mục 3).
61
69
 
62
- ## Phase 1: Khảo sát
70
+ ### 1. Khảo sát
71
+
63
72
  1. Module app, `minSdk`, `compileSdk`, phiên bản Kotlin/AGP, cách khai dependency (version catalog hay `build.gradle`).
64
73
  2. SDK quảng cáo / Firebase sẵn có: grep `play-services-ads`, `com.google.android.gms.ads`, `applovin`, `ironsource`.
65
74
  3. `Application` đã có chưa, Activity đầu tiên là màn nào (splash?).
66
75
  4. Danh sách network, App ID, unit: hỏi user.
67
76
  5. Có cần tracking Firebase không, app đã có Firebase (google-services) chưa: hỏi user.
68
77
 
69
- **Verify:** có bảng: module, network, cách init, Activity đầu tiên, các giá trị còn thiếu.
78
+ ### 2. Gradle và manifest
70
79
 
71
- ## Phase 2: Gradle và manifest
72
- - Theo [gradle-setup.md](references/gradle-setup.md): core + **bộ nền (mục 1b: InHouse, Debug, DebugOverride)** + plugin network theo config, cùng version + layout; Next-Gen nếu được chọn; `SuperAdsTracking` nếu user chọn tracking.
80
+ - Theo [gradle-setup.md](references/gradle-setup.md): core + **bộ nền (mục 1b: InHouse, Debug, DebugOverride)** + plugin network theo config, cùng version + layout; Next-Gen nếu được chọn; `SuperAdsTracking` nếu user chọn tracking. Mẫu: [templates/gradle-dependencies.md](templates/gradle-dependencies.md).
73
81
  - Thêm meta-data cho từng network.
74
82
  - `./gradlew :<appModule>:assembleDebug`.
75
83
 
76
- **Verify:** build pass. `./gradlew :<appModule>:dependencies --configuration debugRuntimeClasspath` cho thấy mọi artifact `com.android.fullhd.ads` cùng version, trừ `SuperAdsContract` (version riêng, xem gradle-setup.md mục 2), và có đủ `SuperAdsInHouse`, `SuperAdsDebug`, `SuperAdsDebugOverride`. Cấu hình `releaseRuntimeClasspath` có `SuperAdsInHouse` + `SuperAdsDebug`, không có `SuperAdsDebugOverride`.
84
+ ### 3. Application
77
85
 
78
- ## Phase 3: Application
79
- - Theo [application-setup.md](references/application-setup.md) mục 1–2: logger → init.
86
+ - Theo [application-setup.md](references/application-setup.md) mục 1–2: logger → init. Mẫu: [templates/application-oncreate.md](templates/application-oncreate.md).
80
87
  - Trước khi tạo config: `read_working_config` (MCP), xem `defaultSyncPath`. Server lấy đích từ `MCP_SUPER_ADS_PROJECT_ROOT` + `MCP_SUPER_ADS_CONFIG`; không set `MCP_SUPER_ADS_CONFIG` thì nó tự tạo file rỗng `app/src/main/assets/tmp-*.json` (`tools/ai_agent_tools/README.md:61-62`). `defaultSyncPath` phải là file asset của đúng module app, cùng tên với file truyền cho `Ads.init`; không khớp thì truyền `targetPath` (phải nằm trong project root, `tools/ai_agent_tools/src/mcp/tools.js:94-101`) hoặc nhờ user khởi động lại MCP với env đúng.
81
88
  - Tạo config đầu tiên bằng MCP (`create_config`, rồi `create_ad` cho placement đầu), `validate_config`, user xem, `sync_to_source` vào đúng file app sẽ nạp. Xong thì xoá các file `tmp-*.json` do MCP tự sinh trong `assets/` (nếu có), vì Gradle sẽ đóng gói chúng vào APK (`tools/ai_agent_tools/README.md:66-70`); xoá file là việc cần user đồng ý.
82
89
 
83
- **Verify:** chạy bản debug, `adb logcat -s SuperAdsSDK:V` có log init và không có `ConfigRegistryCheck` báo thiếu plugin: cả dòng "KHÔNG có AdNetworkPlugin nào register" (`super-ads/src/main/java/com/android/fullhd/super_ads/config/validate/ConfigRegistryCheck.kt:33-35`) lẫn "no PROVIDER for (…)" cho từng network/format (`super-ads/src/main/java/com/android/fullhd/super_ads/config/validate/ConfigRegistryCheck.kt:88`).
90
+ ### 4. Consent và premium
84
91
 
85
- ## Phase 4: Consent và premium
86
- - Consent ở Activity đầu, gom mọi preload/show vào sau callback ([application-setup.md](references/application-setup.md) mục 3).
92
+ - Consent ở Activity đầu, gom mọi preload/show vào sau callback ([application-setup.md](references/application-setup.md) mục 3). Snippet: [snippets/consent-request.md](snippets/consent-request.md).
87
93
  - Premium: đặt `Ads.isPremium` mỗi lần khởi động theo trạng thái mua (mục 4).
88
94
 
89
- **Verify:** trong log, không có `ProviderTracker info=bắt đầu load` nào xuất hiện trước khi callback consent chạy.
95
+ ### 5. Placement đầu tiên
90
96
 
91
- ## Phase 5: Placement đầu tiên
92
- Chuyển sang `super-ads-add-placement` (call site + kiểm trên máy bằng `super-ads-adb-test`).
97
+ Chuyển sang [super-ads-add-placement](../super-ads-add-placement/SKILL.md) (call site + kiểm trên máy bằng `super-ads-adb-test`).
93
98
 
94
- **Verify:** có Impression của placement đầu tiên trên máy, hoặc ghi rõ chưa kiểm.
99
+ ## 🔧 API Reference
95
100
 
96
- ## Anti-patterns
101
+ | API / tool | Mục đích | Chi tiết |
102
+ |---|---|---|
103
+ | `Ads.logger.init` | Init logger trước `Ads.init` | [application-setup.md](references/application-setup.md) mục 1 |
104
+ | `Ads.init` | Init SDK, ba cách (asset / provider / asset + Remote Config) | [application-setup.md](references/application-setup.md) mục 2 |
105
+ | `Ads.gdpr.requestAndShowIfRequired` | Consent UMP | [application-setup.md](references/application-setup.md) mục 3 |
106
+ | `Ads.isPremium` | Chặn mọi lần show khi user đã mua | [application-setup.md](references/application-setup.md) mục 4 |
107
+ | MCP `create_config` / `create_ad` / `validate_config` / `sync_to_source` | Tạo và ghi config đầu tiên | `tools/ai_agent_tools/AI_ADS_PLAYBOOK.md` |
108
+
109
+ ## ✅ Best Practices
110
+
111
+ - Core và mọi plugin cùng một version (`MIGRATION.md:7-16`).
112
+ - Chỉ thêm plugin network mà config thật sự dùng, **trừ bộ nền luôn thêm**: `SuperAdsInHouse` và `SuperAdsDebug` (`implementation`), `SuperAdsDebugOverride` (`debugImplementation`) ([gradle-setup.md](references/gradle-setup.md) mục 1b).
113
+ - Logger được init trước `Ads.init`; bản release tắt hoặc chỉ `WARN` trở lên.
114
+ - `isDebug = BuildConfig.DEBUG` (hoặc tương đương). Bản release phải là `false`, vì `true` thay unit AdMob bằng unit test (`super-ads/src/main/java/com/android/fullhd/super_ads/engine/load/AdItemLoader.kt:64`).
115
+ - Consent chạy và có kết quả **trước** preload/show đầu tiên (`MIGRATION.md:126-127`).
116
+ - Config đầu tiên tạo bằng MCP `super-ads` (`create_config` / `create_ad` → `validate_config` → `sync_to_source`).
117
+ - Build module app sau mỗi bước Gradle và trích output thật.
118
+
119
+ ## ❌ Anti-patterns
120
+
121
+ - Thêm dependency, repo Maven, meta-data khi user chưa đồng ý.
122
+ - Bịa App ID, SDK key, ad unit id.
123
+ - Trộn `SuperAdsAdmobNextGen` với `SuperAdsAdmob` hoặc `SuperAdsArbiter` (`MIGRATION.md:160-172`).
124
+ - Đặt `Ads.show` ở `Application`, trừ App Open qua `AppLifecycleMonitor`.
97
125
  - Khai `SuperAds:4.0.0` nhưng plugin `3.x` hoặc cũ hơn (crash lúc chạy, không lỗi lúc build).
98
126
  - Gọi `Ads.init` trong Activity.
99
127
  - `isDebug = true` cố định.
100
128
  - Preload ngay trong `Application.onCreate` trước consent.
101
129
  - Chép config, App ID từ app mẫu sang app thật.
102
130
 
131
+ ## ⚠️ Common Issues
132
+
133
+ **Log init có dòng `RequiredPluginCheck`.**
134
+ Cause: thiếu `SuperAdsInHouse` (bộ nền). Solution: khai đủ bộ nền ([gradle-setup.md](references/gradle-setup.md) mục 1b).
135
+
136
+ **Crash lúc chạy (`NoClassDefFoundError` / `NoSuchMethodError`) dù build pass.**
137
+ Cause: core và plugin khác version. Solution: đưa mọi artifact về cùng version, trừ `SuperAdsContract` ([gradle-setup.md](references/gradle-setup.md) mục 2).
138
+
139
+ **Mất `ad_impression` / `ad_click` dù config bật tracking, hoặc chỉ thấy WARN.**
140
+ Cause: thiếu `SuperAdsTracking`, hoặc app chưa cấu hình Firebase (google-services). Solution: xem `SuperAdsTracking` trong [gradle-setup.md](references/gradle-setup.md) mục 1.
141
+
142
+ ## Files created
143
+
144
+ - Config đầu tiên: file JSON trong `assets/` của module app, do MCP `sync_to_source` ghi, cùng tên với file truyền cho `Ads.init`.
145
+ - `Application` của app, nếu app chưa có (Bước 1 khảo sát).
146
+ - Không tạo file `tmp-*.json`: file do MCP tự sinh phải được xoá (cần user đồng ý).
147
+
148
+ ## Files modified
149
+
150
+ - Gradle của module app (và version catalog nếu có): core, bộ nền, plugin network, `SuperAdsTracking` nếu chọn.
151
+ - `AndroidManifest.xml`: meta-data cho từng network (và `android:name` của `Application` nếu vừa tạo).
152
+ - `Application`: logger → `Ads.init` (và `Ads.isPremium` theo trạng thái mua).
153
+ - Activity đầu tiên: consent, gom preload/show sau callback.
154
+
155
+ ## Verification
156
+
157
+ Báo output thật, không tóm tắt khi chưa chạy. Sau mỗi bước ở Workflow:
158
+
159
+ 1. **Khảo sát:** có bảng: module, network, cách init, Activity đầu tiên, các giá trị còn thiếu.
160
+ 2. **Gradle và manifest:** build pass. `./gradlew :<appModule>:dependencies --configuration debugRuntimeClasspath` cho thấy mọi artifact `com.android.fullhd.ads` cùng version, trừ `SuperAdsContract` (version riêng, xem gradle-setup.md mục 2), và có đủ `SuperAdsInHouse`, `SuperAdsDebug`, `SuperAdsDebugOverride`. Cấu hình `releaseRuntimeClasspath` có `SuperAdsInHouse` + `SuperAdsDebug`, không có `SuperAdsDebugOverride`.
161
+ 3. **Application:** chạy bản debug, `adb logcat -s SuperAdsSDK:V` có log init và không có `ConfigRegistryCheck` báo thiếu plugin: cả dòng "KHÔNG có AdNetworkPlugin nào register" (`super-ads/src/main/java/com/android/fullhd/super_ads/config/validate/ConfigRegistryCheck.kt:33-35`) lẫn "no PROVIDER for (…)" cho từng network/format (`super-ads/src/main/java/com/android/fullhd/super_ads/config/validate/ConfigRegistryCheck.kt:88`).
162
+ 4. **Consent và premium:** trong log, không có `ProviderTracker info=bắt đầu load` nào xuất hiện trước khi callback consent chạy.
163
+ 5. **Placement đầu tiên:** có Impression của placement đầu tiên trên máy, hoặc ghi rõ chưa kiểm.
164
+
103
165
  ## Checklist
166
+
104
167
  - [ ] Network, App ID, unit đã có từ user.
105
168
  - [ ] Artifact cùng version (trừ `SuperAdsContract`), build pass (trích output).
106
169
  - [ ] Đã hỏi về tracking Firebase; thêm `SuperAdsTracking` nếu cần.
@@ -111,5 +174,40 @@ Chuyển sang `super-ads-add-placement` (call site + kiểm trên máy bằng `s
111
174
  - [ ] Config tạo bằng MCP, `validate_config` sạch.
112
175
  - [ ] Placement đầu tiên đã kiểm (hoặc ghi rõ chưa).
113
176
 
177
+ ## 📈 Performance Notes
178
+
179
+ > **Not applicable for this skill.**
180
+
181
+ ## 🔒 Security Notes
182
+
183
+ - Không chép App ID, SDK key, ad unit id từ app mẫu sang app thật; giá trị do user cung cấp.
184
+ - `isDebug = true` thay mọi unit AdMob bằng unit test và ép vùng EEA cho UMP: bản release phải là `false`.
185
+ - Consent phải có kết quả trước request ad đầu tiên; core không tự chặn hộ.
186
+
187
+ ## 🔄 Migration Guide
188
+
189
+ > **Not applicable for this skill.**
190
+
114
191
  ## Output
192
+
115
193
  File đã sửa (Gradle, manifest, `Application`, Activity đầu, config), output build, kết quả chạy trên máy, các giá trị còn chờ user, phần chưa xác minh.
194
+
195
+ ## Examples
196
+
197
+ - Mẫu Gradle: [templates/gradle-dependencies.md](templates/gradle-dependencies.md).
198
+ - Mẫu `Application.onCreate`: [templates/application-oncreate.md](templates/application-oncreate.md).
199
+ - Consent ở Activity đầu: [snippets/consent-request.md](snippets/consent-request.md).
200
+ - Mẫu thật trong app ví dụ: xem trích dẫn ở [application-setup.md](references/application-setup.md).
201
+
202
+ ## 📚 References
203
+
204
+ - [super-ads-guide](../super-ads-guide/SKILL.md): định tuyến, kiểm version SDK.
205
+ - [super-ads-upgrade](../super-ads-upgrade/SKILL.md): nâng cấp SuperAds.
206
+ - [super-ads-add-placement](../super-ads-add-placement/SKILL.md): placement đầu tiên.
207
+ - [super-ads-config](../super-ads-config/SKILL.md), [super-ads-adb-test](../super-ads-adb-test/SKILL.md), [super-ads-release-check](../super-ads-release-check/SKILL.md), [super-ads-debug](../super-ads-debug/SKILL.md).
208
+ - `adspro-to-superads`: app còn AdsPro.
209
+ - Repo SDK: `MIGRATION.md`, `tools/ai_agent_tools/AI_ADS_PLAYBOOK.md`.
210
+
211
+ ## 🏷️ Tags
212
+
213
+ `superads`, `integrate`, `gradle`, `application`, `consent`, `onboarding`
@@ -4,19 +4,7 @@
4
4
 
5
5
  ## 1. Thứ tự trong `Application.onCreate`
6
6
 
7
- ```kotlin
8
- override fun onCreate() {
9
- super.onCreate()
10
- // 1. Logger trước init để thấy log lúc init. Bản release: enabled = false hoặc minLevel = WARN.
11
- Ads.logger.init(LogConfig(enabled = BuildConfig.DEBUG, minLevel = LogLevel.FLOW), debug = BuildConfig.DEBUG)
12
-
13
- // 2. Init: chọn MỘT trong ba cách ở mục 2.
14
- Ads.init(this, "<config>.json", isDebug = BuildConfig.DEBUG)
15
-
16
- // 3. Tracking (tuỳ chọn, theo yêu cầu của app): module `super-ads-tracking` (chỉ cần thêm dependency, tự cài; bật/tắt bằng `global.tracking.*`), ...
17
- // 4. App Open (nếu có): AppLifecycleMonitor(...).register() — xem super-ads-add-placement
18
- }
19
- ```
7
+ Mẫu: [../templates/application-oncreate.md](../templates/application-oncreate.md).
20
8
 
21
9
  - Logger: [../../super-ads-debug/references/logging-setup.md](../../super-ads-debug/references/logging-setup.md). Mẫu thật: logger `app/src/main/java/com/android/hd/ads2026/MyApplication.kt:28-42`, init `app/src/main/java/com/android/hd/ads2026/MyApplication.kt:54-56` (`initRemote` + `refreshRemoteConfig`).
22
10
  - `isDebug = true` thay **mọi unit AdMob** bằng unit test của Google lúc load (`SA/engine/load/AdItemLoader.kt:28`, `SA/engine/load/AdItemLoader.kt:64`, `SA/runtime/SdkGraph.kt:117`). Network khác giữ unit gốc (`SA/engine/load/AdItemLoader.kt:138`). Nó cũng bật ghi log ra file mặc định (`SA/runtime/SdkRuntime.kt:259`). Bản release phải là `false`.
@@ -38,14 +26,7 @@ Gọi `Ads.show` trước khi init xong thì SDK xếp hàng chờ (`SA/api/Ads.
38
26
 
39
27
  ## 3. Consent (UMP)
40
28
 
41
- ```kotlin
42
- // Activity đầu tiên (splash/main), TRƯỚC preload/show đầu tiên
43
- Ads.gdpr.requestAndShowIfRequired(this, isDebug = BuildConfig.DEBUG) { result ->
44
- // result: Success(status, canShowAds, canRequestAds) | Error(message) | Timeout
45
- // Xử lý canRequestAds = false / Error / Timeout là quyết định của app: hỏi user (SDK không chặn hộ).
46
- startAdsFlow() // preload / show / điều hướng tiếp
47
- }
48
- ```
29
+ Snippet: [../snippets/consent-request.md](../snippets/consent-request.md).
49
30
 
50
31
  - Core **không tự chặn** request khi chưa có consent (`MIGRATION.md:126-127`). Gọi sai thứ tự nghĩa là app gửi request ad trước khi có consent.
51
32
  - Không có plugin cung cấp consent thì callback trả ngay `NOT_REQUIRED` (`SA/api/AdsFeatures.kt:215-239`). Tham số còn có `timeoutMs` (mặc định 10000).
@@ -40,19 +40,7 @@ Mọi app dùng SuperAds khai đủ bộ nền dưới đây, **kể cả khi co
40
40
 
41
41
  ## 2. Mẫu (GMS cổ điển)
42
42
 
43
- ```gradle
44
- def superAds = '4.0.0'
45
- implementation "com.android.fullhd.ads:SuperAds:$superAds"
46
- // bộ nền (mục 1b): luôn khai
47
- implementation "com.android.fullhd.ads:SuperAdsInHouse:$superAds"
48
- implementation "com.android.fullhd.ads:SuperAdsDebug:$superAds"
49
- debugImplementation "com.android.fullhd.ads:SuperAdsDebugOverride:$superAds"
50
- // plugin network theo config
51
- implementation "com.android.fullhd.ads:SuperAdsAdmob:$superAds"
52
- // plugin khác: cùng $superAds
53
- implementation "com.android.fullhd.ads:SuperAdsTracking:$superAds" // chỉ khi app cần tracking Firebase (user đã chọn)
54
- implementation 'com.android.fullhd.layout:SuperAdsLayout:<version>'
55
- ```
43
+ Mẫu khai dependency (copy rồi chỉnh theo config): [../templates/gradle-dependencies.md](../templates/gradle-dependencies.md).
56
44
 
57
45
  **Core và mọi plugin phải cùng một version**: package API/SPI đổi ở 4.0.0 (`api.plugin` → `spi`), trộn bản sẽ lỗi lúc chạy (`NoClassDefFoundError` / `NoSuchMethodError`) (`MIGRATION.md:7-16`).
58
46
 
@@ -0,0 +1,12 @@
1
+ # Consent (UMP) ở Activity đầu tiên
2
+
3
+ > Chạy TRƯỚC preload/show đầu tiên. Quy tắc, `ConsentResult`, mẫu thật: [../references/application-setup.md](../references/application-setup.md) mục 3.
4
+
5
+ ```kotlin
6
+ // Activity đầu tiên (splash/main), TRƯỚC preload/show đầu tiên
7
+ Ads.gdpr.requestAndShowIfRequired(this, isDebug = BuildConfig.DEBUG) { result ->
8
+ // result: Success(status, canShowAds, canRequestAds) | Error(message) | Timeout
9
+ // Xử lý canRequestAds = false / Error / Timeout là quyết định của app: hỏi user (SDK không chặn hộ).
10
+ startAdsFlow() // preload / show / điều hướng tiếp
11
+ }
12
+ ```
@@ -0,0 +1,17 @@
1
+ # Mẫu `Application.onCreate`
2
+
3
+ > Thứ tự: logger trước init, rồi init, rồi tracking / App Open. Giải thích, ba cách init, mẫu thật: [../references/application-setup.md](../references/application-setup.md).
4
+
5
+ ```kotlin
6
+ override fun onCreate() {
7
+ super.onCreate()
8
+ // 1. Logger trước init để thấy log lúc init. Bản release: enabled = false hoặc minLevel = WARN.
9
+ Ads.logger.init(LogConfig(enabled = BuildConfig.DEBUG, minLevel = LogLevel.FLOW), debug = BuildConfig.DEBUG)
10
+
11
+ // 2. Init: chọn MỘT trong ba cách ở mục 2.
12
+ Ads.init(this, "<config>.json", isDebug = BuildConfig.DEBUG)
13
+
14
+ // 3. Tracking (tuỳ chọn, theo yêu cầu của app): module `super-ads-tracking` (chỉ cần thêm dependency, tự cài; bật/tắt bằng `global.tracking.*`), ...
15
+ // 4. App Open (nếu có): AppLifecycleMonitor(...).register() — xem super-ads-add-placement
16
+ }
17
+ ```
@@ -0,0 +1,17 @@
1
+ # Mẫu khai dependency (GMS cổ điển)
2
+
3
+ > Mẫu: thêm vào app thật chỉ khi user đã đồng ý (thêm dependency). Giải thích từng artifact, version, repo Maven: [../references/gradle-setup.md](../references/gradle-setup.md).
4
+
5
+ ```gradle
6
+ def superAds = '4.0.0'
7
+ implementation "com.android.fullhd.ads:SuperAds:$superAds"
8
+ // bộ nền (mục 1b): luôn khai
9
+ implementation "com.android.fullhd.ads:SuperAdsInHouse:$superAds"
10
+ implementation "com.android.fullhd.ads:SuperAdsDebug:$superAds"
11
+ debugImplementation "com.android.fullhd.ads:SuperAdsDebugOverride:$superAds"
12
+ // plugin network theo config
13
+ implementation "com.android.fullhd.ads:SuperAdsAdmob:$superAds"
14
+ // plugin khác: cùng $superAds
15
+ implementation "com.android.fullhd.ads:SuperAdsTracking:$superAds" // chỉ khi app cần tracking Firebase (user đã chọn)
16
+ implementation 'com.android.fullhd.layout:SuperAdsLayout:<version>'
17
+ ```