Changelog
Flutter SDK release history
3.11.0 — 2026-10-16
Moves the plugin onto the current CloudX native SDKs and adapters, and brings reward at grant to rewarded ads. The Dart package version follows the iOS CloudXCore line; the Android io.cloudx:sdk pin is listed with each release.
Native pins
Ad behaviour
- Rewarded ads can pay the reward as soon as the ad network grants it, instead of waiting for the ad to close, so a user who never closes the ad is still rewarded. CloudX turns this on per account, and your
onAdReceivedRewardcallback does not change. - iOS: rewarded ads now pay the reward amount and currency configured on the ad unit in CloudX, instead of the value the ad network reports.
- iOS: a banner with no refresh interval configured now refreshes every 30 seconds.
- iOS: the Mediation Debugger can share a plain-text report, for attaching to a support request.
- iOS: part of initialization now runs at app launch, including one request to the CloudX init host that carries no identifiers. Opt out by setting
CloudXStartupWarmDisabledinInfo.plist.
Fixed
- Android: CloudX-rendered native ads no longer crash your app when Android’s WebView renderer process stops. The ad hides its main image and keeps its text, clicks and impression tracking.
- Android: the SDK no longer crashes on devices where reading the active network fails inside Android itself. It treats that as a normal network error and continues.
- iOS: full-screen HTML ads no longer render at about a third of the screen, and the built-in native templates keep their title and body readable in dark mode.
Host app: network adapters
io.cloudx:adapter-magnite moves to 1.0.2.1, which brings Magnite SDK 1.0.2. That SDK depends on kotlin-stdlib 2.4.0, so an app including the Magnite adapter must compile with Kotlin 2.3 or later. Kotlin 2.3 also removed the kotlinOptions Gradle block, so set jvmTarget through kotlin { compilerOptions { ... } }. Twelve Android and twelve iOS adapters move to their current revisions; the Flutter integration guide carries the current versions.
On Android, adapter-mintegral 17.1.81.1 and adapter-pangle 8.3.0.4.2 add native, native banner and native MREC ads. adapter-unityads 4.21.0.2 fixes Unity Ads initialization never completing in apps that remove Unity’s androidx.startup initializer from the manifest, and adapter-verve 3.9.3.0 brings HyBid SDK 3.9.3, which no longer declares the ACCESS_ADSERVICES_TOPICS permission.
On iOS, CloudXMagniteAdapterV2 1.0.4.2 fixes a launch crash in apps that set user consent or do-not-sell before CloudX finishes initializing, and withdraws 1.0.4.0 and 1.0.4.1. CloudXMobileFuseAdapter 1.12.0.0 brings MobileFuse SDK 1.12.0, which fixes a crash risk while generating the bidding token, and CloudXInMobiAdapter 11.5.0.0 and CloudXMintegralAdapter 8.1.7.0 move to InMobi SDK 11.5.0 and Mintegral SDK 8.1.7.
3.10.0 — 2026-10-08
Adds the Mediation Debugger and moves the plugin onto the current CloudX native SDKs and adapters. The Dart package version follows the iOS CloudXCore line; the Android io.cloudx:sdk pin is listed with each release.
Native pins
API
CloudX.showMediationDebugger()opens the native integration screen: every installed adapter with its status, the privacy signals, your ad units and test-ad controls. It returnsfalseuntil initialization completes, so call it afterCloudX.initializesucceeds.CloudXAd.creativeIdcarries the creative identifier the network reported, when it reports one.
Ad behaviour
- Ads now honour the advertiser’s expiry. On both platforms a fullscreen ad expires with its bid, and showing an expired one fails with error 616. Check readiness before showing, and load a new ad when it fails.
- Android: a banner or MREC that fails after it loaded now reports
onAdLoadFailed, and while auto-refresh is stopped the SDK no longer reloads on its own. Callload()for a new ad. - Android: CloudX-rendered interstitial and rewarded ads open in the app’s own task, so apps whose launcher Activity sets
android:taskAffinity="", the Flutter template default, no longer get a stuck ad and blocked loads after returning from Home. - Android: WebView and network warm-up now run after the app first reaches the foreground instead of at process start, which lowers ANR risk.
- Revenue callbacks report realized revenue when the ad source provides it, and MMP connectors no longer receive CloudX wins from bidders that report their own revenue.
- iOS: a second
initializewaits for the first, test-mode revenue callbacks fire with revenue 0, video clicks open the in-app App Store, and clicks fire only on a real tap.
Fixed
- Android: CloudX native ads in banner and MREC slots take their text colors from your Activity theme, so titles and body text stay readable on dark themes.
- Android: CloudX-rendered HTML ads with absolutely positioned content are no longer shifted or clipped, and a creative smaller than its slot aligns to the top-left instead of the center.
Host app: network adapters
BIGO Ads is now available on both platforms (io.cloudx:adapter-bigo and CloudXBigoAdapter 6.1.0.0). On iOS, adding the pod makes the Flutter tool drop arm64 from Simulator builds, so test BIGO on a device. The Flutter integration guide links the Android and iOS guides that carry the current adapter versions.
3.9.0 — 2026-09-11
Moves the plugin onto the current CloudX native SDKs and adds Trusted Arbiter. The Dart package version follows the iOS CloudXCore line; the Android io.cloudx:sdk pin is listed with each release.
Native pins
API
CloudX.initializereturns aCloudXInitializationResult. Checkresult.success; a failure carries the native SDK’s error code, its name and its message, so a bad app key is distinguishable from a network failure.- Per-load extra parameters:
setBannerExtraParameter,setMrecExtraParameter,setInterstitialExtraParameterandsetRewardedExtraParameterattach a key and value to the next load of that ad unit. See per-load extra parameters. CloudXError.codeNamecarries the SDK’s own name for the code, so a log line readsNO_FILL[302]rather than302.CloudXInitializationResult.errorCodeNamedoes the same for an initialization failure.- New error codes:
CloudXErrorCode.adNotFound(403) when a show finds no ad for that ad unit, anddisplayHostUnavailable(404) when there is nothing to present from. - New load error codes:
loadNotAllowedWhileShowing(303) andloadFailed(304), plus a rejection an ad unit with a load already in flight can return, numbered 305 on Android and 306 on iOS. Handle both of those, because neither platform reports the other’s.
Trusted Arbiter
CloudX.arbitercompares a loaded CloudX ad with bids from platforms you mediate yourself and returns the platform to show. Bid factories cover CloudX, AdMob, Google Ad Manager, Unity LevelPlay, PubMatic, and custom inputs. See Trusted Arbiter.CloudX.reportRevenueDataforwards impression revenue from another mediation platform into CloudX. It is required for AdMob and Ad Manager bids, which CloudX prices from that history.CloudXAd.adValuesexposes the SDK metadata attached to a loaded ad. Pass theCloudXAdfromonAdLoadedstraight toCloudXArbiterBid.cloudX.
Ad behaviour
- iOS: fullscreen ads present from the topmost view controller, and a show over system UI such as an alert or share sheet is refused with the reason in the failure message.
- Revenue callbacks are suppressed in test mode, so sentinel test prices do not reach your revenue listener.
- An ad event whose payload was missing a field or carried an unexpected type used to be dropped before reaching your listener. The callback is now delivered with that field reported as absent.
Host app: network adapters
The published plugin is core-only. Adapters are versioned <network-sdk-version>.<adapter-revision> and move independently of the core SDKs, so an adapter version does not have to match the plugin version. The Flutter integration guide shows where to declare them and links the Android and iOS guides that carry the current versions and each network’s requirements.
Ad formats
This release serves banner, MREC, interstitial, and rewarded ads. Banner and MREC render as a programmatic overlay; interstitial and rewarded load and show through the programmatic API. See Banner & MREC, Interstitial, and Rewarded.
2.2.3 — 2026-03-19
First public release on pub.dev. The Dart package major.minor.patch matches the CloudX native SDKs it ships against (iOS CloudXCore, Android io.cloudx:sdk).
Requirements
- Dart SDK:
>=2.17.1 <4.0.0(see the packagepubspecon pub.dev) - Flutter:
>=3.0.0 - iOS: 13.0+
- Android: minSdk 23 (API 23)
The Dart floor is set low on purpose so apps on older stable Flutter lines can adopt cloudx_flutter without a full toolchain jump.
Included in this release
- Banner, MREC, interstitial, and rewarded ads; programmatic overlay APIs and inline
CloudXAdView - Listener callbacks, targeting key/values, impression-level revenue (
onAdRevenuePaid), and related lifecycle events - Privacy helpers
CloudX.setHasUserConsentandCloudX.setDoNotSell(nullablebool?clears overrides and defers to CMP where applicable) - Native pins: CloudXCore 2.2.3 (iOS), io.cloudx:sdk 2.2.3 (Android)
Host app: network adapters
The published plugin is core-only. Declare only the ad-network adapters you need in CocoaPods and Gradle, all at 2.2.3 (Meta, Vungle, InMobi, Mintegral, Unity Ads, renderer, etc.). For Unity Ads, add CloudXUnityAdsAdapter and io.cloudx:adapter-unityads.
Android: Mintegral
If you depend on io.cloudx:adapter-mintegral, you must add Mintegral’s Maven repository to Gradle — artifacts are not on Maven Central. See Android integration — Mintegral Maven repository.