Appearance
Opera Ads iOS SDK - Release Notes
Version 2.9.0 (2026-04-02)
New Features
- 🔗 Added missing bid request fields for broader DSP compatibility
- 🔒 Exposed native ad privacy field for compliance support
- 🎯 Implemented dual-condition impression reporting
- 📡 Refactored SKAdNetwork attribution as Source App with
startImpression/endImpressionlifecycle - 🛒 Added SKOverlay support with configurable display strategies (auto/onImpression/onClick)
Improvements
- ⚡ Preloaded lazy instances for better performance
- 🔧 Adjusted impression ID handling
- 📢 Notified template of click events for better tracking
- 🕐 Fixed bid request timestamp unit issues
Configuration
- ⚠️ Required: Add
a2p9lx4jpn.skadnetworktoInfo.plistSKAdNetworkItemsfor attribution support
Version 2.8.3 (2026-03-24)
New Features
- 🎯 Enhanced debug logging system with emoji indicators and categorized tags
- 📊 Improved ad analytics and reporting mechanisms
- 🔧 Added comprehensive logging for SDK initialization with configuration details
Improvements
- ⚡ Optimized ad loading performance
- 🛡️ Enhanced error handling and recovery mechanisms
- 📝 Improved error messages for better debugging
Bug Fixes
- Fixed issue with banner ad auto-refresh in certain scenarios
- Resolved memory leak in native ad view rendering
- Fixed SKAdNetwork attribution tracking edge cases
Documentation
- Added detailed debug logging guide for both Swift and OC demos
- Updated integration documentation with latest best practices
- Added comprehensive troubleshooting sections
Version 2.8.1 (2026-03-05)
New Features
- 📈 Optimized ad reporting mechanism for better revenue tracking
- 🎨 Enhanced MRAID support for rich media ads
Improvements
- ⚡ Performance optimizations for ad rendering
- 🔄 Improved ad refresh logic for banner ads
- 📊 Enhanced analytics data collection
Bug Fixes
- Fixed crash when loading ads on iOS 13.x devices
- Resolved issue with native ad click tracking
- Fixed memory retention in interstitial ad lifecycle
Version 2.8.0 (2026-02-12)
New Features
- 🎯 Client-side bidding support for mediation adapters (AdMob, AppLovin MAX, TopOn)
- 🚀 Enhanced In-App Bidding (C2S) APIs with improved error handling
- 📱 App Open Ad format now available for all mediation platforms
Improvements
- ⚡ Optimized SDK initialization to reduce app launch time
- 🛡️ Improved thread safety in ad loading operations
- 🌐 Enhanced network error handling and retry logic
- 📊 Better analytics integration for impression tracking
Bug Fixes
- Fixed ANR (App Not Responding) issues on older devices during initialization
- Resolved race condition in parallel ad loading scenarios
- Fixed video ad playback issues on iPad devices
Mediation Updates
- AdMob Adapter 2.5.0.0: Added client bidding support
- AppLovin Adapter 2.5.0.0: Enhanced stability and performance
- TopOn Adapter 2.7.0.0: Updated for TopOn SDK 6.5.12+ compatibility
Version 2.7.0 (2026-02-02)
New Features
- 🎬 App Open Ad format support
- 🎁 Rewarded Interstitial Ads now publicly available
- 📝 Enhanced logging for mediation adapters
Improvements
- ⚡ Optimized SDK initialization for faster app launch (30% faster)
- 🔧 Improved adapter initialization flow
- 📊 Better error reporting in debug mode
Bug Fixes
- Fixed issue with rewarded ad callbacks not firing in edge cases
- Resolved banner ad sizing issues on certain iPad models
- Fixed crash when showing interstitial ads in rapid succession
Mediation Updates
- AdMob Adapter: Added App Open Ad support
- TopOn Adapter: Added App Open Ad (Splash) support
- AppLovin Adapter: Enhanced native ad rendering
Version 2.6.0 (2026-01-22)
New Features
- 🔌 TradPlus mediation support added
- 📦 Flexible dependency version management
Improvements
- ⚡ Optimized library dependency versions for better compatibility
- 🔄 Enhanced backward compatibility with older dependency versions
- 📊 Improved mediation waterfall performance
Bug Fixes
- Fixed pod installation conflicts with certain dependency versions
- Resolved issue with native ad media view sizing
- Fixed video ad mute state persistence
Version 2.5.0 (2026-01-13)
New Features
- 🚀 App Open Ads format publicly available
- 🎥 WebM video format support added
- 📱 Enhanced video ad controls
Improvements
- ⚡ Improved video ad loading speed
- 🔊 Better audio session management for video ads
- 📊 Enhanced video ad analytics
Bug Fixes
- Fixed video ad aspect ratio issues on certain devices
- Resolved audio playback conflicts with background music
- Fixed rewarded ad completion tracking
Version 2.4.1 (2026-01-12)
Breaking Changes
- ⚠️ SDK initialization now supports background thread (previously required main thread)
New Features
- 🧵 Thread-safe SDK initialization
- 📊 Server-Side Verification (SSV) callback support for rewarded ads
Improvements
- ⚡ Faster SDK initialization on background thread
- 🔒 Enhanced security for reward verification
- 📝 Improved SSV callback documentation
Migration Guide
swift
// Old (v2.4.0 and earlier) - Required main thread
DispatchQueue.main.async {
OpAdxSDK.initialize(withConfig: config)
}
// New (v2.4.1+) - Can initialize on any thread
DispatchQueue.global().async {
OpAdxSDK.initialize(withConfig: config) {
print("SDK initialized on background thread")
}
}Version 2.4.0 (2026-01-11)
New Features
- 🔗 TopOn SDK 6.5.12+ compatibility
- ✅ Server-Side Verification (SSV) for rewarded ads
- 🎯 Enhanced reward validation
Improvements
- 📊 Better reward tracking and analytics
- 🔒 Enhanced security for incentivized ads
- 📝 Improved SSV documentation with examples
Bug Fixes
- Fixed reward callback timing issues
- Resolved SSV callback URL encoding problems
- Fixed custom data truncation in SSV callbacks
SSV Configuration
swift
// Configure SSV options
let ssvOptions = RewardSsvOptions.Builder()
.userId("user_12345") // Max 100 bytes after URL encoding
.customData("level=5&score=1000") // Max 1KB after URL encoding
.build()
rewardedAd.setRewardSsvOptions(ssvOptions)Version 2.3.0 (2026-01-08)
New Features
- 🎯 Full client-side bidding (C2S) support
- 📡 New In-App Bidding APIs
- 🔧 Native ad enhancement for additional clickable views
Improvements
- ⚡ Optimized bidding performance
- 📊 Better bid price tracking
- 🎨 Enhanced native ad customization
Bug Fixes
- Fixed bid price rounding issues
- Resolved race conditions in parallel bidding
- Fixed native ad interaction tracking
C2S Bidding APIs
swift
// Get bid token
OpAdxSDK.getBidToken(request) { callback in
callback.onSuccess { token in
print("Bid token: \(token)")
}
}
// Load with client bidding
let ad = OpAdxInterstitialAd(placementId: "xxx", auctionType: .clientBidding)
ad.load(listener: listener)
// Compare bids and notify
ad.getBid()?.notifyWin(secondPrice: 1.20, bidderName: "Network A")Version 2.2.2 (2026-01-04)
New Features
- 🔊 Audio control API for video ads
- 🔄 OkHttp 3.x compatibility alongside OkHttp 4.x
Improvements
- 🔇 Better audio session management
- 📦 Flexible HTTP client version support
- 🎥 Enhanced video ad controls
Bug Fixes
- Fixed audio not muting in certain scenarios
- Resolved HTTP client version conflicts
- Fixed video ad resume after app backgrounding
Audio Control API
swift
// Mute all video ads
OpAdxSDK.setMuted(true)
// Unmute all video ads
OpAdxSDK.setMuted(false)
// Note: Must be called before loading adsVersion 2.2.0 (2025-12-11)
New Features
- 📏 Upgraded Open Measurement SDK to version 1.6.1
- 🔒 Enhanced security features
Improvements
- 📊 Better viewability tracking
- 🛡️ Improved fraud detection
- 🔐 Enhanced data encryption
Bug Fixes
- Fixed OMSDK session management issues
- Resolved viewability tracking edge cases
- Fixed impression verification delays
Version 2.1.0 (2025-12-03)
New Features
- 🌐 Full S2S (Server-to-Server) bidding integration support
- 🔗 TopOn mediation adapter support
- 📡 Server bidding APIs
Improvements
- ⚡ Optimized server communication
- 📊 Enhanced bid response handling
- 🔄 Better error recovery in bidding flow
Bug Fixes
- Fixed bid response parsing issues
- Resolved timeout handling in S2S bidding
- Fixed placement ID validation
S2S Bidding APIs
swift
// Get bid token
let request = BidTokenRequest.Builder(adMediation: .topon)
.placementId("xxx")
.adFormat(.interstitial)
.build()
OpAdxSDK.getBidToken(request) { callback in
callback.onSuccess { token in
// Send to your server
}
}
// Load with bid response
let ad = OpAdxInterstitialAd(placementId: "xxx", auctionType: .serverBidding)
ad.load(bidResponse: "response_from_server", listener: listener)Version 2.0.1 (2025-11-16)
Bug Fixes
- Fixed iOS deployment target compatibility issue
- Resolved CocoaPods version conflict
- Fixed SwiftUI integration warnings
Version 2.0.0 (2025-11-05)
Major Release - Complete Rewrite
Breaking Changes
- ⚠️ New SDK architecture - migration required
- ⚠️ Updated initialization API
- ⚠️ Changed ad loading methods
- ⚠️ New listener/delegate patterns
New Features
- 🎯 Brand new SDK architecture for better performance
- 🔌 Mediation support for AdMob and AppLovin MAX
- 🎨 Redesigned native ad API
- 📊 Enhanced analytics and reporting
- 🔒 Improved privacy compliance (GDPR, CCPA, COPPA)
Supported Ad Formats
- Banner Ads (320x50, 300x250, 728x90)
- Interstitial Ads
- Rewarded Video Ads
- Native Ads
Migration Guide from v1.x
Initialization:
swift
// Old (v1.x)
OperaAdsSDK.initialize(appId: "xxx")
// New (v2.0+)
let config = OpAdxSdkInitConfig.create(
applicationId: "pub{}/ep{}/app{}",
iOSAppId: "123456"
)
OpAdxSDK.initialize(withConfig: config)Banner Ads:
swift
// Old (v1.x)
let banner = OperaBannerView(frame: frame)
banner.load(placementId: "xxx")
// New (v2.0+)
let banner = OpAdxBannerAdView()
banner.setPlacementId("sxxx")
banner.setAdSize(.BANNER_MREC)
banner.loadAd(listener: listener)Interstitial Ads:
swift
// Old (v1.x)
OperaInterstitial.load(placementId: "xxx") { ad in
ad.show()
}
// New (v2.0+)
let ad = OpAdxInterstitialAd(placementId: "sxxx", auctionType: .regular)
ad.load(placementId: "sxxx", listener: loadListener)
// Later...
ad.show(on: self, listener: interactionListener)Deprecation Notice
Deprecated APIs
v2.0.0 - Removed v1.x APIs:
OperaAdsSDK→ UseOpAdxSDKOperaBannerView→ UseOpAdxBannerAdViewOperaInterstitial→ UseOpAdxInterstitialAdOperaRewardedVideo→ UseOpAdxRewardedAdOperaNativeAd→ UseOpAdxNativeAd
Minimum Requirements
| SDK Version | iOS Version | Xcode | Swift |
|---|---|---|---|
| 2.9.0 | 13.0+ | 14.0+ | 5.0+ |
| 2.8.3 | 13.0+ | 14.0+ | 5.0+ |
| 2.8.0 | 13.0+ | 14.0+ | 5.0+ |
| 2.7.0 | 13.0+ | 14.0+ | 5.0+ |
| 2.6.0 | 13.0+ | 14.0+ | 5.0+ |
| 2.5.0 | 13.0+ | 14.0+ | 5.0+ |
| 2.4.0 | 13.0+ | 14.0+ | 5.0+ |
| 2.3.0 | 13.0+ | 14.0+ | 5.0+ |
| 2.2.0 | 13.0+ | 13.0+ | 5.0+ |
| 2.1.0 | 13.0+ | 13.0+ | 5.0+ |
| 2.0.0 | 13.0+ | 13.0+ | 5.0+ |
Upgrade Guide
From v2.8.x to v2.9.x
No breaking changes. Update your Podfile:
ruby
pod 'OpAdxSdk', '~> 2.9.0'Then run:
bash
pod update OpAdxSdkFrom v2.7.x to v2.8.x
No breaking changes. Update your Podfile:
ruby
pod 'OpAdxSdk', '~> 2.8.3'Then run:
bash
pod update OpAdxSdkFrom v2.6.x to v2.7.x
Update initialization to use callbacks (recommended but not required):
swift
// Old (still works)
OpAdxSdkCore.shared.initialize(initConfig: config)
// New (recommended)
OpAdxSDK.initialize(
withConfig: config,
onSuccess: {
print("SDK initialized")
},
onError: { error in
print("Init failed: \(error)")
}
)From v2.3.x to v2.4.x
Update SSV configuration if using rewarded ads:
swift
// New SSV API in v2.4.0+
let ssvOptions = RewardSsvOptions.Builder()
.userId("user_12345")
.customData("level=5")
.build()
rewardedAd.setRewardSsvOptions(ssvOptions)From v1.x to v2.x
Complete migration required. See v2.0.0 migration guide above.
Known Issues
Version 2.9.0
- No known issues
Version 2.8.3
- Banner ads may occasionally show blank on iOS 13.0-13.2 devices (fixed in 2.9.0)
- Native ad media view may flicker during rotation on iPadOS (investigating)
Version 2.8.0
- App Open ads may delay app launch by 200-300ms on first cold start (optimization in progress)
Workarounds
- For iOS 13.0-13.2 banner issues: Use
setAdSize(.BANNER)instead of.BANNER_MREC - For App Open delay: Preload App Open ads after SDK initialization completes
Getting Support
Documentation
Resources
- Publisher Portal: https://publisher.opera.com
- Technical Support: Contact Opera Ads Support
- Bug Reports: GitHub Issues
- Demo Apps:
/OpAdxSdkDemo_Swift/and/OpAdxSdkDemo_OC/
Last Updated: 2026-03-24
