Oprello Logo
Back to Docs

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'
end

Option B: Manual Integration

  1. Add OprelloAds.xcframework to your project (Embed & Sign).
  2. Add the OprelloAdapter Swift source files to your project.
  3. Ensure AppLovinSDK is 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:

  1. Add Custom Network: In the MAX dashboard, go to Mediation > Manage > Networks. Click Add Custom Network.
  2. Network Settings:
    • Network Name: Oprello
    • Android Adapter Class: com.oprello.maxadapter.OprelloMediationAdapter
    • iOS Adapter Class: OprelloMediationAdapter
  3. 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"
    }
  4. 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:

  1. Initialization: When MAX initializes the adapter, it calls OprelloAdsManager.initialize() with the app_id from server parameters.
  2. Ad Loading: When your ad unit's waterfall reaches Oprello, the adapter creates the appropriate Oprello ad object, loads metadata, then loads assets.
  3. Ad Presentation: The adapter maps Oprello delegate callbacks to MAX listener callbacks, so your existing MAX integration code works without changes.
  4. 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:

  1. Enable MAX's mediation debugger to confirm Oprello appears as an initialized network.
  2. Filter Logcat (Android) or Xcode console (iOS) with [OPRELLO-MAX-ADAPTER] to see adapter-specific logs.
  3. Enable Oprello test mode for test creatives: OprelloAdsTestManager.setTestMode(true) (Android) or OprelloAdsTestManager.setTestMode(enabled: true) (iOS).
  4. 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.