> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudx.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Android SDK release history

## \[4.4.0] - 2026-07-28

### Added

* **Publisher Revenue Platforms** - Publisher-reported revenue can now use `CloudXRevenuePlatform.INMOBI`, `CloudXRevenuePlatform.TOPON`, or `CloudXRevenuePlatform.custom(name)` in addition to AdMob, so apps can forward impression-level revenue from more mediation and reporting platforms.

### Changed

* **Revenue Amount Units** - `CloudXRevenueData.builder(platform, revenue, adFormat)` now takes `revenue` as a `Double` in currency units, and `CloudXRevenueData.revenue` is now a `Double`. For AdMob `AdValue.valueMicros`, divide by `1_000_000.0` before creating `CloudXRevenueData`.

### Fixed

* **Telephony Permission Guard** - The SDK now checks phone-state permission before reading the telephony network type.
* **VAST Tracker Compatibility** - Fixed the VAST event tracker to avoid an API 24-only collection call when running on the SDK's minimum supported Android version.

## \[4.3.0] - 2026-07-21

### Added

* **AppsFlyer Ad Revenue Connector** - Added a managed AppsFlyer connector and a global `CloudX.addAdRevenueListener()` API to forward CloudX ad revenue to AppsFlyer or any MMP with one dependency and no glue code. The listener fires once per CloudX-won impression across all ad formats.

### Changed

* **Google Waterfall Prefetch Expiry** - Prefetched Google Waterfall fills now expire on per-format time limits (4 hours for App Open, 1 hour for other formats) and refill proactively, so stale cached fills no longer render blank or fail at show.
* **Duplicate load() Handling** - Repeated `load()` calls while a load is in flight are now handled safely and consistently across all ad formats. Previously, rapid duplicate banner and MREC loads could cancel the in-flight auction and starve the app of fills.
* **Creative Reporting** - Creative identifiers are now included in impression and revenue telemetry across native and Mintegral-backed placements for more accurate creative-level reporting.

### Fixed

* **Pre-Init Load Callbacks** - Banner and MREC `load()` calls made before initialization completes are now queued and always produce a callback. Previously such calls could be dropped silently, and a failed initialization is now reported as a load failure instead of hanging with no callback.
* **Native Impression Revenue** - Fixed a timing gap where a native impression fired before the SDK's observer subscribed could be lost, so the publisher's revenue callback did not fire. Affected synchronous-impression native paths such as Moloco standalone native.
* **Optimistic Banner Leak** - Fixed an adapter view leak when an optimistically loaded banner is destroyed before its background creative load dispatches.

## \[4.2.0] - 2026-07-07

### Added

* **App Open Ads** - Added App Open ad support through `CloudX.createAppOpen()` and `CloudXAdFormat.APP_OPEN` for app foreground placements.
* **Publisher Revenue Reporting** - Added `CloudX.reportRevenueData()` and `CloudXRevenueData` so publishers can forward AdMob impression-level revenue events into CloudX reporting.
* **Trusted Arbiter Custom Bids** - Added mediator-agnostic custom bid inputs with `CloudXArbiterBid.custom()`, `CloudXArbiterPlatform.CUSTOM`, and `CloudXArbiterPrecision`.
* **Expanded Google Waterfall Support** - Added Google Waterfall Interstitial, Rewarded, Native, and App Open support.
* **Banner Auto-Refresh Configuration** - Added banner and MREC support for server-disabled auto-refresh settings.
* **TaurusX Adapter Availability** - The TaurusX Android adapter is now available as `io.cloudx:adapter-taurusx:1.18.3.0`, supporting Banner, MREC, Interstitial, Rewarded, and Native ad formats on CloudX Android SDK 4.2.0 or newer.

### Changed

* **Adapter Format Metadata** - Adapters now report supported ad formats to CloudX, helping server-provisioned configuration match demand to compatible adapters.
* **Google Waterfall Reporting** - Improved Google Waterfall response identifiers and realized-price handling for more accurate waterfall diagnostics and reporting.
* **Renderer Reliability** - Fullscreen CloudX renderer behavior now better respects device auto-rotate settings and rewarded close/reward eligibility.
* **Fullscreen Network Names** - Fullscreen ad callbacks now report network names consistently with the raw adapter code used by other ad formats.
* **Initialization Resilience** - Improved SDK recovery from stale or poisoned OS DNS resolver state during initialization and network calls.

### Fixed

