admanagekit-mcp-server 1.2.2 → 1.2.4
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 +15 -7
- package/content/docs/release-notes/RELEASE_NOTES_v4.4.4.md +85 -0
- package/content/docs/release-notes/RELEASE_NOTES_v4.4.5.md +63 -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 +23 -6
- 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,7 +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.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).
|
|
9
|
+
|
|
10
|
+
**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).
|
|
11
|
+
|
|
12
|
+
> ⚠️ **4.4.3 is superseded.** Its billing regression makes purchases unusable; use 4.4.4 or newer.
|
|
13
|
+
|
|
14
|
+
**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).
|
|
9
15
|
|
|
10
16
|
**Version `4.4.2`** is a bug-fix release. No API changed, but several fixes are user-visible and two affect revenue: rewarded ads could **crash the app** (every show-path callback, including `onRewardEarned`, was delivered on a background thread), a **completed purchase could fail to disable ads** until the next launch, **blank gaps** were left where banner/native slots should have collapsed for premium users and after failed loads (in both XML and Compose), and app open ads could appear over screens excluded via `disableAppOpenAdsTemporarily()`. Also fixes a `BannerAdView` leak that kept requesting ads after detach. Two deliberate behavior changes: an account-hold subscription no longer disables ads, and premium users no longer reserve ad space in Compose. See [Release Notes v4.4.2](docs/release-notes/RELEASE_NOTES_v4.4.2.md).
|
|
11
17
|
|
|
@@ -31,7 +37,7 @@ Since **4.2.0** the library runs on the Google Mobile Ads **Next-Gen SDK** (`ads
|
|
|
31
37
|
|
|
32
38
|
## Next-Gen GMA SDK
|
|
33
39
|
|
|
34
|
-
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.
|
|
40
|
+
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.5) 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.
|
|
35
41
|
|
|
36
42
|
### Why the move
|
|
37
43
|
|
|
@@ -195,15 +201,15 @@ dependencyResolutionManagement {
|
|
|
195
201
|
**Step 2:** Add dependencies to your app's `build.gradle`:
|
|
196
202
|
|
|
197
203
|
```groovy
|
|
198
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
199
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.
|
|
200
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.
|
|
204
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.5'
|
|
205
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.5'
|
|
206
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.5'
|
|
201
207
|
|
|
202
208
|
// For Jetpack Compose support
|
|
203
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.
|
|
209
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.5'
|
|
204
210
|
|
|
205
211
|
// For Yandex Ads multi-provider support
|
|
206
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.
|
|
212
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.5'
|
|
207
213
|
```
|
|
208
214
|
|
|
209
215
|
**Step 3:** Ensure your app's `compileSdk` is **37 or higher** (required transitively as of 4.2.0).
|
|
@@ -777,6 +783,8 @@ Register it **before** `initBilling`. Products land in `unfetched` when the id i
|
|
|
777
783
|
- [Multi-Provider Waterfall](docs/MULTI_PROVIDER_WATERFALL.md)
|
|
778
784
|
- [Yandex Integration](docs/YANDEX_INTEGRATION.md)
|
|
779
785
|
- [Billing Integration Guide](docs/APP_PURCHASE_GUIDE.md)
|
|
786
|
+
- [Release Notes v4.4.5](docs/release-notes/RELEASE_NOTES_v4.4.5.md)
|
|
787
|
+
- [Release Notes v4.4.4](docs/release-notes/RELEASE_NOTES_v4.4.4.md)
|
|
780
788
|
- [Release Notes v4.4.3](docs/release-notes/RELEASE_NOTES_v4.4.3.md)
|
|
781
789
|
- [Release Notes v4.4.2](docs/release-notes/RELEASE_NOTES_v4.4.2.md)
|
|
782
790
|
- [Release Notes v4.4.1](docs/release-notes/RELEASE_NOTES_v4.4.1.md)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Release Notes — v4.4.4
|
|
2
|
+
|
|
3
|
+
**Release Date:** 2026-08-15
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
v4.4.4 is a **critical billing hotfix**. No API was added, removed or changed.
|
|
8
|
+
|
|
9
|
+
It repairs a regression introduced in **v4.4.3**: on that version the Play Billing connection is never started at all, so billing is dead for the life of the process — no product details, no offers, no entitlement, and no error anywhere to explain it. **Anyone on 4.4.3 who ships the billing module should upgrade immediately.**
|
|
10
|
+
|
|
11
|
+
It also fixes a long-standing bug where a billing setup that *timed out* reported itself as initialized, which permanently suppressed the host app's retry.
|
|
12
|
+
|
|
13
|
+
Upgrading is a drop-in from 4.4.x.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Fixed
|
|
18
|
+
|
|
19
|
+
### Billing never connected on 4.4.3 (regression)
|
|
20
|
+
|
|
21
|
+
v4.4.3 replaced the latched `isServiceConnected` flag with the client's own `billingClient.isReady()` everywhere, to stop `enableAutoServiceReconnection()` from leaving re-queries permanently disabled. That was right for the *re-query* paths — but it was also applied to `connectToGooglePlayBilling()`, which is the path that starts the connection in the first place:
|
|
22
|
+
|
|
23
|
+
```java
|
|
24
|
+
// 4.4.3
|
|
25
|
+
if (!isClientReady()) { // isReady() is already true on a fresh client
|
|
26
|
+
billingClient.startConnection(...);
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Since `enableAutoServiceReconnection()` was added, a `BillingClient` reports `isReady() == true` **the instant it is built**, before any setup has run. So the guard was false on every fresh client and `startConnection(...)` was skipped:
|
|
31
|
+
|
|
32
|
+
- setup never began, so **neither branch of `onBillingSetupFinished` ever fired**
|
|
33
|
+
- `isBillingAvailable` and `isBillingInitialized` stayed `false`
|
|
34
|
+
- `queryProductDetails(...)` and `verifyPurchased(...)` — both invoked from the success branch — never ran, so `productDetailsMap` stayed empty
|
|
35
|
+
- `isAvailable()` returned `false` forever, and `setBillingListener(...)` only ever reported `SERVICE_TIMEOUT`
|
|
36
|
+
|
|
37
|
+
The user-visible result is a paywall that renders no prices and a purchase flow that cannot be launched, with **no failure callback and no error log** to point at the cause.
|
|
38
|
+
|
|
39
|
+
`connectToGooglePlayBilling()` now guards on `isServiceConnected` — our own flag, written only by `onBillingSetupFinished` and cleared by `onBillingServiceDisconnected` — which is the right question for "has setup run?", as distinct from "can the client serve a call right now?" that `isClientReady()` answers for the re-query paths. Those paths are unchanged from 4.4.3 and keep the acknowledgment fix intact.
|
|
40
|
+
|
|
41
|
+
> Both flags are load-bearing and they are not interchangeable: `isServiceConnected` guards *starting* the connection, `isClientReady()` guards *using* it.
|
|
42
|
+
|
|
43
|
+
### A timed-out billing setup reported itself as initialized
|
|
44
|
+
|
|
45
|
+
In `setBillingListener(listener, timeout)`, the timeout runnable set `isBillingInitialized = TRUE` before delivering `SERVICE_TIMEOUT`:
|
|
46
|
+
|
|
47
|
+
```java
|
|
48
|
+
// before
|
|
49
|
+
this.isBillingInitialized = Boolean.TRUE;
|
|
50
|
+
billingListener.onInitBillingFinished(BillingClient.BillingResponseCode.SERVICE_TIMEOUT);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
That path means Play did **not** answer in time — setup did not finish. It is the same outcome the `onBillingSetupFinished` failure branch reports, and that branch sets `FALSE`.
|
|
54
|
+
|
|
55
|
+
Reporting `TRUE` told every caller billing was up when it was not. The common host-app guard —
|
|
56
|
+
|
|
57
|
+
```kotlin
|
|
58
|
+
if (!AppPurchase.getInstance().initBillingFinish) { /* retry init */ }
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
— went permanently quiet, so a connection that timed out once could never be retried for the life of the process, and screens rendered "no offers" for what was really a dead client. It now sets `FALSE`. The listener still receives `SERVICE_TIMEOUT` either way, so callers that only wait on the callback are unaffected.
|
|
62
|
+
|
|
63
|
+
This bug predates 4.4.3 (it dates to the June 2026 billing listener work) but was largely masked until the regression above made timeouts the normal outcome.
|
|
64
|
+
|
|
65
|
+
## Changed
|
|
66
|
+
|
|
67
|
+
- **Billing connection lifecycle logging.** `initBilling`, `connectToGooglePlayBilling`, `onBillingSetupFinished` and `onBillingServiceDisconnected` now log their state at `DEBUG` (`Log.d`) under the existing `AppPurchase` tag — client built/null, `isReady()`, `isServiceConnected`, and the setup response code plus debug message. The failure above produced complete silence; this class of problem is now visible in `logcat` without attaching a debugger. No behavior depends on it, and it costs nothing beyond the log calls.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Upgrading
|
|
72
|
+
|
|
73
|
+
```gradle
|
|
74
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.4'
|
|
75
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.4'
|
|
76
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-core:v4.4.4'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
No code changes are required. Nothing else in the library changed — no dependency updates, no ad-side changes.
|
|
80
|
+
|
|
81
|
+
To confirm the fix on device, filter `logcat` for the `AppPurchase` tag: you should see `connectToGooglePlayBilling: ... serviceConnected=false` followed by `onBillingSetupFinished: code=0`.
|
|
82
|
+
|
|
83
|
+
## Notes
|
|
84
|
+
|
|
85
|
+
- Neither fix is covered by an automated test — both depend on `BillingClient` connection-state transitions the current harness cannot drive (the same limitation noted for the 4.4.3 billing changes), so on-device verification against a Play test track is recommended. The existing 176 tests are unaffected and still pass
|
|
@@ -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.
|
|
@@ -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,12 +6,29 @@
|
|
|
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
|
|
17
|
+
|
|
18
|
+
## What's New in 4.4.4
|
|
19
|
+
|
|
20
|
+
Critical billing hotfix, no API changes. **If you ship the billing module on 4.4.3, upgrade.**
|
|
21
|
+
|
|
22
|
+
- **Billing never connected on 4.4.3** — `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 fetched, and there was no failure callback and no error log to explain it. The guard is back on `isServiceConnected`; the re-query paths keep the 4.4.3 `isReady()` fix
|
|
23
|
+
- **A timed-out setup reported itself as initialized** — the `setBillingListener(listener, timeout)` timeout path set `isBillingInitialized = true` before delivering `SERVICE_TIMEOUT`, so host-app guards of the form `if (!initBillingFinish) initBilling()` went permanently quiet and the connection could never be retried. It now sets `false`
|
|
24
|
+
- **Billing connection lifecycle logging** — `initBilling`, `connectToGooglePlayBilling` and both `BillingClientStateListener` callbacks now log their state at `DEBUG` under the `AppPurchase` tag, so this class of failure is visible in `logcat`
|
|
10
25
|
|
|
11
26
|
## What's New in 4.4.3
|
|
12
27
|
|
|
13
28
|
Bug-fix and dependency release, no API changes. Two silent-failure bugs, both of which cost money.
|
|
14
29
|
|
|
30
|
+
> ⚠️ 4.4.3's billing regression makes purchases unusable — use 4.4.4 or newer.
|
|
31
|
+
|
|
15
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
|
|
16
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
|
|
17
34
|
- **Acknowledgment no longer requires a configured product id** — a `PURCHASED` order the current build does not list (promo grants, dropped products, a Console typo) was never acknowledged, and so was auto-refunded on day 3
|
|
@@ -84,15 +101,15 @@ dependencyResolutionManagement {
|
|
|
84
101
|
**Step 2:** Add dependencies to your app's `build.gradle`:
|
|
85
102
|
|
|
86
103
|
```groovy
|
|
87
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit:v4.4.
|
|
88
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-billing:v4.4.
|
|
89
|
-
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'
|
|
90
107
|
|
|
91
108
|
// For Jetpack Compose support
|
|
92
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.
|
|
109
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-compose:v4.4.5'
|
|
93
110
|
|
|
94
111
|
// For Yandex Ads multi-provider support
|
|
95
|
-
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.
|
|
112
|
+
implementation 'com.github.i2hammad.AdManageKit:ad-manage-kit-yandex:v4.4.5'
|
|
96
113
|
```
|
|
97
114
|
|
|
98
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
|
|