cloudx_flutter 3.9.0 copy "cloudx_flutter: ^3.9.0" to clipboard
cloudx_flutter: ^3.9.0 copied to clipboard

Complete Flutter SDK wrapper for CloudX Core with targeting APIs and full ad lifecycle callbacks

Changelog #

All notable changes to the CloudX Flutter SDK will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Versioning #

cloudx_flutter on pub follows the major.minor.patch of the iOS CloudXCore it pins, the same convention as cloudx-react-native. The Android io.cloudx:sdk line has diverged from iOS and is listed per release:

cloudx_flutter iOS (CloudXCore) Android (io.cloudx:sdk)
3.9.0 3.9.0 4.7.0
3.8.0 3.8.0 4.7.0
2.2.3 2.2.3 2.2.3

Releases before 2.2.3 used 0.16.x–0.18.x for the Dart package only; those numbers were not the native SDK version. 2.2.3 matched both natives while they still shared one number.

Native pins come from the public docs repo (en/ios/integration.mdx, en/android/integration.mdx, and the per-adapter overview.mdx pages), applied by scripts/sync-native-pins.sh. Ad-network adapters are versioned <network-sdk-version>.<adapter-revision> and move independently of the core SDKs.


[Unreleased] #


3.9.0 - 2026-09-11 #

Breaking Changes #

Every item here needs a source change. 3.9.0 is the first release since 2.2.3, and it is deliberately a breaking one.

  • Rewarded methods lost the Ad suffix. loadRewardedAd -> loadRewarded, isRewardedAdReady -> isRewardedReady, showRewardedAd -> showRewarded, destroyRewardedAd -> destroyRewarded, setRewardedAdListener -> setRewardedListener. Event names are unchanged.
  • MREC methods are spelled Mrec. createMREC -> createMrec, and the same for loadMrec, showMrec, hideMrec, destroyMrec, startMrecAutoRefresh, stopMrecAutoRefresh, setMrecPlacement, setMrecCustomData and setMrecListener.
  • CloudX.initialize returns CloudXInitializationResult, not a nullable CloudXConfiguration. Replace a null check with if (result.success); the failure carries errorCode, errorCodeName and message. CloudXConfiguration is deleted.
  • updateBannerPosition and updateMrecPosition are gone. Position is fixed at creation. To move an ad view, call destroyBanner / destroyMrec and create it again at the new position; that starts a new auction.
  • onAdExpanded and onAdCollapsed are gone from CloudXAdViewListener. Delete those callbacks; the rest are unchanged.
  • CloudX.setVisualDebuggingEnabled is gone. Delete the call. It drove an iOS-only debug overlay and never did anything on Android.
  • CloudXAdView is no longer exported. The inline widget is unfinished: it takes no placement, custom data or extra parameters, and the setBanner... setters do not reach it. Use createBanner / createMrec, and tell us if you need inline ads.

Fixed #

  • A failed CloudX.initialize can be retried. The result of a failed attempt used to be cached for the life of the process, so a network failure at launch was unrecoverable without a restart. Calling initialize again now starts a fresh attempt; a success is still once-only.
  • A fullscreen show that never reached the SDK now reports a failure. Showing an interstitial or rewarded ad that was never loaded, or with nothing to present from, used to log and return silently, so an app waiting on a callback waited forever. onAdDisplayFailed now fires.

Added #

  • Extra parameters: setBannerExtraParameter, setMrecExtraParameter, setInterstitialExtraParameter and setRewardedExtraParameter attach a key and value to that ad unit's auctions. Set them before the load; a value stays until you set the same key again or pass null to clear it.
  • Load error codes: loadNotAllowedWhileShowing (303), loadFailed (304) and the concurrency rejection, numbered 305 on Android and 306 on iOS, so the two behaviour changes below can be handled in code. Check both concurrency codes.
  • CloudXError.codeName carries the SDK's own name for the code, so a log reads NO_FILL[302] instead of 302. CloudXInitializationResult.errorCodeName does the same for an initialization failure.
  • CloudXErrorCode.adNotFound (403) when a show finds no ad for that ad unit, and displayHostUnavailable (404) when there is nothing to present from. Both come from the plugin, not the native SDK.

Removed #

  • Everything removed in this release is listed under Breaking Changes above, with its migration step.

Changed #

  • Native SDKs: pins CloudXCore 3.9.0 on iOS. Android stays on io.cloudx:sdk 4.7.0.
  • iOS: a load issued while a fullscreen ad is showing now queues instead of failing. It runs on its own once that ad is dismissed. LOAD_NOT_ALLOWED_WHILE_SHOWING is no longer reported on iOS; Android still rejects it.
  • iOS: at most two of your loads run at once per ad unit. A third fails straight away with a new too-many-concurrent-loads error. Raising the cap is a dashboard setting.
  • iOS: fullscreen ads present from the topmost view controller, and a show over system UI such as an alert or a share sheet is refused with the reason in the failure message.
  • iOS: revenue callbacks are suppressed in test mode, so sentinel test prices no longer reach your revenue listener.
  • iOS: native ad template views size to the creative. A landscape or square creative now returns a taller view whose height follows the width you give it, so read the height rather than assuming 320x250.

