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 onAdReceivedReward callback 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 CloudXStartupWarmDisabled in Info.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 returns false until initialization completes, so call it after CloudX.initialize succeeds.
  • CloudXAd.creativeId carries 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. Call load() 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 initialize waits 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

  • iOS: CloudXCore 3.9.0
  • Android: io.cloudx:sdk 4.7.0

API

  • CloudX.initialize returns a CloudXInitializationResult. Check result.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, setInterstitialExtraParameter and setRewardedExtraParameter attach a key and value to the next load of that ad unit. See per-load extra parameters.
  • CloudXError.codeName carries the SDK’s own name for the code, so a log line reads NO_FILL[302] rather than 302. CloudXInitializationResult.errorCodeName does the same for an initialization failure.
  • New error codes: CloudXErrorCode.adNotFound (403) when a show finds no ad for that ad unit, and displayHostUnavailable (404) when there is nothing to present from.
  • New load error codes: loadNotAllowedWhileShowing (303) and loadFailed (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.arbiter compares 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.reportRevenueData forwards impression revenue from another mediation platform into CloudX. It is required for AdMob and Ad Manager bids, which CloudX prices from that history.
  • CloudXAd.adValues exposes the SDK metadata attached to a loaded ad. Pass the CloudXAd from onAdLoaded straight to CloudXArbiterBid.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 package pubspec on 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.setHasUserConsent and CloudX.setDoNotSell (nullable bool? 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.