MAX Adapter
AppLovin MAX -- Waterfall -- v1.0.3
1. Overview
The Oprello MAX adapter allows you to use Oprello as a demand source within your AppLovin MAX mediation stack. The adapter supports waterfall requests for all five ad formats.
Supported Formats
- Banner (320x50, 300x250, 728x90)
- Interstitial (full-screen video)
- Rewarded (full-screen video with rewards)
- Native (image-based)
- App Open (full-screen video)
Important Notes
- The adapter is waterfall-only -- in-app bidding is not supported.
- Adapter version:
1.0.3 - Requires AppLovin MAX SDK 12.0.0 or later.
2. Android Installation
Add the Oprello Ads SDK and MAX adapter as dependencies in your app module:
// app/build.gradle
dependencies {
// AppLovin MAX SDK
implementation 'com.applovin:applovin-sdk:12.3.1'
// Oprello Ads SDK (local AAR)
implementation(files("libs/oprello-ads-sdk.aar"))
// Oprello MAX Adapter (local AAR)
implementation(files("libs/oprello-max-adapter.aar"))
// Required SDK dependencies
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("com.squareup.moshi:moshi-kotlin:1.15.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
implementation("androidx.media3:media3-exoplayer:1.2.0")
}Contact us for the latest AAR files for both the SDK and adapter.
3. iOS Installation
Option A: CocoaPods
# Podfile
platform :ios, '12.0'
use_frameworks!
target 'YourApp' do
# AppLovin MAX SDK
pod 'AppLovinSDK', '>= 12.0.0'
# Oprello Adapter
pod 'OprelloAdapter', '~> 1.0.0'
endOption B: Manual Integration
- Add
OprelloAds.xcframeworkto your project (Embed & Sign). - Add the
OprelloAdapterSwift source files to your project. - Ensure
AppLovinSDKis included in your project.
The adapter requires the following system frameworks: UIKit, Foundation, AVFoundation, WebKit, and weakly links StoreKit and SafariServices.
4. MAX Dashboard Configuration
Configure Oprello as a custom network in your AppLovin MAX dashboard:
- Add Custom Network: In the MAX dashboard, go to Mediation > Manage > Networks. Click Add Custom Network.
- Network Settings:
- Network Name:
Oprello - Android Adapter Class:
com.oprello.maxadapter.OprelloMediationAdapter - iOS Adapter Class:
OprelloMediationAdapter
- Network Name:
- Ad Unit Configuration: For each ad unit in your waterfall, add the Oprello custom network and configure these server parameters:
{ "app_id": "YOUR_OPRELLO_APP_ID", "ad_unit_id": "YOUR_OPRELLO_AD_UNIT_ID" } - Set CPM Price: Set the manual eCPM for Oprello in your waterfall. This determines the ad unit's position in the waterfall.
5. How It Works
The adapter handles the full lifecycle automatically:
- Initialization: When MAX initializes the adapter, it calls
OprelloAdsManager.initialize()with theapp_idfrom server parameters. - Ad Loading: When your ad unit's waterfall reaches Oprello, the adapter creates the appropriate Oprello ad object, loads metadata, then loads assets.
- Ad Presentation: The adapter maps Oprello delegate callbacks to MAX listener callbacks, so your existing MAX integration code works without changes.
- Impression & Click Tracking: All tracking is handled automatically by the Oprello SDK and reported through MAX's reporting.
6. Code Integration
No adapter-specific code is needed in your app. Use the standard MAX APIs as usual:
Android Example
import com.applovin.mediation.*
// Banner
val bannerAd = MaxAdView("YOUR_MAX_AD_UNIT_ID", this)
bannerAd.setListener(adViewListener)
bannerAd.loadAd()
// Interstitial
val interstitialAd = MaxInterstitialAd("YOUR_MAX_AD_UNIT_ID", this)
interstitialAd.setListener(interstitialListener)
interstitialAd.loadAd()
// Rewarded
val rewardedAd = MaxRewardedAd.getInstance("YOUR_MAX_AD_UNIT_ID", this)
rewardedAd.setListener(rewardedListener)
rewardedAd.loadAd()iOS Example
import AppLovinSDK
// Banner
let bannerAd = MAAdView(adUnitIdentifier: "YOUR_MAX_AD_UNIT_ID")
bannerAd.delegate = self
bannerAd.loadAd()
// Interstitial
let interstitialAd = MAInterstitialAd(adUnitIdentifier: "YOUR_MAX_AD_UNIT_ID")
interstitialAd.delegate = self
interstitialAd.load()
// Rewarded
let rewardedAd = MARewardedAd.shared(withAdUnitIdentifier: "YOUR_MAX_AD_UNIT_ID")
rewardedAd.delegate = self
rewardedAd.load()The Oprello adapter will be called automatically when the waterfall reaches its configured position. MAX handles all the adapter lifecycle management.
7. Testing
To verify the adapter is loaded correctly:
- Enable MAX's mediation debugger to confirm Oprello appears as an initialized network.
- Filter Logcat (Android) or Xcode console (iOS) with
[OPRELLO-MAX-ADAPTER]to see adapter-specific logs. - Enable Oprello test mode for test creatives:
OprelloAdsTestManager.setTestMode(true)(Android) orOprelloAdsTestManager.setTestMode(enabled: true)(iOS). - Use the MAX mediation debugger to trigger test loads for specific networks.
Android Mediation Debugger
// Show MAX mediation debugger
MaxSdk.showMediationDebugger(activity)iOS Mediation Debugger
// Show MAX mediation debugger
ALSdk.shared().showMediationDebugger()8. Troubleshooting
Adapter not appearing in mediation debugger
Verify the adapter class name matches exactly in the MAX dashboard. Android: com.oprello.maxadapter.OprelloMediationAdapter. iOS: OprelloMediationAdapter.
Initialization failure
Check that the app_id in your MAX ad unit's custom network parameters matches your Oprello dashboard app ID.
No fill
Ensure the ad_unit_id parameter matches a valid ad unit in your Oprello dashboard and that the ad format matches (e.g., do not use a banner ad unit ID for an interstitial placement).
Missing dependencies (Android)
The Oprello SDK requires OkHttp, Moshi, Coroutines, and ExoPlayer. Ensure all dependencies listed in the installation section are included.