* **Moloco Native Banner Impressions** - Fixed Moloco Native Banner and Native MREC impression timing so impressions are handled after the ad view is attached to the CloudX ad view container.
* **Banner Render Timing** - Improved banner and MREC load/render timing so adapter render latency is tracked separately from the initial load signal.
* **Google Waterfall Prefetch Reliability** - Improved Google Waterfall prefetch callback handling and impression reporting so stale loader callbacks cannot affect current fills.
* **Trusted Arbiter PubMatic Comparison** - Fixed fallback arbitration so PubMatic OpenWrap CPM prices are normalized before comparison with per-impression revenue bids.

## \[4.1.7] - 2026-06-25

### Changed

* **Faster SDK Initialization** - Reduced initialization latency by applying privacy consent to ad network adapters in parallel and moving non-critical startup work off the initialization path.

## \[4.1.6] - 2026-06-25

### Changed

* **Quicker Initialization** - The SDK can reuse cached configuration on warmed sessions, reducing initialization latency on subsequent launches.
* **Trusted Arbiter Revenue Accuracy** - Normalized fallback revenue units used in arbitration so CloudX bid comparisons and revenue reporting are more accurate.

## \[4.1.5] - 2026-06-19

### Added

* **MobileFuse Adapter Availability** - The MobileFuse Android adapter is now available as `io.cloudx:adapter-mobilefuse:1.11.0.0`, supporting Banner, MREC, Interstitial, Rewarded, and Native ad formats.

### Changed

* **Meta Native-in-Banner Routing** - Meta native banner demand now uses Meta's native-banner rendering path only for banner-sized placements; native MREC placements use the regular native ad path.
* **Vungle Native Ad Support** - Added support for Vungle native, native banner, and native MREC ad formats.

## \[4.1.4] - 2026-06-18

### Added

* **Pangle Adapter Readiness** - Added the SDK-side metadata needed for the independently released Pangle Android adapter. Publishers can integrate Pangle demand with `io.cloudx:adapter-pangle:8.1.0.3.0` on CloudX Android SDK 4.1.4 or newer.
* **CloudX Fullscreen HTML Rendering** - Added SDK support for CloudX-served MRAID fullscreen creatives in interstitial and rewarded placements, including OMID viewability measurement for CloudX HTML ads.

### Changed

* **SDK Startup Performance** - Reduced SDK initialization and ad-request stalls caused by device signal collection.
* **MRAID Fullscreen Reliability** - Improved fullscreen CloudX HTML ads with load watchdogs, a loading indicator, larger close hit targets, `mraid.unload()` support, more reliable hide callbacks, and safer reward handling when rewarded ads are closed early.
* **Native Ad Rendering** - Improved native image handling for local file-backed assets and prevented stale async image loads from overwriting reused native ad views.
* **Telemetry Timing Accuracy** - SDK telemetry durations now use monotonic app-uptime timing for more reliable diagnostics.

## \[4.1.3] - 2026-05-31

### Changed

* **Resilient Adapter Initialization** - A slow ad network adapter no longer blocks SDK initialization. Each adapter gets a soft init timeout; the SDK finishes initializing while it continues starting up in the background. Not-ready adapters are held out of auctions until they finish.

## \[4.1.2] - 2026-05-28

### Added

* **Native-in-Banner Rendering** - Native ad demand from supported adapters, including Meta, Moloco, and Vungle, can now serve into standard banner and MREC slots through the existing banner public API.

### Changed

* **Server-Driven Always-Reward Mode** - Rewarded ad adapters now honor a `shouldAlwaysRewardUser` flag configured per-line-item in the dashboard. The SDK fires the reward callback even for networks that don't always deliver a reward signal. No integration change required.

## \[4.1.1] - 2026-05-26

### Added

* **Digital Turbine Adapter Support** - Added SDK support for the Digital Turbine Android adapter. Adapter artifacts continue to be released independently.
* **Expanded Network Mappings** - Added SDK network mappings for BidMachine, Chartboost, Digital Turbine, LoopMe, MobileFuse, Pangle, PubMatic, and Yandex so compatible adapters can be released independently as they become available.

### Changed

* **Digital Turbine Adapter Metadata** - Updated Digital Turbine adapter metadata and error reporting compatibility for CloudX SDK 4.1.1.
* **Google Waterfall Adapter** - Updated Google Waterfall support to Google Mobile Ads SDK 25.1.0 and added fallback banner/MREC impression reporting when AdMob impression-level revenue callbacks are unavailable.

## \[4.1.0] - 2026-05-22

### Added

