@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.
- package/README.md +71 -13
- package/dist/cli.js +8 -2
- package/package.json +1 -1
- package/skills/README.md +4 -0
- package/skills/adspro-to-superads/SKILL.md +157 -732
- package/skills/adspro-to-superads/references/global-invariant-check.md +49 -0
- package/skills/adspro-to-superads/references/migration-contract.md +57 -0
- package/skills/adspro-to-superads/references/phase-0-inventory.md +39 -0
- package/skills/adspro-to-superads/references/phase-1-2-gradle-manifest.md +85 -0
- package/skills/adspro-to-superads/references/phase-3-config-migration.md +159 -0
- package/skills/adspro-to-superads/references/phase-4-wrapper-observability.md +70 -0
- package/skills/adspro-to-superads/references/phase-5-7-callsites-layout-cleanup.md +73 -0
- package/skills/adspro-to-superads/references/principles-and-authority.md +73 -0
- package/skills/adspro-to-superads/references/user-questions.md +53 -0
- package/skills/adspro-to-superads/snippets/ads-api-quick.md +20 -0
- package/skills/adspro-to-superads/templates/migration-inventory.md +42 -0
- package/skills/super-ads-ab-test/SKILL.md +91 -23
- package/skills/super-ads-adb-test/SKILL.md +85 -36
- package/skills/super-ads-adb-test/{references → examples}/scenarios-sample.md +5 -5
- package/skills/super-ads-add-placement/SKILL.md +145 -50
- package/skills/super-ads-add-placement/references/call-site-api.md +33 -0
- package/skills/super-ads-add-placement/snippets/app-open.md +25 -0
- package/skills/super-ads-add-placement/snippets/fullscreen-nav.md +14 -0
- package/skills/super-ads-add-placement/snippets/inline-banner-native.md +19 -0
- package/skills/super-ads-add-placement/snippets/preload-event.md +13 -0
- package/skills/super-ads-add-placement/snippets/reward.md +17 -0
- package/skills/super-ads-config/SKILL.md +94 -36
- package/skills/super-ads-debug/SKILL.md +87 -37
- package/skills/super-ads-debug/references/logging-setup.md +2 -0
- package/skills/super-ads-debug/scripts/filter-logads.sh +21 -0
- package/skills/super-ads-debug-override/SKILL.md +154 -81
- package/skills/super-ads-debug-override/snippets/arm-override.md +9 -0
- package/skills/super-ads-debug-override/snippets/check-module.md +8 -0
- package/skills/super-ads-debug-override/snippets/clear-override.md +9 -0
- package/skills/super-ads-debug-override/snippets/confirm-active.md +16 -0
- package/skills/super-ads-guide/SKILL.md +129 -0
- package/skills/super-ads-guide/references/compatibility.md +26 -0
- package/skills/super-ads-guide/references/sdk-version-check.md +50 -0
- package/skills/super-ads-integrate/SKILL.md +145 -47
- package/skills/super-ads-integrate/references/application-setup.md +2 -21
- package/skills/super-ads-integrate/references/gradle-setup.md +1 -13
- package/skills/super-ads-integrate/snippets/consent-request.md +12 -0
- package/skills/super-ads-integrate/templates/application-oncreate.md +17 -0
- package/skills/super-ads-integrate/templates/gradle-dependencies.md +17 -0
- package/skills/super-ads-release-check/SKILL.md +85 -32
- package/skills/super-ads-show-rate/SKILL.md +87 -36
- package/skills/super-ads-show-rate/references/collect-snippet.md +2 -36
- package/skills/super-ads-show-rate/scripts/show-rate.sh +25 -0
- package/skills/super-ads-show-rate/snippets/show-events-logger.md +26 -0
- package/skills/super-ads-upgrade/SKILL.md +137 -0
- package/skills/super-ads-upgrade/references/upgrade-hops.md +26 -0
- package/skills/super-ads-upgrade/templates/changelog-template.md +39 -0
- package/skills/super-ads-add-placement/references/call-site-snippets.md +0 -90
- /package/skills/super-ads-ab-test/{references → templates}/firebase-handoff-template.md +0 -0
- /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
|
|
5
|
-
version: 1.
|
|
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í →
|
|
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 →
|
|
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
|
-
##
|
|
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
|
-
|
|
36
|
-
**
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
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
|
-
|
|
78
|
+
### 2. Gradle và manifest
|
|
70
79
|
|
|
71
|
-
|
|
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
|
-
|
|
84
|
+
### 3. Application
|
|
77
85
|
|
|
78
|
-
|
|
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
|
-
|
|
90
|
+
### 4. Consent và premium
|
|
84
91
|
|
|
85
|
-
|
|
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
|
-
|
|
95
|
+
### 5. Placement đầu tiên
|
|
90
96
|
|
|
91
|
-
|
|
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
|
-
|
|
99
|
+
## 🔧 API Reference
|
|
95
100
|
|
|
96
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
```
|