Developers

Keep your mediation setup.

Choose the integration model that fits your app. Orivia can manage the mediation call, or your app can request an Orivia recommendation and make the call itself. Your existing ad-network relationships remain unchanged.

Integration

Two integration models

Both keep your mediation platform and ad-network relationships. They differ in who makes the call to MAX.

Compatibility

Platform compatibility

Availability and next steps vary by mediation platform.

Mediation platformStatusDetails
AppLovin MAXProductionProduction support documented for Android, iOS and Unity across interstitial, rewarded and banner formats.
Google AdMobTesting partner neededPublisher testing partner needed before production commitment.
Unity LevelPlayTechnical confirmationTechnical confirmation required at the ad-load integration point.
Other mediationTechnical reviewTechnical review required.

Reviewed October 2026. Orivia provides SDKs for Android, iOS and Unity; production status depends on the mediation platform listed above.

Quick start

Integrate with AppLovin MAX

The managed model in four steps. For the recommendation model, follow the Integration guide for your platform.

Platform
  1. Add the SDK

    Add the Orivia SDK and its AppLovin MAX module.

    Add the Orivia Maven repository and both modules.

    build.gradle.kts
    repositories {
        maven { url = uri("https://raw.githubusercontent.com/orivia-ai/orivia-maven/main") }
    }
    
    dependencies {
        implementation("ai.orivia:monetization:1.18.0")
        implementation("ai.orivia:mediation-max:1.18.0")
    }

    Add the Orivia specs repository and both pods, then run pod install.

    Podfile
    source 'https://github.com/orivia-ai/orivia-specs.git'
    source 'https://cdn.cocoapods.org/'
    
    pod 'OriviaMonetization', '1.18.0'
    pod 'OriviaMonetizationMax', '1.18.0'

    Import the orivia-sdk-max .unitypackage we provide, then reference the namespace.

    C#
    using Orivia.Monetization;
  2. Initialize

    Initialize with your publisher ID and default ad units. Orivia fetches its configuration, then initializes MAX. The default ad units are your fallback: use units with no floor or a $0.01 floor.

    Kotlin
    private val oriviaMaxSdk: OriviaMaxSdk by lazy { OriviaMaxSdk.getInstance(context) }
    
    fun start() {
        oriviaMaxSdk.onInterstitialLoadedListener = OriviaMaxSdk.OnAdLoadedListener {
            // Ad is ready to show. isInterstitialReady() == true.
        }
        oriviaMaxSdk.onRewardedLoadedListener = OriviaMaxSdk.OnAdLoadedListener {
            // Ad is ready to show. isRewardedReady() == true.
        }
    
        oriviaMaxSdk.init(
            sdkKey = MAX_SDK_KEY,
            publisherId = ORIVIA_PUBLISHER_ID,
            defaultInterstitialAdUnitId = INTERSTITIAL_AD_UNIT_ID,
            defaultRewardedAdUnitId = REWARDED_AD_UNIT_ID,
            initListener = {
                // Both Orivia SDK and MAX are ready — safe to start loading
                oriviaMaxSdk.loadInterstitial()
                oriviaMaxSdk.loadRewarded()
            }
        )
    }
    Swift
    func start() {
        OriviaMaxSdk.shared.onInterstitialLoaded = {
            // Ad is ready to show. isInterstitialReady() == true.
        }
        OriviaMaxSdk.shared.onRewardedLoaded = {
            // Ad is ready to show. isRewardedReady() == true.
        }
    
        OriviaMaxSdk.shared.initialize(
            sdkKey: maxSdkKey,
            publisherId: oriviaPublisherId,
            defaultInterstitialAdUnitId: interstitialAdUnitId,
            defaultRewardedAdUnitId: rewardedAdUnitId
        ) {
            // Both Orivia SDK and MAX are ready — safe to start loading
            OriviaMaxSdk.shared.loadInterstitial()
            OriviaMaxSdk.shared.loadRewarded()
        }
    }
    C#
    void Start()
    {
        OriviaMaxSdk.OnInterstitialLoaded += OnInterstitialLoaded;
        OriviaMaxSdk.OnRewardedLoaded += OnRewardedLoaded;
    
        MaxSdk.SetSdkKey(MaxSdkKey);
        OriviaMaxSdk.Init(
            publisherId: OriviaPublisherId,
            defaultInterstitialAdUnitId: InterstitialAdUnitId,
            defaultRewardedAdUnitId: RewardedAdUnitId,
            initListener: new InitListener()
        );
    }
    
    private class InitListener : OriviaMaxSdk.IInitListener
    {
        public void OnInitFinished()
        {
            // Both Orivia SDK and MAX are ready — safe to start loading
            OriviaMaxSdk.LoadInterstitial();
            OriviaMaxSdk.LoadRewarded();
        }
    }
  3. Make the mediation call

    Load and show through Orivia. Placement and custom data pass straight through to MAX.

    Kotlin
    oriviaMaxSdk.loadInterstitial()
    
    if (oriviaMaxSdk.isInterstitialReady()) {
        oriviaMaxSdk.showInterstitial("level_end")
    }
    Swift
    OriviaMaxSdk.shared.loadInterstitial()
    
    if OriviaMaxSdk.shared.isInterstitialReady() {
        OriviaMaxSdk.shared.showInterstitial(placement: "level_end")
    }
    C#
    OriviaMaxSdk.LoadInterstitial();
    
    if (OriviaMaxSdk.IsInterstitialReady)
        OriviaMaxSdk.ShowInterstitial("level_end");
  4. Validate

    In a debug build, turn on logging and check that initialization completes and ads load and show. Remove it before release. Our team reviews the integration with you before any traffic is allocated.

    Kotlin · logs appear in Logcat
    oriviaMaxSdk.setLoggingEnabled(true)
    Swift · logs appear in the Xcode console
    OriviaMaxSdk.shared.setLoggingEnabled(true)
    C# · logs appear in Logcat or the Xcode console
    OriviaMaxSdk.SetLoggingEnabled(true);

Fallback

Fallback behavior

  • Asynchronous optimization keeps ad requests moving. If Orivia times out, the SDK returns your configured default ad unit.
  • You choose the default. At initialization, supply a default ad unit with no floor or a $0.01 floor.
  • You stay in control. Adjust the test allocation or disable Orivia through dynamic configuration.

Fallback secures an impression opportunity, but it does not recreate custom ad-unit chains or parallel calls.

Data

What Orivia uses

Core inputs are ad requests, impressions and revenue data. Click data is not currently required. Publishers may supply additional behavioral context. Inputs support floor optimization, not ad targeting.

How the SDK reads consent is covered in the Privacy section of each platform guide.

Documentation and support

Platform guides

AdMob guides are in the SDK documentation (opens in a new tab).

Want an implementation review?

Tell us about your app and setup. Our team will go through the integration with you.

Start a Test

Find the revenue already inside your traffic.

Start with one app and controlled traffic. Measure the results before expanding.

Start a Test