* **Trusted Arbiter** - Added support for comparing CloudX bids with supported third-party bids from Unity LevelPlay and PubMatic, and selecting the winning platform through CloudX arbitration.
* **LevelPlay Impression-Level Revenue Data** - Added impression-level revenue tracking via Unity LevelPlay integration, alongside the existing AppLovin ILRD support.
* **Ad Value Accessors** - Added `CloudXAd.adValues` for SDK-provided ad metadata.
* **Expanded Network Support** - Added SDK support for Google Waterfall, Moloco, and Verve adapters. Adapter artifacts continue to be released independently.
* **MRAID 3.0 Ad View Rendering** - Added CloudX renderer support for MRAID 3.0 banner and MREC creatives.

## \[4.0.0] - 2026-04-27

### Breaking Changes

* **Adapter Version Compatibility** - Adapters now declare their minimum CloudX SDK version. The SDK skips incompatible adapters during initialization.

### Added

* **Independent Adapter Versions** - CloudX adapters are now released independently from the core SDK, allowing compatible adapter updates to ship on their own release schedule.

### Changed

* **Publisher Release Builds** - Improved release-build compatibility by preserving the CloudX runtime classes required for SDK initialization and adapter loading.

### Fixed

* **Release Build Initialization** - Fixed an issue that could prevent SDK initialization in minified publisher builds.

## \[3.2.0] - 2026-04-24

### Added

* **Magnite Adapter** - Added Magnite adapter support for banner, interstitial, and rewarded ads.
* **Per-Request Bid Floor Overrides** - Added APIs for per-request bid floor overrides so publishers can send request-scoped floor controls through the SDK bid pipeline.

### Changed

* Improved banner and MREC lifecycle handling across adapters for more consistent rendering, refresh, and cleanup behavior.

### Fixed

* Improved SDK resilience when optional adapter or network SDK dependencies are missing at runtime.
* Fixed Vungle banner load errors so invalid banner load states are surfaced through SDK error callbacks.

## \[3.1.0] - 2026-04-17

### Added

* **Native Ads** - Added native ad support with `CloudX.createNativeAdLoader()`, `CloudXNativeAdLoader`, `CloudXNativeAd`, `CloudXNativeAdListener`, and `CloudXNativeLoaderConfiguration`, backed by the Meta adapter.

### Changed

* Improved adapter initialization, privacy forwarding, and ad load/show reliability across supported networks.
* Reduced startup and initialization work on the main thread to improve app launch stability and lower ANR risk.
* **Unity 2022 Meta Compatibility** - `adapter-meta` now brings in Meta Audience Network `6.20.0` transitively by default for Unity 2022 compatibility. If your integration uses native ads, explicitly add Meta Audience Network `6.21.0` or newer in your app:
  ```kotlin theme={null}
  dependencies {
      implementation("io.cloudx:adapter-meta:3.1.0")
      implementation("com.facebook.android:audience-network-sdk:6.21.0")
  }
  ```

### Fixed

* Improved SDK resilience for missing network SDK dependencies and adapter load failures.

## \[3.0.0] - 2026-04-06

### Breaking Changes

* `CloudX.initialize()` now requires an Android `Context`, and the public ad creation APIs now require `Context` as well: `createBanner()`, `createMREC()`, `createInterstitial()`, and `createRewarded()`.

### Changed

* Removed automatic process-start initialization; apps now provide `Context` explicitly through SDK initialization and ad creation APIs.
* Reduced SDK work before `CloudX.initialize()` is called, lowering main-thread startup overhead and ANR risk.

## \[2.2.7] - 2026-04-02

### Fixed

* Reduced startup ANR risk for apps that include the SDK before calling `CloudX.initialize()`.

## \[2.2.6] - 2026-04-01

### Changed

* Improved ad lifecycle, revenue, and crash reporting reliability across SDK and network-adapter events.
* Improved banner, interstitial, and rewarded event attribution so placement and custom data are tracked consistently.

### Fixed

* Improved error reporting for bid response parsing, adapter initialization, and ad load failure paths.

## \[2.2.5] - 2026-03-30

### Added

* Added `CloudXErrorCode.LOAD_NOT_ALLOWED_WHILE_SHOWING` for fullscreen `load()` calls made while the same ad instance is actively showing.
* Added fullscreen adapter readiness checks across interstitial and rewarded adapters.

### Changed

* Improved fullscreen ad readiness handling so expired or invalidated network ads are no longer reported as ready.
* Improved fullscreen ad reuse behavior to avoid serving stale cached ads.

### Fixed

* Fixed fullscreen `load()` being accepted during an active show; it now fails immediately with `onAdLoadFailed(..., LOAD_NOT_ALLOWED_WHILE_SHOWING)`.
* Fixed stale fullscreen ads being reported as ready after the network SDK had already invalidated or expired the underlying ad object.
* Fixed Mintegral GDPR consent propagation for CMP-managed integrations.

