cloudx_flutter 3.9.0
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
Adsuffix.loadRewardedAd->loadRewarded,isRewardedAdReady->isRewardedReady,showRewardedAd->showRewarded,destroyRewardedAd->destroyRewarded,setRewardedAdListener->setRewardedListener. Event names are unchanged. - MREC methods are spelled
Mrec.createMREC->createMrec, and the same forloadMrec,showMrec,hideMrec,destroyMrec,startMrecAutoRefresh,stopMrecAutoRefresh,setMrecPlacement,setMrecCustomDataandsetMrecListener. CloudX.initializereturnsCloudXInitializationResult, not a nullableCloudXConfiguration. Replace a null check withif (result.success); the failure carrieserrorCode,errorCodeNameandmessage.CloudXConfigurationis deleted.updateBannerPositionandupdateMrecPositionare gone. Position is fixed at creation. To move an ad view, calldestroyBanner/destroyMrecand create it again at the new position; that starts a new auction.onAdExpandedandonAdCollapsedare gone fromCloudXAdViewListener. Delete those callbacks; the rest are unchanged.CloudX.setVisualDebuggingEnabledis gone. Delete the call. It drove an iOS-only debug overlay and never did anything on Android.CloudXAdViewis no longer exported. The inline widget is unfinished: it takes no placement, custom data or extra parameters, and thesetBanner...setters do not reach it. UsecreateBanner/createMrec, and tell us if you need inline ads.
Fixed #
- A failed
CloudX.initializecan 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. Callinginitializeagain 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.
onAdDisplayFailednow fires.
Added #
- Extra parameters:
setBannerExtraParameter,setMrecExtraParameter,setInterstitialExtraParameterandsetRewardedExtraParameterattach 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 passnullto 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.codeNamecarries the SDK's own name for the code, so a log readsNO_FILL[302]instead of302.CloudXInitializationResult.errorCodeNamedoes the same for an initialization failure.CloudXErrorCode.adNotFound(403) when a show finds no ad for that ad unit, anddisplayHostUnavailable(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_SHOWINGis 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 aCloudXArbiterResult. Build bids withCloudXArbiterBid.cloudX,.levelPlay,.pubMatic,.adMob,.gamand.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.adValuesexposes the SDK metadata attached to a loaded ad; pass theCloudXAdfromonAdLoadedtoCloudXArbiterBid.cloudXunchanged.
Changed #
CloudXAdFormatis a class, not an enum. An ad format the plugin does not name now arrives with the value the SDK reported, instead of reading asbanner. The constants andadFormat.valueare 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
compileSdk36 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
CloudXCoreversion (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.
CloudXAdnow reports the missing field as absent and delivers the callback.
Removed #
CloudXRendereris no longer published and is no longer referenced. Remove the pod from yourPodfile.
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 throughCloudXGoogleWaterfallAdapter.
2.2.3 - 2026-03-19 #
Added #
- Manual privacy APIs:
CloudX.setHasUserConsentandCloudX.setDoNotSell(nullablebool?to clear override and defer to CMP signals) - Demo app: Unity Ads mediation via
CloudXUnityAdsAdapter(iOS) andio.cloudx:adapter-unityads(Android) at 2.2.3, alongside existing adapters
Changed #
- Package version aligned with native:
cloudx_flutter2.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 unusedffi - 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) #
placementName→adUnitIdon create/load APIsCloudXAd.placementName→adUnitId;bidderName→networkName- Removed
isPlatformSupported()
Native SDKs integrate with CMP by default. Optional manual overrides ship in 2.2.3 (see above).