@leejungkiin/awkit 1.0.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/CHANGELOG.md +27 -0
- package/README.md +146 -0
- package/VERSION +1 -0
- package/bin/awf.js +549 -0
- package/bin/awk.js +1759 -0
- package/core/AGENTS.md +39 -0
- package/core/GEMINI.md +202 -0
- package/core/GEMINI.md.bak +244 -0
- package/core/orchestrator.md +58 -0
- package/package.json +46 -0
- package/schemas/brain.schema.json +342 -0
- package/schemas/preferences.schema.json +95 -0
- package/schemas/session.schema.json +112 -0
- package/skill-packs/neural-memory/README.md +111 -0
- package/skill-packs/neural-memory/pack.json +35 -0
- package/skill-packs/neural-memory/schemas/brain-snapshot.json +167 -0
- package/skill-packs/neural-memory/skills/nm-memory-audit/SKILL.md +157 -0
- package/skill-packs/neural-memory/skills/nm-memory-evolution/SKILL.md +202 -0
- package/skill-packs/neural-memory/skills/nm-memory-intake/SKILL.md +135 -0
- package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +184 -0
- package/skill-packs/neural-memory/workflows/nm-import.md +73 -0
- package/skill-packs/neural-memory/workflows/nm-recall.md +67 -0
- package/skill-packs/neural-memory/workflows/nm-snapshot.md +69 -0
- package/skills/adaptive-language/SKILL.md +189 -0
- package/skills/ambient-brain/SKILL.md +314 -0
- package/skills/ambient-brain/brain-router.md +185 -0
- package/skills/ambient-brain/brain-templates.md +201 -0
- package/skills/auto-save/SKILL.md +223 -0
- package/skills/awf-adaptive-language/SKILL.md +189 -0
- package/skills/awf-context-help/SKILL.md +180 -0
- package/skills/awf-error-translator/SKILL.md +153 -0
- package/skills/awf-session-restore/SKILL.md +270 -0
- package/skills/awf-version-tracker/SKILL.md +32 -0
- package/skills/awf-version-tracker/scripts/snapshot.sh +22 -0
- package/skills/beads-manager/SKILL.md +323 -0
- package/skills/brainstorm-agent/SKILL.md +295 -0
- package/skills/context-help/SKILL.md +180 -0
- package/skills/error-translator/SKILL.md +153 -0
- package/skills/ios-engineer/SKILL.md +101 -0
- package/skills/memory-sync/SKILL.md +378 -0
- package/skills/memory-sync/memory-router.md +185 -0
- package/skills/memory-sync/memory-templates.md +201 -0
- package/skills/orchestrator/SKILL.md +193 -0
- package/skills/session-restore/SKILL.md +240 -0
- package/templates/CODEBASE.md +80 -0
- package/templates/brain.example.json +321 -0
- package/templates/preferences.example.json +21 -0
- package/templates/project-identity/android.json +28 -0
- package/templates/project-identity/backend-nestjs.json +24 -0
- package/templates/project-identity/expo.json +27 -0
- package/templates/project-identity/ios.json +27 -0
- package/templates/project-identity/web-nextjs.json +24 -0
- package/templates/session.example.json +53 -0
- package/templates/specs/design-template.md +166 -0
- package/templates/specs/requirements-template.md +65 -0
- package/templates/specs/tasks-template.md +132 -0
- package/templates/structures/android.txt +10 -0
- package/templates/structures/backend-nestjs.txt +6 -0
- package/templates/structures/expo.txt +9 -0
- package/templates/structures/ios.txt +9 -0
- package/templates/structures/web-nextjs.txt +6 -0
- package/templates/workflow_dual_mode_template.md +87 -0
- package/workflows/_uncategorized/README.md +339 -0
- package/workflows/_uncategorized/ads-creative.md +357 -0
- package/workflows/_uncategorized/ads-full-optimization.md +308 -0
- package/workflows/_uncategorized/ads-plan.md +247 -0
- package/workflows/_uncategorized/ads-user-analysis.md +337 -0
- package/workflows/_uncategorized/skill-health.md +35 -0
- package/workflows/_uncategorized/skill-rollback.md +35 -0
- package/workflows/ads/admob.md +62 -0
- package/workflows/ads/ads-analyst.md +201 -0
- package/workflows/ads/ads-audit.md +106 -0
- package/workflows/ads/ads-optimize.md +97 -0
- package/workflows/ads/ads-targeting.md +241 -0
- package/workflows/ads/adsExpert.md +160 -0
- package/workflows/ads/smali-ads-config.md +400 -0
- package/workflows/ads/smali-ads-flow.md +331 -0
- package/workflows/ads/smali-ads-interstitial.md +377 -0
- package/workflows/ads/smali-ads-native.md +382 -0
- package/workflows/context/auto-execution-workflow.md +291 -0
- package/workflows/context/auto-implement.md +211 -0
- package/workflows/context/codebase-sync.md +163 -0
- package/workflows/context/logic-reasoning-workflow.md +260 -0
- package/workflows/context/next.md +195 -0
- package/workflows/context/recap.md +212 -0
- package/workflows/context/save-brain.md +285 -0
- package/workflows/context/user-intent-analysis-workflow.md +206 -0
- package/workflows/expert/codeExpert.md +126 -0
- package/workflows/expert/debugExpert.md +136 -0
- package/workflows/expert/planExpert.md +112 -0
- package/workflows/git/cloudflare-tunnel.md +135 -0
- package/workflows/git/git-commit-workflow.md +75 -0
- package/workflows/git/hotfix.md +357 -0
- package/workflows/git/release-notes.md +160 -0
- package/workflows/git/rollback.md +52 -0
- package/workflows/git/smart-git-ops.md +103 -0
- package/workflows/lifecycle/brainstorm.md +377 -0
- package/workflows/lifecycle/code.md +663 -0
- package/workflows/lifecycle/debug.md +116 -0
- package/workflows/lifecycle/deploy.md +95 -0
- package/workflows/lifecycle/init.md +152 -0
- package/workflows/lifecycle/master-code-workflow.md +300 -0
- package/workflows/lifecycle/migration.md +196 -0
- package/workflows/lifecycle/plan.md +91 -0
- package/workflows/lifecycle/refactor.md +165 -0
- package/workflows/lifecycle/run.md +52 -0
- package/workflows/lifecycle/test.md +91 -0
- package/workflows/meta/customize.md +346 -0
- package/workflows/meta/file-protection-rules.md +129 -0
- package/workflows/meta/help.html +350 -0
- package/workflows/meta/project-identity-enforcement.md +180 -0
- package/workflows/mobile/app-analysis.md +64 -0
- package/workflows/mobile/maestro-qa-workflow.md +470 -0
- package/workflows/mobile/maestro-test-workflow.md +84 -0
- package/workflows/mobile/structure-clean-architect.md +271 -0
- package/workflows/mobile/turbo-mobile-build.md +190 -0
- package/workflows/quality/accessibility-audit.md +311 -0
- package/workflows/quality/audit.md +217 -0
- package/workflows/quality/bug-hunter.md +243 -0
- package/workflows/quality/code-janitor.md +209 -0
- package/workflows/quality/code-quality-rules.md +132 -0
- package/workflows/quality/performance-audit.md +343 -0
- package/workflows/quality/project-audit.md +61 -0
- package/workflows/quality/self-healing-test.md +192 -0
- package/workflows/quality/ui-review.md +130 -0
- package/workflows/quality/ux-audit.md +213 -0
- package/workflows/quality/visual-debug.md +34 -0
- package/workflows/roles/oracle.md +267 -0
- package/workflows/roles/product-manager-workflow.md +52 -0
- package/workflows/roles/qa-engineer-workflow.md +41 -0
- package/workflows/roles/tech-lead-workflow.md +45 -0
- package/workflows/roles/ui-ux-designer-workflow.md +42 -0
- package/workflows/roles/vibe-coding-master-workflow.md +52 -0
- package/workflows/ui/app-screen-analyzer.md +152 -0
- package/workflows/ui/create-feature.md +332 -0
- package/workflows/ui/create-spec-architect.md +184 -0
- package/workflows/ui/design-to-ui.md +308 -0
- package/workflows/ui/ui-first-methodology.md +279 -0
- package/workflows/ui/visualize.md +298 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 📱 Tích hợp Interstitial Ads vào APK mod - Tận dụng library có sẵn
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Smali Interstitial Ads Integration
|
|
6
|
+
|
|
7
|
+
> **🎯 Mục tiêu**: Tích hợp Interstitial Ads bằng cách tận dụng ads library có sẵn trong APK.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🔍 Phase 1: Discovery - Tìm Ads Library có sẵn
|
|
12
|
+
|
|
13
|
+
### 1.1. Scan toàn bộ cấu trúc
|
|
14
|
+
|
|
15
|
+
**Pattern 1: Tìm theo tên thư mục**
|
|
16
|
+
```bash
|
|
17
|
+
# Tìm các thư mục có chứa "ad"
|
|
18
|
+
find smali* -type d -iname "*ad*"
|
|
19
|
+
|
|
20
|
+
# Patterns thường gặp:
|
|
21
|
+
# - */ads/, */adslib/, */admanager/
|
|
22
|
+
# - */admob/, */admod/, */adsdk/
|
|
23
|
+
# - */advertisement/, */adnetwork/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Pattern 2: Tìm theo package Google**
|
|
27
|
+
```bash
|
|
28
|
+
# AdMob SDK chính thống
|
|
29
|
+
find smali* -path "*/com/google/android/gms/ads/*" -type d
|
|
30
|
+
|
|
31
|
+
# Firebase Ads
|
|
32
|
+
find smali* -path "*/com/google/firebase/ads/*" -type d
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Pattern 3: Tìm theo custom wrapper**
|
|
36
|
+
```bash
|
|
37
|
+
# Tìm trong package chính của app
|
|
38
|
+
find smali*/{main_package}/* -type d -iname "*ad*"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 1.2. Identify Interstitial Components
|
|
42
|
+
|
|
43
|
+
**Search Strategy:**
|
|
44
|
+
```bash
|
|
45
|
+
# Tìm file có chứa "Inter" và liên quan đến ad
|
|
46
|
+
find smali* -name "*Inter*.smali" | xargs grep -l "Lcom/google/android/gms/ads"
|
|
47
|
+
|
|
48
|
+
# Tìm theo keyword khác
|
|
49
|
+
find smali* -name "*.smali" | xargs grep -l "interstitial\|InterstitialAd"
|
|
50
|
+
|
|
51
|
+
# Tìm theo usage pattern
|
|
52
|
+
find smali* -name "*.smali" | xargs grep -l "loadInterstitialAd\|showInterstitialAd"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Common class names (chỉ tham khảo):**
|
|
56
|
+
- `*InterstitialAd*.smali`
|
|
57
|
+
- `*InterAd*.smali`
|
|
58
|
+
- `*FullscreenAd*.smali`
|
|
59
|
+
- `*AdManager*.smali` (có thể chứa inter logic)
|
|
60
|
+
|
|
61
|
+
### 1.3. Reverse Engineer Implementation
|
|
62
|
+
|
|
63
|
+
**Step 1: Jadx analysis**
|
|
64
|
+
```bash
|
|
65
|
+
jadx-gui target.apk
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Tìm kiếm:**
|
|
69
|
+
1. Search "InterstitialAd" trong jadx
|
|
70
|
+
2. Xem existing usage trong app
|
|
71
|
+
3. Document class hierarchy
|
|
72
|
+
4. Note down package structure
|
|
73
|
+
|
|
74
|
+
**Step 2: Document API**
|
|
75
|
+
```
|
|
76
|
+
[Findings Template]
|
|
77
|
+
|
|
78
|
+
Ads Library Location: smali_classes*/{discovered_path}/
|
|
79
|
+
Interstitial Class: {ClassName}.smali
|
|
80
|
+
Package: {full.package.name}
|
|
81
|
+
|
|
82
|
+
Methods Found:
|
|
83
|
+
- Constructor: <init>(...)
|
|
84
|
+
- Load: {methodName}(...)
|
|
85
|
+
- Show: {methodName}(...)
|
|
86
|
+
- Check Ready: {methodName}()
|
|
87
|
+
|
|
88
|
+
Callbacks:
|
|
89
|
+
- Interface: {CallbackInterfaceName}
|
|
90
|
+
- Methods: onAdLoaded(), onAdClosed(), etc.
|
|
91
|
+
|
|
92
|
+
Current Usage:
|
|
93
|
+
- Used in: {ActivityName}.smali
|
|
94
|
+
- Called from: {methodName}()
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 📦 Phase 2: API Analysis
|
|
100
|
+
|
|
101
|
+
### 2.1. Understand Method Signatures
|
|
102
|
+
|
|
103
|
+
**Sử dụng jadx để xem Java code:**
|
|
104
|
+
```java
|
|
105
|
+
// Example pattern (structure varies)
|
|
106
|
+
public class InterstitialAdHelper {
|
|
107
|
+
public void init(Context context, String adId);
|
|
108
|
+
public void loadAd();
|
|
109
|
+
public void show(Activity activity);
|
|
110
|
+
public boolean isReady();
|
|
111
|
+
public void setListener(AdListener listener);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Convert to Smali signatures:**
|
|
116
|
+
```smali
|
|
117
|
+
.method public init(Landroid/content/Context;Ljava/lang/String;)V
|
|
118
|
+
.method public loadAd()V
|
|
119
|
+
.method public show(Landroid/app/Activity;)V
|
|
120
|
+
.method public isReady()Z
|
|
121
|
+
.method public setListener(L{package}/AdListener;)V
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 2.2. Identify Dependencies
|
|
125
|
+
|
|
126
|
+
**Check AdMob presence:**
|
|
127
|
+
```bash
|
|
128
|
+
# Core AdMob classes
|
|
129
|
+
ls smali*/com/google/android/gms/ads/ 2>/dev/null
|
|
130
|
+
|
|
131
|
+
# If missing, need to copy from:
|
|
132
|
+
# - Another APK with AdMob
|
|
133
|
+
# - Extract from Google Play Services AAR
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Check custom wrappers:**
|
|
137
|
+
```bash
|
|
138
|
+
# Tìm dependency classes
|
|
139
|
+
grep -r "import.*AdRequest\|import.*InterstitialAd" smali*/ | head -20
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 🔧 Phase 3: Wrapper Creation
|
|
145
|
+
|
|
146
|
+
### 3.1. Tạo Wrapper Class (Option)
|
|
147
|
+
|
|
148
|
+
**Mục đích**: Standardize API để dễ sử dụng
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
{SDK_DIR}/ads/InterstitialWrapper.smali
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Chức năng:**
|
|
155
|
+
- Wrap existing library
|
|
156
|
+
- Handle lifecycle
|
|
157
|
+
- Provide clean API
|
|
158
|
+
- Manage ad caching
|
|
159
|
+
|
|
160
|
+
**Methods cần có:**
|
|
161
|
+
```
|
|
162
|
+
init(Context, String adId) → Initialize
|
|
163
|
+
load() → Load ad
|
|
164
|
+
show(Activity) → Show ad
|
|
165
|
+
isReady() → Check ready state
|
|
166
|
+
destroy() → Cleanup
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 3.2. State Management
|
|
170
|
+
|
|
171
|
+
**Track states:**
|
|
172
|
+
- `NOT_LOADED` - Chưa load
|
|
173
|
+
- `LOADING` - Đang load
|
|
174
|
+
- `LOADED` - Đã load, ready
|
|
175
|
+
- `SHOWING` - Đang hiển thị
|
|
176
|
+
- `CLOSED` - Đã đóng
|
|
177
|
+
|
|
178
|
+
**Implementation**: Dùng enum hoặc int constants
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 🎯 Phase 4: Integration Points
|
|
183
|
+
|
|
184
|
+
### 4.1. Load Ad - Khi nào?
|
|
185
|
+
|
|
186
|
+
**Strategy 1: Pre-load sớm**
|
|
187
|
+
```
|
|
188
|
+
Application.onCreate() → Load ad
|
|
189
|
+
Splash.onCreate() → Load ad
|
|
190
|
+
```
|
|
191
|
+
**Pros**: Ad sẵn sàng khi cần
|
|
192
|
+
**Cons**: Tốn resources nếu user không trigger
|
|
193
|
+
|
|
194
|
+
**Strategy 2: On-demand**
|
|
195
|
+
```
|
|
196
|
+
Before navigation → Load ad → Show ad
|
|
197
|
+
```
|
|
198
|
+
**Pros**: Tiết kiệm resources
|
|
199
|
+
**Cons**: Có delay khi show
|
|
200
|
+
|
|
201
|
+
### 4.2. Show Ad - Ở đâu?
|
|
202
|
+
|
|
203
|
+
**Theo `/smali-ads-flow`:**
|
|
204
|
+
- Sau Splash (first launch)
|
|
205
|
+
- Sau Onboarding (first launch)
|
|
206
|
+
- Random 3-5 lần (return visit)
|
|
207
|
+
|
|
208
|
+
**Implementation:**
|
|
209
|
+
```
|
|
210
|
+
Location: SplashActivity.navigateToMain()
|
|
211
|
+
Action: Insert show ad logic
|
|
212
|
+
→ if shouldShowAd():
|
|
213
|
+
→ interstitialWrapper.show(this)
|
|
214
|
+
→ onAdClosed: navigate to next screen
|
|
215
|
+
→ else:
|
|
216
|
+
→ navigate directly
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 4.3. Handle Callbacks
|
|
220
|
+
|
|
221
|
+
**OnAdClosed callback:**
|
|
222
|
+
- Navigate to next screen
|
|
223
|
+
- Resume app flow
|
|
224
|
+
- Load next ad (pre-cache)
|
|
225
|
+
|
|
226
|
+
**OnAdFailedToLoad:**
|
|
227
|
+
- Fallback: skip ad, continue flow
|
|
228
|
+
- Log error for debugging
|
|
229
|
+
- Retry với exponential backoff?
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 🔌 Phase 5: Hook Implementation
|
|
234
|
+
|
|
235
|
+
### 5.1. Hook Point Template
|
|
236
|
+
|
|
237
|
+
**Generic pattern:**
|
|
238
|
+
```smali
|
|
239
|
+
# Original code
|
|
240
|
+
.method private navigateToNextScreen()V
|
|
241
|
+
# ... navigation logic ...
|
|
242
|
+
.end method
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**After injection:**
|
|
246
|
+
```smali
|
|
247
|
+
.method private navigateToNextScreen()V
|
|
248
|
+
# Check if should show ad
|
|
249
|
+
invoke-static {p0}, {AdHelper};->shouldShowInterAd()Z
|
|
250
|
+
move-result v0
|
|
251
|
+
|
|
252
|
+
if-eqz v0, :skip_ad
|
|
253
|
+
|
|
254
|
+
# Show inter ad
|
|
255
|
+
invoke-static {p0}, {InterWrapper};->show(Activity)V
|
|
256
|
+
# Ad callback will handle navigation
|
|
257
|
+
return-void
|
|
258
|
+
|
|
259
|
+
:skip_ad
|
|
260
|
+
# Original navigation logic
|
|
261
|
+
# ...
|
|
262
|
+
.end method
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 5.2. Callback Handler
|
|
266
|
+
|
|
267
|
+
**Create callback class:**
|
|
268
|
+
```
|
|
269
|
+
{SDK_DIR}/ads/InterstitialCallback.smali
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Implement:**
|
|
273
|
+
```
|
|
274
|
+
onAdClosed() {
|
|
275
|
+
// Resume navigation
|
|
276
|
+
navigateToNextScreen()
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
onAdFailedToShow() {
|
|
280
|
+
// Fallback
|
|
281
|
+
navigateToNextScreen()
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## ✅ Phase 6: Testing & Validation
|
|
288
|
+
|
|
289
|
+
### 6.1. Functional Tests
|
|
290
|
+
|
|
291
|
+
| Test Case | Expected | Command |
|
|
292
|
+
|-----------|----------|---------|
|
|
293
|
+
| **Load Success** | Ad loads, isReady=true | Monitor logcat |
|
|
294
|
+
| **Show Success** | Ad displays fullscreen | Visual check |
|
|
295
|
+
| **Callback Fired** | onAdClosed called | Check logs |
|
|
296
|
+
| **Navigation** | Nav to next screen after ad | Flow test |
|
|
297
|
+
| **No Network** | Fallback, skip ad | Airplane mode test |
|
|
298
|
+
|
|
299
|
+
### 6.2. Integration Tests
|
|
300
|
+
|
|
301
|
+
**With `/smali-ads-flow`:**
|
|
302
|
+
- First launch: Show after Splash ✓
|
|
303
|
+
- First launch: Show after Onboarding ✓
|
|
304
|
+
- Return visit: Random 3-5 times ✓
|
|
305
|
+
|
|
306
|
+
### 6.3. Debug Commands
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# Monitor ad events
|
|
310
|
+
adb logcat | grep -E "InterstitialAd|AdMob|onAd"
|
|
311
|
+
|
|
312
|
+
# Test ad with test ID
|
|
313
|
+
# Replace ad unit ID with test ID:
|
|
314
|
+
# ca-app-pub-3940256099942544/1033173712 (Android Test Inter)
|
|
315
|
+
|
|
316
|
+
# Force show ad (for testing)
|
|
317
|
+
# Modify shouldShowInterAd() to always return true
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 📋 Implementation Checklist
|
|
323
|
+
|
|
324
|
+
### Discovery
|
|
325
|
+
- [ ] Tìm được ads library trong APK
|
|
326
|
+
- [ ] Xác định Interstitial class
|
|
327
|
+
- [ ] Document API methods
|
|
328
|
+
- [ ] Check dependencies đầy đủ
|
|
329
|
+
|
|
330
|
+
### Wrapper (Optional)
|
|
331
|
+
- [ ] Tạo wrapper class
|
|
332
|
+
- [ ] Implement init/load/show
|
|
333
|
+
- [ ] Handle state management
|
|
334
|
+
- [ ] Test wrapper riêng lẻ
|
|
335
|
+
|
|
336
|
+
### Integration
|
|
337
|
+
- [ ] Xác định hook points (từ `/smali-ads-flow`)
|
|
338
|
+
- [ ] Inject load ad logic
|
|
339
|
+
- [ ] Inject show ad logic
|
|
340
|
+
- [ ] Implement callbacks
|
|
341
|
+
|
|
342
|
+
### Testing
|
|
343
|
+
- [ ] Load ad thành công
|
|
344
|
+
- [ ] Show ad thành công
|
|
345
|
+
- [ ] Callback navigation đúng
|
|
346
|
+
- [ ] Fallback khi no network
|
|
347
|
+
- [ ] Integration với flow logic
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 🔗 Related Resources
|
|
352
|
+
|
|
353
|
+
### Workflows
|
|
354
|
+
- `/smali-ads-flow` - Main flow logic
|
|
355
|
+
- `/smali-ads-native` - Native ads
|
|
356
|
+
- `/smali-ads-config` - Remote config
|
|
357
|
+
|
|
358
|
+
### Skills
|
|
359
|
+
- `apk-modifier` - Smali techniques
|
|
360
|
+
|
|
361
|
+
### References
|
|
362
|
+
- [AdMob Interstitial Docs](https://developers.google.com/admob/android/interstitial)
|
|
363
|
+
- [AdMob Test Ads](https://developers.google.com/admob/android/test-ads)
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## 💡 Tips & Best Practices
|
|
368
|
+
|
|
369
|
+
1. **Reuse existing library**: Tận dụng library có sẵn thay vì viết từ đầu
|
|
370
|
+
2. **Test ID first**: Dùng test ad ID khi debug để tránh invalid traffic
|
|
371
|
+
3. **Fallback gracefully**: Luôn có fallback khi ad fail
|
|
372
|
+
4. **Pre-load smart**: Load ad sớm nhưng đừng lãng phí resources
|
|
373
|
+
5. **Respect ad policies**: Không force click, không spam ads
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
**⚠️ Quan trọng**: Tuân thủ AdMob policies để tránh bị ban account!
|