## \[2.2.4] - 2026-03-26

### Added

* **Server-Driven Location Sharing** - Added server-controlled location sharing with publisher opt-out support and reduced coordinate precision.
* Added server-controlled remote log collection to help diagnose publisher integration issues.
* Added content-language targeting support in bid requests.
* Added more granular no-fill reasons in SDK error messages.

### Changed

* Improved SDK diagnostic and crash reporting reliability for ad lifecycle events.

### Fixed

* Fixed release-build rules so CloudX adapters are preserved correctly in minified apps.
* Fixed Mintegral adapter crash on Android API 23.

## \[2.2.3] - 2026-03-20

### Added

* Added server-controlled diagnostic log collection for integration support.

### Changed

* Renamed the Unity adapter artifact to `adapter-unityads` and aligned Unity Ads naming across SDK setup and documentation.

### Fixed

* Fixed Unity Ads network name casing to match server bidder configuration.

## \[2.2.2] - 2026-03-17

### Added

* Improved SDK initialization diagnostics by reporting adapter metadata.

### Fixed

* Fixed InMobi bid token retrieval by ensuring token collection runs on the main thread.

## \[2.2.1] - 2026-03-11

### Changed

* Hardened the Mintegral adapter against null values and ad load exceptions across supported ad formats.
* Bumped Mintegral SDK from `17.0.61` to `17.0.91`.

### Fixed

* Fixed adapter bid extras collection so an exception from one adapter no longer prevents extras from subsequent adapters being included.

## \[2.2.0] - 2026-03-10

### Added

* **Impression-Level Revenue Data** - Added impression-level revenue tracking with CloudX auction correlation via AppLovin integration.
* **Ad Click Tracking** - Added click notification support when users tap ads.
* **Manual Privacy API** - Added `CloudX.setHasUserConsent()` and `CloudX.setDoNotSell()` with adapter privacy forwarding.
* **Kotlin Suspend Initialization** - Added a suspend `CloudX.initialize(context, config)` overload for Kotlin callers.
* **Device-Level Reporting** - Added Android ID based device-level reporting for DAU/MAU analytics when available.
* **Adapter Error Diagnostics** - Added adapter error reporting across banner, interstitial, and rewarded ads.
* **Network SDK Crash Reporting** - Added crash reporting for crashes originating from supported ad network SDKs.
* **Creative Type Support** - Added creative type support in the CloudX renderer.

### Changed

* Moved the CloudX renderer into the core SDK, so publishers no longer need a separate CloudX renderer adapter module.
* Removed `appcompat` and `webkit` transitive dependencies from the SDK to reduce dependency surface area and APK size.
* Improved reporting delivery reliability by retaining events for retry on transient send failures.
* Bumped Vungle SDK from `7.6.1` to `7.7.1`.
* Bumped InMobi SDK from `11.1.0` to `11.1.1`, including an upstream `BroadcastReceiver` leak fix.

### Fixed

* Fixed location data handling for geo-based targeting and reporting.
* Fixed incorrect `INVALID_APP_KEY` errors for non-config HTTP responses.
* Improved retry classification for transient network and server errors.

## \[2.0.1] - 2026-03-04

### Changed

* Improved Unity 2022.3 compatibility by removing database runtime dependencies from SDK event persistence.
* Downgraded Meta Audience Network SDK from `6.21.0` to `6.20.0` to avoid Unity 2022.3 build incompatibilities.

### Fixed

* Fixed a concurrency issue that could occur during impression tracking.
* Fixed Meta rewarded ad handling for apps using `singleTask` launch mode.

## \[2.0.0] - 2026-02-04

This release replaces placement names with **Ad Unit IDs** from the CloudX dashboard. Update your `createBanner()`, `createMREC()`, `createInterstitial()`, and `createRewarded()` calls to use the ad unit ID instead of a placement name.

### Added

* **Rewarded Ads** - Added rewarded ads with `CloudX.createRewarded()`, `CloudXRewardedAd`, `CloudXRewardedListener`, and `CloudXReward`.
* **InMobi Adapter** - Added InMobi adapter support for banner, MREC, interstitial, and rewarded ads.
* **Vungle Rewarded Ads** - Added rewarded ad support to the Vungle adapter.
* Added `CloudX.isInitialized()` to check SDK initialization state.
* Added `CloudX.getVersion()` to get the SDK version string.
* Added `setPlacement()` and `setCustomData()` on `CloudXAdView` for tracking.
* Added `show(activity, placement, customData)` overloads on fullscreen ads for tracking.
* Added `CloudXSdkConfiguration` in the `onInitialized()` callback.
* Added `CloudXAd.networkPlacement` for network-specific placement IDs.
* Added new error codes: `NETWORK_NO_CONNECTION`, `AD_ALREADY_SHOWING`, `DONT_KEEP_ACTIVITIES_ENABLED`, `AD_NOT_READY`, and `INVALID_APP_KEY`.

