Skip to content

Opera Ads iOS SDK - Release Notes ​

Version 2.15.0 (2026-10-10) ​

New Features ​

  • 🔗 Content URL: Added OpAdxAdLoadRequest, carrying an optional contentUrl that is sent with the ad request as OpenRTB app.content.url so advertisers can map their ads to the content around them. Supported on every ad format for regular and client-bidding loads, on getBidToken() for server bidding, and through the TopOn adapter via the kOpAdxToponContentUrl local extra. See Content URL.
  • 🖼️ Native Creatives in Other Placements: Banner, interstitial and app open placements can now also be filled by native creatives, widening the pool of demand available to them. No code change is required — enable Allow native ads mixed on the placement to turn it on.

Behavior Changes ​

  • ⚠️ Stricter Bid Validation: A bid without a recognised creative type (mtype) is now discarded instead of being guessed at. This removes a class of broken renders, and may show up as a small fill-rate drop against misconfigured demand.
  • ⚠️ No Native Demand for Rewarded: Rewarded and rewarded interstitial placements no longer request native creatives, which never rendered correctly there.
  • ⚠️ Cached Ad Reuse: A cached ad is now only reused for the same auction type it was loaded with, so a regular load can no longer pick up an ad loaded for bidding, or the reverse.

Improvements ​

  • ⚡ Connection Warm-Up: Media hosts referenced by the ad markup are resolved and connected ahead of playback, cutting the delay before a video creative starts.
  • 📶 Network-Aware Creatives: Creatives can read the current connection type, so heavy assets can be adapted on a metered or slow network.
  • 📊 Reporting: Added bidder id to ad track events, the clearing price to AdBidEvent, win/loss events for client bidding, and separate image/video reporting for native media views.
  • 🔌 AdMob Adapter: Native video state is now reported to AdMob, so the mediated ad correctly advertises whether it holds a video.

Bug Fixes ​

  • 🐛 Render Diagnostics: Banners and native ads whose views are hidden, zero-sized or transparent at impression time are now reported, making integration mistakes visible instead of silently burning impressions.
  • 🛡️ Stability: Various fixes around ad markup validation and the MRAID bridge.

Native creatives outside native placements

This is off unless Allow native ads mixed is enabled on the placement, and it also requires ad template v2.8.0 or later. Where either is missing, the placement keeps serving banner and video creatives exactly as before.


Version 2.14.0 (2026-09-02) ​

Version 2.13.x was skipped; 2.14.0 follows 2.12.1 directly.

New Features ​

  • 🆕 onAdOpened Callback: Added to AdInteractionListener, fired when the fullscreen ad container is presented
  • 🆔 Bid ID: Added AdBid.getBidId, also exposed on banner ad info
  • 🔌 AdMob Adapter: Added rewarded interstitial support

Behavior Changes ​

  • ⚠️ onAdDisplayed Timing: Now reported once, together with the impression, instead of on every viewDidAppear. This removes the duplicate mediation impression previously reported on each return from a landing page.
  • ⚠️ Host Audio Session: The SDK no longer configures the shared AVAudioSession. If your app relied on this, configure it yourself.
  • ⚠️ Backgrounded Show: Showing a fullscreen ad while the app is in the background is now refused instead of booking an impression. Brief interruptions — Control Centre, permission prompts, the app switcher — no longer count as backgrounded.
  • 🔄 Ad Identifiers: The advertising id and ATT status are re-read when the app returns to the foreground, so an ATT prompt shown after SDK initialization now takes effect.

Improvements ​

  • ✅ Open Measurement: Passed OM SDK mobile app compliance renewal, including the native ad test suite
  • 📱 Bid Request: Corrected device type, screen density, ATT/LMT signals and video fields for better DSP compatibility

Bug Fixes ​

  • 🛡️ Stability: Fixed a crash on incomplete ad and bid token requests, and a race when destroying a fullscreen ad
  • 📊 Impression Reporting: Fixed cases where an impression could go unreported
  • 🐛 Various other bug fixes

Version 2.12.1 (2026-08-13) ​

Maintenance release. No API changes — a drop-in replacement for 2.12.0.

Bug Fixes ​

  • 🔒 Analytics Crash: Fixed a data race on the pending-event list that could corrupt memory and crash on the analytics upload thread. The list is now confined to a single thread, verified with Thread Sanitizer.
  • 📐 TopOn Banner Size: Banner sizes outside the supported set now fall back to 320×50 instead of being passed through unvalidated. Supported sizes are 320×50, 300×250, 300×50, 320×100, 320×480, 468×60 and 728×90.

Improvements ​

  • ⚡ Main Thread: Device and location information is now served from non-blocking caches, and the network retry and HTTP paths no longer park a thread waiting on a semaphore. This lowers ANR risk during SDK initialization and on slow or unreachable networks.
  • 📉 Logging Overhead: Analytics log messages are no longer built in release builds.

Version 2.12.0 (2026-08-03) ​

New Features ​

  • 🎬 Native Video Ads: Native ads now support video creatives, rendered through OpAdxMediaView
  • 🔔 Video Playback Events: Added setVideoPlaybackEventListener on native ads for start/pause/resume/end/mute callbacks

