CloudX Flutter SDK
Features
- Banner Ads (320x50) - Widget-based and programmatic positioning
- MREC Ads (300x250) - Medium Rectangle ads with flexible placement
- Interstitial Ads - Full-screen ads for natural transition points
- Privacy Compliance - Built-in support for CCPA, GPP, GDPR, and COPPA
- Auto-Refresh - Automatic ad refresh with server-side configuration
- Revenue Tracking - Access to eCPM and winning bidder information
- User Targeting - First-party data integration via key-value pairs
Platform Support
| Platform | Status | Minimum Version |
|---|---|---|
| Android | ✅ Production Ready | API 21 (Android 5.0) |
| iOS | ⚠️ Alpha/Experimental | iOS 14.0 |
allowIosExperimental: true during initialization.
Installation
Add this to yourpubspec.yaml:
iOS Setup
The SDK requires iOS 14.0+. Update yourios/Podfile:
Android Setup
No additional configuration required. Minimum SDK is automatically set to API 21.Ad Network Adapters
The CloudX SDK requires ad network adapters to serve ads. Adapters are not included by default - you must add them to your project based on which ad networks you want to support.Android Adapters
Add adapters to your app’sandroid/app/build.gradle:
build.gradle.kts):
iOS Adapters
Add adapters to your app’sios/Podfile:
- Meta Audience Network -
adapter-meta(Android) /CloudXMetaAdapter(iOS) - CloudX Network -
adapter-cloudx(Android) /CloudXAdapter(iOS) - More adapters coming soon
Quick Start
1. Initialize the SDK
Initialize CloudX before creating any ads:2. Banner Ads
Option A: Widget-Based (Recommended) Embed banner ads directly in your widget tree:3. MREC Ads (300x250)
Medium Rectangle ads work just like banners but with a larger size. Widget-Based:4. Interstitial Ads
Full-screen ads shown at natural transition points:Event Listeners
All ad types use listener objects with callback functions.CloudXAdViewListener
Used for Banner and MREC ads:CloudXInterstitialListener
Used for Interstitial ads:CloudXAd Model
All callbacks receive aCloudXAd object with ad metadata:
Ad Positioning
When using programmatic positioning, specify where ads should appear:Privacy & Compliance
CloudX provides comprehensive privacy APIs to comply with regulations.CCPA (California Consumer Privacy Act)
Fully supported in bid requests:GDPR (General Data Protection Regulation)
⚠️ Warning: Not yet supported by CloudX servers. Contact CloudX for GDPR support.COPPA (Children’s Online Privacy Protection Act)
Clears user data but not yet included in bid requests (server limitation):GPP (Global Privacy Platform)
Comprehensive privacy framework (fully supported):User Targeting
Enhance ad targeting with first-party data.User ID
Key-Value Targeting
User-Level Targeting (cleared by privacy regulations):Lifecycle Management
Widget Lifecycle
For widget-based ads (CloudXBannerView, CloudXMRECView), the SDK automatically handles lifecycle.
Programmatic Lifecycle
For programmatically created ads, always calldestroyAd() to prevent memory leaks:
SDK Information
Advanced Features
Widget Controllers
Control banner/MREC widgets programmatically:Best Practices
1. Always Destroy Ads
Memory leaks occur if you don’t destroy ads:2. Stop Auto-Refresh Before Destroying
For banner/MREC ads:3. Check Ad Readiness
For interstitials, always check before showing:4. Disable Logging in Production
5. Handle Initialization Errors
Common Issues
iOS: “Experimental API” Error
Solution: SetallowIosExperimental: true during initialization:
Banner Not Showing
Checklist:- Did you call
loadBanner()? - For programmatic banners, did you call
showBanner()? - Is the ad view added to the widget tree?
- Check the
onAdLoadFailedcallback for errors
Memory Leaks
Solution: Always calldestroyAd() in your widget’s dispose() method.
Auto-Refresh Not Stopping
Solution: Explicitly callstopAutoRefresh() before destroying:
Example App
A complete demo app is available in the GitHub repository undercloudx_flutter_demo_app/. It demonstrates:
- SDK initialization with environment selection
- All ad format implementations
- Widget-based and programmatic approaches
- Privacy compliance integration
- User targeting setup
- Proper lifecycle management
- Event logging and debugging
Requirements
Flutter
- Flutter SDK: 3.0.0 or higher
- Dart SDK: 3.0.0 or higher
iOS
- iOS: 14.0 or higher
- CocoaPods for dependency management
- CloudXCore pod: ~> 1.1.40
Android
- Android API: 21 (Android 5.0) or higher
- Gradle: 8.0+
- CloudX Android SDK: 0.6.1
API Reference
Initialization
initialize({required String appKey, bool allowIosExperimental})→Future<bool>isPlatformSupported()→Future<bool>getVersion()→Future<String>setEnvironment(String environment)→Future<void>setLoggingEnabled(bool enabled)→Future<void>
Banner Ads
createBanner({required String placementName, String? adId, CloudXAdViewListener? listener, AdViewPosition? position})→Future<String?>loadBanner({required String adId})→Future<bool>showBanner({required String adId})→Future<bool>hideBanner({required String adId})→Future<bool>startAutoRefresh({required String adId})→Future<bool>stopAutoRefresh({required String adId})→Future<bool>
MREC Ads
createMREC({required String placementName, String? adId, CloudXAdViewListener? listener, AdViewPosition? position})→Future<String?>loadMREC({required String adId})→Future<bool>showMREC({required String adId})→Future<bool>isMRECReady({required String adId})→Future<bool>
Interstitial Ads
createInterstitial({required String placementName, String? adId, CloudXInterstitialListener? listener})→Future<String?>loadInterstitial({required String adId})→Future<bool>showInterstitial({required String adId})→Future<bool>isInterstitialReady({required String adId})→Future<bool>
Ad Lifecycle
destroyAd({required String adId})→Future<bool>
Privacy
setCCPAPrivacyString(String? ccpaString)→Future<void>setIsUserConsent(bool hasConsent)→Future<void>setIsAgeRestrictedUser(bool isAgeRestricted)→Future<void>setGPPString(String? gppString)→Future<void>getGPPString()→Future<String?>setGPPSid(List<int>? sectionIds)→Future<void>getGPPSid()→Future<List<int>?>
User Targeting
setUserID(String? userID)→Future<void>setUserKeyValue(String key, String value)→Future<void>setAppKeyValue(String key, String value)→Future<void>clearAllKeyValues()→Future<void>
Roadmap (Future Versions)
The following features are planned for future releases:- ✅ Rewarded Ads (implementation exists, needs public API)
- ✅ Native Ads with multiple sizes (implementation exists, needs public API)
- ✅ Structured error handling with error codes
- ✅ Granular log level control
- ✅ App Open Ads
Support
For questions, issues, or feature requests:- Contact the CloudX team
- Check the demo app for implementation examples