### Breaking Changes

* Bumped `minSdk` from 21 to 23.
* Replaced `CloudXInitializationParams` with `CloudXInitializationConfiguration`.
* Renamed `placementName` parameters to `adUnitId` in `createBanner()`, `createMREC()`, `createInterstitial()`, and `createRewarded()`.
* Renamed `CloudXAd.placementId` to `adUnitId`.
* Removed `CloudXAd.placementName`.
* Renamed `CloudXAd.bidderName` to `networkName`.
* Renamed `CloudXErrorCode.INVALID_PLACEMENT` to `INVALID_AD_UNIT`.
* Changed `onAdLoadFailed(placementName, cloudXError)` to `onAdLoadFailed(adUnitId, cloudXError)`.
* Changed `onAdDisplayFailed(cloudXError)` to `onAdDisplayFailed(cloudXAd, cloudXError)`.
* Changed `onInitialized()` to `onInitialized(configuration: CloudXSdkConfiguration)`.
* Removed the `testMode` initialization parameter; test mode is now server-controlled.
* Changed `show()` to `show(activity)` for interstitial and rewarded ads.

### Changed

* Updated Meta Audience Network SDK from `6.17.0` to `6.21.0`.

### Fixed

* Fixed ad reload behavior in `onAdHidden` and `onAdDisplayFailed` callbacks.
* Ensured all `load()` and `show()` callbacks are delivered on the UI thread.

## \[0.12.1] - 2025-12-23

### Fixed

* Fixed an ANR risk in the Meta adapter caused by bid token collection on the main thread.

## \[0.12.0] - 2025-12-14

### Breaking Changes

* Removed `CloudXError.effectiveMessage`; use `message` directly instead.
* Removed `setLoggingEnabled()`; use `setMinLogLevel(CloudXLogLevel.NONE)` to disable logging.
* Removed `CloudXPrivacy`; privacy is now handled automatically through standard privacy signals.

### Changed

* Enhanced GDPR support with GPP Section 2 parsing and vendor consent checking.
* Simplified TCF purpose checks to only require purposes 1 and 2.
* Added CCPA support via GPP with legacy US Privacy fallback.
* Removed COPPA handling.
* Added `CloudXLogLevel.NONE` for disabling logs.

### Fixed

* Fixed geo API failure handling during initialization.

## \[0.11.1] - 2025-12-23

### Fixed

* Fixed an ANR risk in the Meta adapter caused by bid token collection on the main thread.

## \[0.11.0] - 2025-12-09

### Changed

* Migrated the SDK HTTP client from Ktor `3.0.3` to OkHttp `4.12.0`.
* Added destroyed-state guards across ad formats.

## \[0.10.0] - 2025-12-03

### Added

* **Vungle Adapter** - Added Vungle adapter support for banner and interstitial ads.

### Changed

* Simplified the log tag to `CloudX` for easier logcat filtering.
* Added public API entry logging for easier integration debugging.
* SDK initialization now fails early with a clear error when no adapters are found.

### Fixed

* Fixed banner refresh stopping after load failure.

## \[0.9.0] - 2025-11-26

### Added

* Added ad revenue tracking via `CloudXAdRevenueListener.onAdRevenuePaid()`.

### Changed

* Upgraded Ktor from `2.3.8` to `3.0.3` for improved compatibility with apps using Ktor 3.x.

### Fixed

* Fixed memory leaks in ad lifecycle management.
* Improved SDK stability.

## \[0.6.0] - 2025-11-03

### Added

* Added `testMode` support to `CloudXInitializationParams` for requesting test ads during development.

## \[0.4.0] - 2025-10-27

### Added

* Initial alpha release of CloudX Android SDK.
* Added banner and MREC ad support.
* Added interstitial ad support.
* Added real-time bidding with CloudX mediation.
* Added CloudX and Meta Audience Network adapter support.
* Added privacy compliance support for GDPR, CCPA, US Privacy, TCF, and GPP signals.
* Added session depth tracking for bid optimization.
* Added ad lifecycle callbacks and error handling.
* Added debug logging with configurable log levels.
