@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,39 @@
|
|
|
1
|
+
# Changelog nâng cấp SuperAds
|
|
2
|
+
|
|
3
|
+
Điền từ kết quả thật; mục không áp dụng ghi "Không".
|
|
4
|
+
|
|
5
|
+
## Tổng quan
|
|
6
|
+
- App / module: <tên>
|
|
7
|
+
- SuperAds: <từ> -> <lên>
|
|
8
|
+
- Artifact đã nâng (core + plugin, cùng version): <danh sách>
|
|
9
|
+
- Nhánh git: <tên>
|
|
10
|
+
|
|
11
|
+
## Import đã đổi
|
|
12
|
+
| File | Import cũ | Import mới |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
|
|
15
|
+
## Logic đã đổi
|
|
16
|
+
| File | Thay đổi | Lý do (mục `MIGRATION.md`) |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
|
|
19
|
+
## Config JSON
|
|
20
|
+
| Key | Thêm / Xoá / Đổi tên / Đổi giá trị | Patch đã duyệt |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
|
|
23
|
+
## Thay đổi hành vi
|
|
24
|
+
- <mục hành vi và có ảnh hưởng app hay không>
|
|
25
|
+
|
|
26
|
+
## Đã kiểm
|
|
27
|
+
| Việc | Lệnh / tool | Kết quả thật |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| Build | | |
|
|
30
|
+
| Mọi artifact cùng version | | |
|
|
31
|
+
| validate_config | | |
|
|
32
|
+
| Thiết bị (super-ads-adb-test) | | |
|
|
33
|
+
|
|
34
|
+
## Bỏ qua và việc còn lại cho user
|
|
35
|
+
- <bước bỏ qua kèm lý do>
|
|
36
|
+
- <việc user cần làm, vd publish artifact, kiểm bản phát hành>
|
|
37
|
+
|
|
38
|
+
## Lỗi / vấn đề gặp
|
|
39
|
+
- <mô tả và cách xử lý>
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Call site theo nhóm format
|
|
2
|
-
|
|
3
|
-
> Authority: code SDK. `SA/` = `super-ads/src/main/java/com/android/fullhd/super_ads/`.
|
|
4
|
-
> App đã có wrapper (vd `AdsUtils`, extension `showAdView`) thì **gọi qua wrapper**, không gọi `Ads.show` trực tiếp bên cạnh. Mẫu wrapper: [../../adspro-to-superads/references/wrapper-template.md](../../adspro-to-superads/references/wrapper-template.md).
|
|
5
|
-
|
|
6
|
-
## API dùng chung
|
|
7
|
-
|
|
8
|
-
| API | Chữ ký / hành vi | Nguồn |
|
|
9
|
-
|---|---|---|
|
|
10
|
-
| `Ads.show` | `show(placementId, activity, target = AdTarget.AdFull, callback = LoggerAdsCallback())`; callback chạy trên main; gọi trước khi init xong thì xếp hàng chờ | `SA/api/Ads.kt:200-217` |
|
|
11
|
-
| `AdTarget` | `AdFull` (fullscreen) hoặc `AdView(container, lifecycleOfViewOwner = null)` (inline) | `SA/api/model/AdTarget.kt:7-15` |
|
|
12
|
-
| `AdsCallback` | `onAdImpression`, `onAdShowedFull`, `onAdDismissedFull`, `onAdCollapsibleDismiss`, `onAdFailed`, `onUserEarnedReward`, `onAdClicked` (đều có thân mặc định) | `SA/api/callback/AdsCallback.kt:32-120` |
|
|
13
|
-
| `NavAdCallback` | gọi `onNav` một lần theo `mode.navigate`; fail thì `NavResult.Failed` | `SA/api/callback/AdsCallback.kt:122-191` |
|
|
14
|
-
| `RewardAdCallback` | gọi `onReward` một lần lúc dismiss; `Premium` coi là `Success` | `SA/api/callback/AdsCallback.kt:194-266` |
|
|
15
|
-
| `Ads.dispatchEvent` | preload các adItem có `preload.eventActive` chứa event | `SA/api/Ads.kt:247-249` |
|
|
16
|
-
| `Ads.destroyByPlacement` / `Ads.dismissByPlacement` | huỷ ad + cache của placement / đóng ad đang hiện và dừng reload | `SA/api/Ads.kt:225-237` |
|
|
17
|
-
|
|
18
|
-
## 1. Fullscreen có điều hướng (INTER, NATIVE_FULL_ACTIVITY)
|
|
19
|
-
|
|
20
|
-
```kotlin
|
|
21
|
-
Ads.show("<placement>", activity, callback = NavAdCallback { result ->
|
|
22
|
-
goNext() // gọi cho cả Success và Failed: ad lỗi không được chặn luồng người dùng
|
|
23
|
-
})
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Thời điểm `onNav` do key `mode.navigate` quyết định, SDK không tự điều hướng (tra `mode.navigate` trong `tools/ai_agent_tools/data/ads_key_knowledge.json`).
|
|
27
|
-
|
|
28
|
-
## 2. Reward / Reward Interstitial
|
|
29
|
-
|
|
30
|
-
```kotlin
|
|
31
|
-
Ads.show("<placement>", activity, callback = RewardAdCallback(applyForAnyAdFull = false) { result ->
|
|
32
|
-
when (result) {
|
|
33
|
-
is RewardResult.Success -> grantReward()
|
|
34
|
-
is RewardResult.Failed -> showNoReward()
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
`applyForAnyAdFull = true` (mặc định) cho thưởng cả khi đóng ad mà không nhận reward (`SA/api/callback/AdsCallback.kt:194-199`). Chọn giá trị là **quyết định sản phẩm**, phải hỏi user.
|
|
40
|
-
|
|
41
|
-
## 3. Inline: banner, native, collapsible
|
|
42
|
-
|
|
43
|
-
```kotlin
|
|
44
|
-
// Activity
|
|
45
|
-
Ads.show("<placement>", this, AdTarget.AdView(binding.adContainer, lifecycle), object : AdsCallback {
|
|
46
|
-
override fun onAdFailed(placementId: String, error: AdError) { binding.adContainer.isVisible = false }
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
// Fragment: dùng lifecycle của VIEW, không phải của fragment
|
|
50
|
-
Ads.show("<placement>", requireActivity(), AdTarget.AdView(binding.adContainer, viewLifecycleOwner.lifecycle))
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
- Mẫu thật: `app/src/main/java/com/android/hd/ads2026/test/BaseTestActivity.kt:79-84`.
|
|
54
|
-
- SDK theo dõi lifecycle chủ view chỉ với collapsible và banner collapsible. Banner/native thường **không** theo dõi (`SA/presentation/presenter/InlinePresenter.kt:23-27`). Dọn ad khi màn hình chết thì theo cách app đang làm ở các màn khác; chưa có tiền lệ thì hỏi user.
|
|
55
|
-
|
|
56
|
-
## 4. Inline trong danh sách (RecyclerView / Epoxy)
|
|
57
|
-
|
|
58
|
-
Mẫu: `app/src/main/java/com/android/hd/ads2026/test/NativeTestActivity.kt:49-65`.
|
|
59
|
-
- Gọi `Ads.show` lúc bind item quảng cáo, với container của chính item đó.
|
|
60
|
-
- Trả placement khi unbind (`AdPlacementController.recyclePlacement`, `app/src/main/java/com/android/hd/ads2026/AdPlacementController.kt:131`). Đây là helper của app mẫu, không thuộc SDK.
|
|
61
|
-
|
|
62
|
-
## 5. Preload theo event
|
|
63
|
-
|
|
64
|
-
```kotlin
|
|
65
|
-
Ads.dispatchEvent(activity, "<event>") // event phải nằm trong preload.eventActive của adItem
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
- Mẫu: `app/src/main/java/com/android/hd/ads2026/test/BaseTestActivity.kt:87-92`.
|
|
69
|
-
- `mode.show = SHOW_LOADED` thì show **chỉ** dùng ad đã preload; chưa có thì fail `LOAD:208`. Muốn load lúc show thì dùng `LOAD_AND_SHOW` (tra `mode.show` trong file tri thức).
|
|
70
|
-
|
|
71
|
-
## 6. App Open khi quay lại app
|
|
72
|
-
|
|
73
|
-
```kotlin
|
|
74
|
-
// Application.onCreate, sau Ads.init
|
|
75
|
-
// appOpenAllowed: cờ của app, chỉ bật sau callback consent và sau lần vào app đầu (splash).
|
|
76
|
-
AppLifecycleMonitor(
|
|
77
|
-
onForeground = {
|
|
78
|
-
if (appOpenAllowed) {
|
|
79
|
-
Ads.config.getActivityProvider()?.getActivityOnTopNotAds()?.let { Ads.show("<app_open_placement>", it) }
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
onBackground = {},
|
|
83
|
-
).register()
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
**Không bỏ guard:** `onForeground` chạy cả ở `ON_START` đầu tiên lúc mở app lạnh (`SA/api/lifecycle/AppLifecycleMonitor.kt:19-21`), tức trước khi consent ở Activity đầu kịp trả về. Không có guard thì App Open gửi request trước consent. App mẫu chặn tạm bằng thời gian (`app/src/main/java/com/android/hd/ads2026/MyApplication.kt:61`).
|
|
87
|
-
|
|
88
|
-
- `AppLifecycleMonitor` chỉ chuyển `onStart`/`onStop` của `ProcessLifecycleOwner` (`SA/api/lifecycle/AppLifecycleMonitor.kt:9-29`). Mẫu đăng ký: `app/src/main/java/com/android/hd/ads2026/MyApplication.kt:58-72`.
|
|
89
|
-
- Guard sau fullscreen (`appOpen.guardAfterFullscreenMs`) chặn App Open ngay sau khi đóng một fullscreen (`POLICY:108`, `SA/engine/rules/FullscreenRules.kt:74-97`).
|
|
90
|
-
- Điều kiện thêm (màn splash, không show lần mở đầu…) là logic của app: theo cách app đang làm, chưa có thì hỏi user.
|
|
File without changes
|
|
File without changes
|