3.8.0 - 2026-09-09 #

Added #

  • Trusted Arbiter: CloudX.arbiter(CloudXArbiterConfiguration) compares a loaded CloudX ad with third-party bids and returns the selected platform as a CloudXArbiterResult. Build bids with CloudXArbiterBid.cloudX, .levelPlay, .pubMatic, .adMob, .gam and .custom.
  • Publisher-reported revenue: CloudX.reportRevenueData(CloudXRevenueData) forwards impression revenue from another mediation platform (for example AdMob paid events) into CloudX. Required for AdMob and Ad Manager arbiter bids, which CloudX prices from that history.
  • CloudXAd.adValues exposes the SDK metadata attached to a loaded ad; pass the CloudXAd from onAdLoaded to CloudXArbiterBid.cloudX unchanged.

Changed #

  • CloudXAdFormat is a class, not an enum. An ad format the plugin does not name now arrives with the value the SDK reported, instead of reading as banner. The constants and adFormat.value are unchanged; code that treated the type as an enum needs updating.
  • Native SDKs: pins CloudXCore 3.8.0 (iOS) and io.cloudx:sdk 4.7.0 (Android). Host apps on Android need compileSdk 36 and Kotlin 2.1, inherited from the native SDK.
  • Adapters version independently: adapters are no longer on the core version. Declare each adapter at its own <network-sdk-version>.<adapter-revision> from the integration guide; the demo app carries the full set, including Digital Turbine, Pangle, Moloco and Google.
  • Versioning: the plugin now tracks the iOS CloudXCore version (see Versioning above). Android is pinned separately.

Fixed #

  • An ad event whose payload was missing a field or carried an unexpected type used to be dropped before reaching your listener. CloudXAd now reports the missing field as absent and delivers the callback.

Removed #

  • CloudXRenderer is no longer published and is no longer referenced. Remove the pod from your Podfile.

Platform support #

  • iOS: CloudXCore 3.8.0
  • Android: io.cloudx:sdk 4.7.0
  • AdMob Estimated demand (io.cloudx:adapter-admob) is Android-only; iOS serves Google demand through CloudXGoogleWaterfallAdapter.

2.2.3 - 2026-03-19 #

Added #

  • Manual privacy APIs: CloudX.setHasUserConsent and CloudX.setDoNotSell (nullable bool? to clear override and defer to CMP signals)
  • Demo app: Unity Ads mediation via CloudXUnityAdsAdapter (iOS) and io.cloudx:adapter-unityads (Android) at 2.2.3, alongside existing adapters

Changed #

  • Package version aligned with native: cloudx_flutter 2.2.3 pins CloudXCore 2.2.3 and io.cloudx:sdk 2.2.3

Platform support #

  • iOS: CloudXCore 2.2.3
  • Android: io.cloudx:sdk 2.2.3

Historical: pub package 0.x (native pins varied) #

These versions used 0.x.y for the Dart package only. Native SDK versions are noted per entry.

0.18.0 - 2026-03-18 #

  • Added setHasUserConsent / setDoNotSell
  • Native 2.2.2 (iOS CloudXCore, Android sdk)

0.17.0 - 2026-03-14 #

  • Lowered Dart floor to >=2.17.1, Flutter to >=3.0.0; removed unused ffi
  • Native: iOS 2.2.1-beta, Android sdk 2.0.0

0.16.0 - 2026-03-05 #

  • First stable pub release; full ad format APIs, listeners, targeting, etc.
  • Native: iOS ~> 2.2.0-beta, Android sdk 2.0.0

Ad unit ID migration — 2026-02-21 #

Replaces placement names with Ad Unit IDs from the CloudX dashboard.

Added (at migration) #

  • iOS support for all formats; rewarded APIs; CloudXAdView; targeting APIs; isInitialized; position updates; placement/customData on fullscreen ads; networkPlacement; CloudXErrorCode

Breaking changes (at migration) #

  • placementNameadUnitId on create/load APIs
  • CloudXAd.placementNameadUnitId; bidderNamenetworkName
  • Removed isPlatformSupported()

Native SDKs integrate with CMP by default. Optional manual overrides ship in 2.2.3 (see above).

4
likes
140
points
144
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

Complete Flutter SDK wrapper for CloudX Core with targeting APIs and full ad lifecycle callbacks

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on cloudx_flutter

Packages that implement cloudx_flutter