Behavior Changes ​

  • ⚠️ Banner Auto-Refresh: Auto-refresh is now enabled by default and follows the refresh interval configured for the placement. If you manage refresh yourself, call setAutoRefreshEnabled(false).

Improvements ​

  • 📦 Smaller Framework: Reduced xcframework size
  • 🔌 TopOn Adapter: Verified against TopOn SDK v6.5.48 (minimum supported remains 6.5.34)

Bug Fixes ​

  • 🛡️ Stability: Improved SDK initialization stability and network error handling
  • 🐛 Various other bug fixes

Version 2.11.2 (2026-06-29) ​

New Features ​

  • 🔌 TradPlus Adapter: Added TradPlus mediation adapter
  • 🔌 LevelPlay Adapter: Added ironSource LevelPlay mediation adapter

Improvements ​

  • ⚡ Ad Rendering: Optimized ad rendering latency during scrolling

Version 2.11.1 (2026-05-22) ​

New Features ​

  • 📦 Swift Package Manager: Added SPM support via Package.swift

Bug Fixes ​

  • 🔒 Thread Safety: Fixed thread safety issues for file-level mutable variables

Version 2.9.1 (2026-04-08) ​

Improvements ​

  • ⚡ App Startup Performance: Reduced ANR risk with further main thread optimizations
  • 🔌 TopOn Adapter: Updated TopOn adapter, compatible with TopOn SDK v6.5.34 and above
  • Performance optimizations and bug fixes

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/endImpression lifecycle
  • 🛒 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.skadnetwork to Info.plist SKAdNetworkItems for 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 ​

  • 🎯 Improved price reporting in the AdMob, AppLovin MAX and TopOn custom-network adapters
  • 🚀 Enhanced Client Bidding (C2S) APIs with improved error handling
  • 📱 App Open Ad format support added to the mediation adapters

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: Adapter improvements and bug fixes
  • 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 Bidding (C2S) support for auctions you run in your app
  • 📡 New Client 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 ads

Version 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 Server Bidding (S2S) support — run the auction on your own server with Opera Ads as a bidder
  • 📡 Bid token APIs
  • 🔗 TopOn adapter: serve Opera Ads through the TopOn waterfall as a custom network (unrelated to S2S bidding)

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 → Use OpAdxSDK
  • OperaBannerView → Use OpAdxBannerAdView
  • OperaInterstitial → Use OpAdxInterstitialAd
  • OperaRewardedVideo → Use OpAdxRewardedAd
  • OperaNativeAd → Use OpAdxNativeAd

Minimum Requirements ​

SDK VersioniOS VersionXcodeSwift
2.15.013.0+16.0+5.0+
2.14.013.0+16.0+5.0+
2.12.113.0+16.0+5.0+
2.12.013.0+16.0+5.0+
2.11.213.0+16.0+5.0+
2.11.113.0+14.0+5.0+
2.9.113.0+14.0+5.0+
2.9.013.0+14.0+5.0+
2.8.313.0+14.0+5.0+
2.8.013.0+14.0+5.0+
2.7.013.0+14.0+5.0+
2.6.013.0+14.0+5.0+
2.5.013.0+14.0+5.0+
2.4.013.0+14.0+5.0+
2.3.013.0+14.0+5.0+
2.2.013.0+13.0+5.0+
2.1.013.0+13.0+5.0+
2.0.013.0+13.0+5.0+

Upgrade Guide ​

From v2.14.x to v2.15.0 ​

No breaking changes — the existing initializers and loadAd methods are unchanged, and the new OpAdxAdLoadRequest overloads sit next to them. Review the Behavior Changes above, in particular the stricter bid validation. Update your Podfile:

ruby
pod 'OpAdxSdk', '~> 2.15.0'

If you use a mediation adapter, update it to 2.15.0.0 as well.

Then run:

bash
pod install --repo-update

From v2.12.x to v2.14.0 ​

No breaking changes, but review the Behavior Changes above — in particular the onAdDisplayed timing change. Update your Podfile:

ruby
pod 'OpAdxSdk', '~> 2.14.0'

If you use a mediation adapter, update it to 2.14.0.0 as well.

Then run:

bash
pod install --repo-update

From v2.11.x to v2.12.1 ​

No breaking changes. Update your Podfile:

ruby
pod 'OpAdxSdk', '~> 2.12.1'

If you use a mediation adapter, update it to 2.12.1.0 as well. Note that ~> 2.12.0.0 resolves to < 2.12.1, so an adapter pinned that way will not pick up 2.12.1.0 on its own.

Then run:

bash
pod install --repo-update

From v2.9.1 to v2.11.1 ​

No breaking changes. Update your Podfile:

ruby
pod 'OpAdxSdk', '~> 2.11.1'

Then run:

bash
pod install --repo-update

From v2.9.0 to v2.9.1 ​

No breaking changes. Update your Podfile:

ruby
pod 'OpAdxSdk', '~> 2.9.1'

Then run:

bash
pod update OpAdxSdk

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 OpAdxSdk

From v2.7.x to v2.8.x ​

No breaking changes. Update your Podfile:

ruby
pod 'OpAdxSdk', '~> 2.8.3'

Then run:

bash
pod update OpAdxSdk

From 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.11.1 ​

  • No known issues

Version 2.9.1 ​

  • No 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-10-22