admanagekit-mcp-server 1.2.3 → 1.2.5
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/content/README.md +14 -8
- package/content/docs/release-notes/RELEASE_NOTES_v4.4.5.md +63 -0
- package/content/docs/release-notes/RELEASE_NOTES_v4.4.6.md +110 -0
- package/content/wiki/Ad-Loading-Strategies.md +1 -1
- package/content/wiki/App-Open-Ads.md +5 -5
- package/content/wiki/Banner-Ads.md +4 -4
- package/content/wiki/Billing-Integration.md +2 -2
- package/content/wiki/Configuration.md +1 -1
- package/content/wiki/Home.md +14 -7
- package/content/wiki/Interstitial-Ads.md +6 -6
- package/content/wiki/Jetpack-Compose.md +5 -5
- package/content/wiki/Multi-Provider-Waterfall.md +3 -3
- package/content/wiki/NativeAdManager.md +4 -4
- package/content/wiki/Yandex-Integration.md +3 -3
- package/package.json +1 -1
package/content/README.md
CHANGED
|
@@ -5,9 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
AdManageKit is a comprehensive Android library designed to simplify the integration and management of Google AdMob ads, Google Play Billing, and User Messaging Platform (UMP) consent.
|
|
7
7
|
|
|
8
|
-
**Latest Version `4.4.
|
|
8
|
+
**Latest Version `4.4.6`** is a **maintenance release**. No API changed and no library source file changed — the whole diff is dependencies and docs. It **downgrades** `androidx.work:work-runtime` **2.11.2 → 2.9.1**: WorkManager **2.10 and 2.11** call `JobScheduler.forNamespace` whenever `SDK_INT >= 34`, and modified or spoofed ROMs that report API 34 over an older framework have no such method — the `NoSuchMethodError` then kills the **whole process during bind** (`Unable to get provider androidx.startup.InitializationProvider`), because `androidx.startup` builds WorkManager in a `ContentProvider` installed before `Application.onCreate` runs. 2.9.1 is the last release without that call. AdManageKit has no WorkManager code of its own; the pin only steers the version the ads SDK pulls in, and since Gradle resolves the **highest** version in the graph, an app that declares 2.10/2.11 itself keeps the crash — pin `androidx.work:work-runtime:2.9.1` in your app too. Also picks up AGP **9.4.0**, Firebase BOM **34.19.0**, Compose BOM **2026.09.00** and Yandex Mobile Ads **8.4.0**. See [Release Notes v4.4.6](docs/release-notes/RELEASE_NOTES_v4.4.6.md).
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
**Version `4.4.5`** is a **patch release**. No API changed. It fixes a `BannerAdView` bug that renders a **blank banner slot inside Jetpack Compose**: swapping the shimmer placeholder for the loaded `AdView` raises an ordinary `requestLayout()`, which cannot cross Compose's `AndroidView` interop boundary once any ancestor already carries a pending layout flag — so Compose never re-measured the subtree and the freshly attached `AdView` was left at 0×0. The ad loaded, `onAdLoaded`/`onAdImpression` fired and the impression was **logged and billed**, but the slot stayed blank until a rotation or resize forced a full traversal. Both the AdMob and `BannerWaterfall` success paths now force the measure/layout pass themselves. Also picks up the Next-Gen GMA SDK **1.4.0**, AGP **9.3.2** and Firebase BOM **34.18.0**. See [Release Notes v4.4.5](docs/release-notes/RELEASE_NOTES_v4.4.5.md).
|
|
11
|
+
|
|
12
|
+
**Version `4.4.4`** is a **critical billing hotfix**. No API changed. It repairs a regression introduced in 4.4.3, where the Play Billing connection was never started at all: `connectToGooglePlayBilling()` guarded on `billingClient.isReady()`, which reports `true` the instant a client is built, so `startConnection(...)` was skipped on every fresh client. Setup never ran, no product details or entitlement were ever fetched, and there was **no failure callback and no error log** to explain it. **If you ship the billing module on 4.4.3, upgrade.** Also fixes a long-standing bug where a timed-out setup reported itself as initialized — permanently suppressing the host app's `if (!initBillingFinish) initBilling()` retry — and adds `DEBUG` logging across the billing connection lifecycle. See [Release Notes v4.4.4](docs/release-notes/RELEASE_NOTES_v4.4.4.md).
|
|
13
|
+
|
|
14
|
+
> ⚠️ **4.4.3 is superseded.** Its billing regression makes purchases unusable; use 4.4.4 or newer.
|
|
11
15
|
|
|
12
16
|
**Version `4.4.3`** is a bug-fix and dependency release. No API changed. Two silent-failure bugs are fixed, both of which cost money: a **rewarded load the manager had given up on could sabotage the load that replaced it** — discarding an ad a newer load had just delivered, and clearing the "loading" flag out from under a request still in flight — and **billing could stop acknowledging purchases for the rest of the process**, which lets Play auto-refund a completed purchase on day 3. Acknowledgment also no longer requires the purchase to match a configured product id. Picks up the Next-Gen GMA SDK **1.3.1**, Yandex Mobile Ads **8.3.0**, and refreshed AndroidX/Firebase/Compose BOMs. See [Release Notes v4.4.3](docs/release-notes/RELEASE_NOTES_v4.4.3.md).
|
|
13
17
|
|
|
@@ -35,7 +39,7 @@ Since **4.2.0** the library runs on the Google Mobile Ads **Next-Gen SDK** (`ads
|
|
|
35
39
|
|
|
36
40
|
## Next-Gen GMA SDK
|
|
37
41
|
|
|
38
|
-
As of v4.2.0, AdManageKit runs on Google's **Next-Gen Google Mobile Ads SDK** (`com.google.android.libraries.ads.mobile.sdk`, stable `1.
|
|
42
|
+
As of v4.2.0, AdManageKit runs on Google's **Next-Gen Google Mobile Ads SDK** (`com.google.android.libraries.ads.mobile.sdk`, stable `1.4.0` as of 4.4.6) instead of the legacy `com.google.android.gms:play-services-ads`. This isn't a branch or an opt-in — it's the only version of AdManageKit going forward.
|
|
39
43
|
|
|
40
44
|
### Why the move
|
|
41
45
|
|
|
@@ -199,15 +203,15 @@ dependencyResolutionManagement {
|
|
|
199
203
|
**Step 2:** Add dependencies to your app's `build.gradle`:
|
|
200
204
|
|
|
201
205
|
```groovy
|
|
202
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
203
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.
|
|
204
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
206
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.6'
|
|
207
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.6'
|
|
208
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.6'
|
|
205
209
|
|
|
206
210
|
// For Jetpack Compose support
|
|
207
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.
|
|
211
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.6'
|
|
208
212
|
|
|
209
213
|
// For Yandex Ads multi-provider support
|
|
210
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.
|
|
214
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.6'
|
|
211
215
|
```
|
|
212
216
|
|
|
213
217
|
**Step 3:** Ensure your app's `compileSdk` is **37 or higher** (required transitively as of 4.2.0).
|
|
@@ -781,6 +785,8 @@ Register it **before** `initBilling`. Products land in `unfetched` when the id i
|
|
|
781
785
|
- [Multi-Provider Waterfall](docs/MULTI_PROVIDER_WATERFALL.md)
|
|
782
786
|
- [Yandex Integration](docs/YANDEX_INTEGRATION.md)
|
|
783
787
|
- [Billing Integration Guide](docs/APP_PURCHASE_GUIDE.md)
|
|
788
|
+
- [Release Notes v4.4.6](docs/release-notes/RELEASE_NOTES_v4.4.6.md)
|
|
789
|
+
- [Release Notes v4.4.5](docs/release-notes/RELEASE_NOTES_v4.4.5.md)
|
|
784
790
|
- [Release Notes v4.4.4](docs/release-notes/RELEASE_NOTES_v4.4.4.md)
|
|
785
791
|
- [Release Notes v4.4.3](docs/release-notes/RELEASE_NOTES_v4.4.3.md)
|
|
786
792
|
- [Release Notes v4.4.2](docs/release-notes/RELEASE_NOTES_v4.4.2.md)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Release Notes — v4.4.5
|
|
2
|
+
|
|
3
|
+
**Release Date:** 2026-08-27
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
v4.4.5 is a **patch release**. No API was added, removed or changed.
|
|
8
|
+
|
|
9
|
+
It fixes a `BannerAdView` bug that renders a **blank banner slot inside Jetpack Compose**: the ad loads, reports success, logs its impression — and nothing is drawn, because the freshly attached `AdView` is left measured at 0×0. It also picks up the Google Mobile Ads Next-Gen SDK **1.4.0**, AGP **9.3.2** and Firebase BOM **34.18.0**.
|
|
10
|
+
|
|
11
|
+
Upgrading is a drop-in from 4.4.x.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Fixed
|
|
16
|
+
|
|
17
|
+
### Banner ad loaded but rendered blank under Compose interop
|
|
18
|
+
|
|
19
|
+
`BannerAdView` builds its slot as a shimmer placeholder, then swaps in the real `AdView` when the load succeeds — `layBannerAd.removeAllViews()`, `addView(adView, ...)`, hide the shimmer. Swapping the children of a `ViewGroup` raises an ordinary `requestLayout()`, and in a plain View hierarchy that is enough.
|
|
20
|
+
|
|
21
|
+
Inside Compose's `AndroidView` interop it is not. `View.requestLayout()` only walks up while each ancestor reports `isLayoutRequested == false`; the moment one already carries a pending layout flag, propagation stops there. For an interop subtree the request has to reach `AndroidViewsHandler` — the **only** place that turns a View layout request into a `LayoutNode.requestRemeasure()`. If any ancestor on the way up (the `ViewFactoryHolder` included) is already flagged, the request dies below that point and Compose never re-measures the subtree.
|
|
22
|
+
|
|
23
|
+
The consequence is that the banner keeps the measurement it had while the shimmer was mounted, and the `AdView` attached after that pass is never measured at all:
|
|
24
|
+
|
|
25
|
+
- the ad loads successfully, `onAdLoaded` and `onAdImpression` both fire
|
|
26
|
+
- the impression is logged and billed
|
|
27
|
+
- the slot renders **blank** — the container is still sized for the shimmer, the ad view is 0×0
|
|
28
|
+
- it stays blank until something unrelated forces a full traversal (a rotation, a keyboard, a resize)
|
|
29
|
+
|
|
30
|
+
Recomposition does not rescue it either: a semantics or `testTag` change does not invalidate measurement.
|
|
31
|
+
|
|
32
|
+
Both success paths — the AdMob path (`handleAdLoadSuccess`) and the multi-provider `BannerWaterfall` path (`onBannerLoaded`) — now call a new private `forceRelayoutAfterAdSwap()` after the swap. It walks up from the banner flagging each ancestor with `forceLayout()` (which makes `View.measure()` re-run even when the `MeasureSpec`s are unchanged — exactly what a swapped-in child needs), stopping at Compose's interop holder when there is one, and then requests the layout from **above** that holder, where `AndroidViewsHandler.requestLayout()` sees `child.isLayoutRequested == true` and schedules the remeasure. With no Compose holder in the chain, normal propagation works once the chain is flagged and a plain `requestLayout()` is issued.
|
|
33
|
+
|
|
34
|
+
Because a request raised while a layout pass is already running can still be dropped (`ViewRootImpl.requestLayoutDuringLayout`), the pass is repeated once on the next frame via `post { ... }`, which also logs the resulting container and ad-view dimensions through `AdDebugUtils` for diagnosis.
|
|
35
|
+
|
|
36
|
+
There is no behavior change for banners hosted in XML — the extra pass is a no-op when the layout is already correct.
|
|
37
|
+
|
|
38
|
+
## Changed
|
|
39
|
+
|
|
40
|
+
- **Dependency updates:** Google Mobile Ads Next-Gen SDK **1.3.1 → 1.4.0**, Android Gradle Plugin **9.3.0 → 9.3.2**, Firebase BOM **34.17.0 → 34.18.0**, org.json (test only) **20260719 → 20260814**. Play Billing stays at **9.1.0**, Kotlin at **2.2.10**, Yandex Mobile Ads at **8.3.0**, Compose BOM at **2026.08.00**
|
|
41
|
+
|
|
42
|
+
## Notes
|
|
43
|
+
|
|
44
|
+
- The fix is not test-covered: it depends on a real Compose interop measure/layout traversal, which the Robolectric harness cannot drive faithfully. It was verified on-device against a Compose-hosted banner slot. The existing 176 tests are unaffected
|
|
45
|
+
- No billing changes in this release
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Upgrading
|
|
50
|
+
|
|
51
|
+
```gradle
|
|
52
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
53
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.5'
|
|
54
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
55
|
+
|
|
56
|
+
// For Jetpack Compose support
|
|
57
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.5'
|
|
58
|
+
|
|
59
|
+
// For Yandex Ads multi-provider support
|
|
60
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.5'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
No code changes are required.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Release Notes — v4.4.6
|
|
2
|
+
|
|
3
|
+
**Release Date:** 2026-09-14
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
v4.4.6 is a **maintenance release**. No API was added, removed or changed, and **no library source file changed** — the entire diff is `gradle/libs.versions.toml`, the five publication blocks, and documentation.
|
|
8
|
+
|
|
9
|
+
The one change worth reading is a deliberate **downgrade** of WorkManager to **2.9.1**. WorkManager 2.10 and 2.11 call `JobScheduler.forNamespace` on any device reporting `SDK_INT >= 34`; on modified or spoofed ROMs that report API 34 over an older framework the method is absent, and the resulting `NoSuchMethodError` kills the process at startup via `androidx.startup`'s `WorkManagerInitializer`. 2.9.1 is the last release without that call. It also picks up AGP **9.4.0**, Firebase BOM **34.19.0**, Compose BOM **2026.09.00** and Yandex Mobile Ads **8.4.0**.
|
|
10
|
+
|
|
11
|
+
Upgrading is a drop-in from 4.4.x.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Changed
|
|
16
|
+
|
|
17
|
+
### WorkManager pinned back to 2.9.1 (a downgrade, on purpose)
|
|
18
|
+
|
|
19
|
+
`androidx.work:work-runtime` moves **2.11.2 → 2.9.1**. This is the only dependency in the catalog moving backwards, and it is intentional.
|
|
20
|
+
|
|
21
|
+
**The defect.** WorkManager **2.10 and 2.11** call `android.app.job.JobScheduler.forNamespace` whenever `Build.VERSION.SDK_INT >= 34`. That method genuinely exists on API 34 — but modified and spoofed ROMs that *report* API 34 while running an older framework underneath do not have it. Constructing the WorkManager singleton on such a device throws `NoSuchMethodError`.
|
|
22
|
+
|
|
23
|
+
That throw is fatal rather than merely inconvenient because `androidx.startup` auto-initializes WorkManager through `WorkManagerInitializer`, which runs from `InitializationProvider` — a `ContentProvider`. `ActivityThread.handleBindApplication` installs content providers **after** `Application.attachBaseContext` but **before** `Application.onCreate`, so there is no user code on the stack to catch it and nothing in the app has run yet. The process dies during bind:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Fatal Exception: java.lang.RuntimeException: Unable to get provider
|
|
27
|
+
androidx.startup.InitializationProvider: java.lang.NoSuchMethodError:
|
|
28
|
+
No virtual method forNamespace(Ljava/lang/String;)Landroid/app/job/JobScheduler;
|
|
29
|
+
in class Landroid/app/job/JobScheduler; or its super classes
|
|
30
|
+
(declaration of 'android.app.job.JobScheduler' appears in /system/framework/framework.jar)
|
|
31
|
+
at android.app.ActivityThread.installProvider(ActivityThread.java:7467)
|
|
32
|
+
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6973)
|
|
33
|
+
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6744)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
In a minified build the `StartupException` between the two appears under its obfuscated name (`y40:` or similar), so match on the `InitializationProvider` + `forNamespace` pair rather than on the middle frame. `declaration ... appears in /system/framework/framework.jar` is the confirmation that the device's framework really is older than the API level it advertises.
|
|
37
|
+
|
|
38
|
+
**2.9.1 is the last release without that call**, which is why the pin lands exactly there rather than at some newer 2.10.x or 2.11.x patch — the call is present throughout both lines.
|
|
39
|
+
|
|
40
|
+
**This is a host-device problem, not an ads problem.** No source file in any of AdManageKit's five modules references `androidx.work`. The dependency is declared purely to control which version lands in the graph — the Next-Gen GMA SDK asks for `work-runtime:2.7.0` transitively, and this entry is what decides where that resolves. The downgrade changes nothing about the library's behavior, surface, or minimum requirements; it only moves a pin.
|
|
41
|
+
|
|
42
|
+
**The pin does not override your app.** It is an `implementation` dependency, so it lands in the published POM at `runtime` scope, and Gradle's conflict resolution still picks the **highest** version across the whole graph. If your app declares 2.10 or 2.11 directly, or depends on anything that does, you resolve that version and you keep the crash. Check what you actually resolve:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep androidx.work
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
If that shows 2.10.x or 2.11.x and you are seeing `NoSuchMethodError` on `JobScheduler.forNamespace` in your startup crash reports, pin it in the app as well:
|
|
49
|
+
|
|
50
|
+
```kotlin
|
|
51
|
+
dependencies {
|
|
52
|
+
implementation("androidx.work:work-runtime:2.9.1")
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**If you need 2.10+ APIs**, do not downgrade your app to match the library. Take the auto-initializer out of the startup path instead, so a failure is catchable rather than fatal — remove `WorkManagerInitializer` in the manifest and initialize WorkManager yourself inside a guard:
|
|
57
|
+
|
|
58
|
+
```xml
|
|
59
|
+
<provider
|
|
60
|
+
android:name="androidx.startup.InitializationProvider"
|
|
61
|
+
android:authorities="${applicationId}.androidx-startup"
|
|
62
|
+
tools:node="merge">
|
|
63
|
+
<meta-data
|
|
64
|
+
android:name="androidx.work.WorkManagerInitializer"
|
|
65
|
+
android:value="androidx.startup"
|
|
66
|
+
tools:node="remove" />
|
|
67
|
+
</provider>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Then have your `Application` implement `androidx.work.Configuration.Provider`. WorkManager falls back to on-demand initialization at the first `WorkManager.getInstance(context)` call — which happens on your own thread, in your own code, where a `NoSuchMethodError` can be caught and degrade that one feature instead of killing the process. Nothing in AdManageKit depends on which version resolves, or on WorkManager being initialized at all.
|
|
71
|
+
|
|
72
|
+
### Other dependency updates
|
|
73
|
+
|
|
74
|
+
- Android Gradle Plugin **9.3.2 → 9.4.0**
|
|
75
|
+
- Firebase BOM **34.18.0 → 34.19.0**
|
|
76
|
+
- Compose BOM **2026.08.00 → 2026.09.00**
|
|
77
|
+
- Yandex Mobile Ads **8.3.0 → 8.4.0**
|
|
78
|
+
- Robolectric (test only) **4.16.1 → 4.17**
|
|
79
|
+
|
|
80
|
+
Unchanged: Google Mobile Ads Next-Gen SDK **1.4.0**, Play Billing **9.1.0**, Kotlin **2.2.10**, UMP **4.0.0**, Compose compiler **1.5.8**.
|
|
81
|
+
|
|
82
|
+
## Fixed
|
|
83
|
+
|
|
84
|
+
### A stray leading space in the `workRuntime` catalog entry
|
|
85
|
+
|
|
86
|
+
The downgraded version was written as `" 2.9.1"` — with a leading space. Gradle does not trim version strings, so it treats that as a distinct and unresolvable coordinate rather than 2.9.1. Caught before tagging; the published 4.4.6 resolves `androidx.work:work-runtime:2.9.1` cleanly, verified against `:AdManageKit:dependencies`.
|
|
87
|
+
|
|
88
|
+
## Notes
|
|
89
|
+
|
|
90
|
+
- No behavioral change in any ad, billing, consent or waterfall path. The existing 176 tests pass unchanged
|
|
91
|
+
- Robolectric stays pinned to SDK 35 via `robolectric.properties`; the 4.17 bump does not change that
|
|
92
|
+
- There is nothing to migrate — upgrading is a one-line version bump from 4.4.5
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Upgrading
|
|
97
|
+
|
|
98
|
+
```gradle
|
|
99
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.6'
|
|
100
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.6'
|
|
101
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.6'
|
|
102
|
+
|
|
103
|
+
// For Jetpack Compose support
|
|
104
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.6'
|
|
105
|
+
|
|
106
|
+
// For Yandex Ads multi-provider support
|
|
107
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.6'
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
No code changes are required.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# App Open Ads - AdManageKit v4.4.
|
|
1
|
+
# App Open Ads - AdManageKit v4.4.5
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
5
|
AdManageKit provides lifecycle-aware app open ad management through `AppOpenManager`. App open ads display when users launch or return to your app, with support for loading strategies, ad freshness enforcement, welcome dialogs, activity/screen exclusion, and the multi-provider waterfall.
|
|
6
6
|
|
|
7
|
-
**Library Version**: v4.4.
|
|
7
|
+
**Library Version**: v4.4.5
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
@@ -23,9 +23,9 @@ AdManageKit provides lifecycle-aware app open ad management through `AppOpenMana
|
|
|
23
23
|
|
|
24
24
|
```groovy
|
|
25
25
|
dependencies {
|
|
26
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
27
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.
|
|
28
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
26
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
27
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.5'
|
|
28
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
29
29
|
}
|
|
30
30
|
```
|
|
31
31
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# Banner Ads - AdManageKit v4.4.
|
|
1
|
+
# Banner Ads - AdManageKit v4.4.5
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
5
|
AdManageKit provides `BannerAdView` for banner ad integration with every standard AdMob size, adaptive banners, collapsible banners, a size-aware loading shimmer, auto-refresh, and smart retry logic.
|
|
6
6
|
|
|
7
|
-
**Library Version**: v4.4.
|
|
7
|
+
**Library Version**: v4.4.5
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
@@ -23,8 +23,8 @@ AdManageKit provides `BannerAdView` for banner ad integration with every standar
|
|
|
23
23
|
|
|
24
24
|
```groovy
|
|
25
25
|
dependencies {
|
|
26
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
27
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
26
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
27
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
28
28
|
}
|
|
29
29
|
```
|
|
30
30
|
|
|
@@ -7,8 +7,8 @@ AdManageKit provides a comprehensive billing integration module (`admanagekit-bi
|
|
|
7
7
|
### 1. Add Dependency
|
|
8
8
|
|
|
9
9
|
```groovy
|
|
10
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.
|
|
11
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
10
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.5'
|
|
11
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
### 2. Define Products
|
package/content/wiki/Home.md
CHANGED
|
@@ -6,7 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
AdManageKit is a comprehensive Android library designed to simplify the integration and management of Google AdMob ads, Google Play Billing, and User Messaging Platform (UMP) consent.
|
|
8
8
|
|
|
9
|
-
**Latest Version: `4.4.
|
|
9
|
+
**Latest Version: `4.4.5`**
|
|
10
|
+
|
|
11
|
+
## What's New in 4.4.5
|
|
12
|
+
|
|
13
|
+
Patch release, no API changes.
|
|
14
|
+
|
|
15
|
+
- **A banner loaded successfully but rendered blank under Compose** — `BannerAdView` swaps the shimmer placeholder for the loaded `AdView`, which raises an ordinary `requestLayout()`. That request cannot cross Compose's `AndroidView` interop boundary once any ancestor already carries a pending layout flag, so Compose never re-measured the subtree and the freshly attached `AdView` was left at 0×0. The ad loaded, `onAdLoaded`/`onAdImpression` fired and the impression was logged and billed, but the slot stayed blank until a rotation or resize forced a full traversal. Both the AdMob and `BannerWaterfall` success paths now force the measure/layout pass themselves; XML-hosted banners are unaffected
|
|
16
|
+
- **Dependencies** — Next-Gen GMA SDK 1.4.0, Android Gradle Plugin 9.3.2, Firebase BOM 34.18.0
|
|
10
17
|
|
|
11
18
|
## What's New in 4.4.4
|
|
12
19
|
|
|
@@ -20,7 +27,7 @@ Critical billing hotfix, no API changes. **If you ship the billing module on 4.4
|
|
|
20
27
|
|
|
21
28
|
Bug-fix and dependency release, no API changes. Two silent-failure bugs, both of which cost money.
|
|
22
29
|
|
|
23
|
-
> ⚠️ 4.4.3's billing regression makes purchases unusable — use 4.4.4.
|
|
30
|
+
> ⚠️ 4.4.3's billing regression makes purchases unusable — use 4.4.4 or newer.
|
|
24
31
|
|
|
25
32
|
- **A timed-out rewarded load could sabotage the one that replaced it** — a request handed to the SDK cannot be cancelled, and when it finally reported back it could discard an ad a *newer* load had just delivered, clear the loading flag out from under a request still in flight, and fail callers waiting on a load that had not finished. Every load path now carries a generation token, and a late ad is kept for the next show instead of dropped
|
|
26
33
|
- **Billing could stop acknowledging purchases for the rest of the process** — the connection flag could latch `false` after one disconnect while the client was actually ready, disabling every purchase re-query including the acknowledgment retry. Play auto-refunds an unacknowledged purchase after 3 days
|
|
@@ -94,15 +101,15 @@ dependencyResolutionManagement {
|
|
|
94
101
|
**Step 2:** Add dependencies to your app's `build.gradle`:
|
|
95
102
|
|
|
96
103
|
```groovy
|
|
97
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
98
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.
|
|
99
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
104
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
105
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.5'
|
|
106
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
100
107
|
|
|
101
108
|
// For Jetpack Compose support
|
|
102
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.
|
|
109
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.5'
|
|
103
110
|
|
|
104
111
|
// For Yandex Ads multi-provider support
|
|
105
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.
|
|
112
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.5'
|
|
106
113
|
```
|
|
107
114
|
|
|
108
115
|
**Step 3:** Ensure your app's `compileSdk` is **37 or higher** (required transitively as of 4.2.0).
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# Interstitial Ads - AdManageKit v4.4.
|
|
1
|
+
# Interstitial Ads - AdManageKit v4.4.5
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
5
|
AdManageKit provides a complete interstitial ad stack with `AdManager` and the fluent `InterstitialAdBuilder`. Features include loading strategies, automatic retry, frequency controls, splash screen support, and Jetpack Compose utilities.
|
|
6
6
|
|
|
7
|
-
**Library Version**: v4.4.
|
|
7
|
+
**Library Version**: v4.4.5
|
|
8
8
|
|
|
9
9
|
## What's New
|
|
10
10
|
|
|
@@ -23,11 +23,11 @@ AdManageKit provides a complete interstitial ad stack with `AdManager` and the f
|
|
|
23
23
|
|
|
24
24
|
```groovy
|
|
25
25
|
dependencies {
|
|
26
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
27
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
28
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.
|
|
26
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
27
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
28
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.5'
|
|
29
29
|
// Optional - Jetpack Compose
|
|
30
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.
|
|
30
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.5'
|
|
31
31
|
}
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
# Jetpack Compose Integration - AdManageKit v4.4.
|
|
1
|
+
# Jetpack Compose Integration - AdManageKit v4.4.5
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
5
|
AdManageKit provides first-class Jetpack Compose support with composable functions for all ad types, state management helpers, and programmatic native ad loading.
|
|
6
6
|
|
|
7
|
-
**Library Version**: v4.4.
|
|
7
|
+
**Library Version**: v4.4.5
|
|
8
8
|
|
|
9
9
|
## Installation
|
|
10
10
|
|
|
11
11
|
```groovy
|
|
12
12
|
dependencies {
|
|
13
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
14
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
15
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.
|
|
13
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
14
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
15
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.5'
|
|
16
16
|
}
|
|
17
17
|
```
|
|
18
18
|
|
|
@@ -38,11 +38,11 @@ This is fully backward compatible -- if no provider chains are configured, all e
|
|
|
38
38
|
|
|
39
39
|
```groovy
|
|
40
40
|
dependencies {
|
|
41
|
-
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
42
|
-
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
41
|
+
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5"
|
|
42
|
+
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5"
|
|
43
43
|
|
|
44
44
|
// Add Yandex provider
|
|
45
|
-
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.
|
|
45
|
+
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.5"
|
|
46
46
|
}
|
|
47
47
|
```
|
|
48
48
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# Native Ads - AdManageKit v4.4.
|
|
1
|
+
# Native Ads - AdManageKit v4.4.5
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
5
|
AdManageKit provides comprehensive native ad support with caching, multiple formats, and the new `NativeTemplateView` (v2.6.0+). Native ads blend seamlessly with your app's content while maximizing engagement.
|
|
6
6
|
|
|
7
|
-
**Library Version**: v4.4.
|
|
7
|
+
**Library Version**: v4.4.5
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
@@ -19,8 +19,8 @@ AdManageKit provides comprehensive native ad support with caching, multiple form
|
|
|
19
19
|
|
|
20
20
|
```groovy
|
|
21
21
|
dependencies {
|
|
22
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
23
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
22
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
23
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
24
24
|
}
|
|
25
25
|
```
|
|
26
26
|
|
|
@@ -10,9 +10,9 @@ The `admanagekit-yandex` module provides Yandex Ads SDK providers for the multi-
|
|
|
10
10
|
|
|
11
11
|
```groovy
|
|
12
12
|
dependencies {
|
|
13
|
-
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
14
|
-
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
15
|
-
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.
|
|
13
|
+
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5"
|
|
14
|
+
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5"
|
|
15
|
+
implementation "com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.5"
|
|
16
16
|
}
|
|
17
17
|
```
|
|
18
18
|
|