Unity LevelPlay
Rewarded Video
Ad Mediation
AdMob
AppLovin
Mobile Monetization

Unity Ad Monetization Guide using Unity LevelPlay: Rewarded Ads & Network Mediation (Part 2)

5 min read
Eshan Naithani

Welcome to Part 2 of our 3-Part Unity LevelPlay Ad Monetization Masterclass:

In this second installment, we focus on Rewarded Video Adsโ€”the highest-earning ad format in mobile gaming. We cover C# LevelPlayRewardedAd implementation, Server-to-Server (S2S) reward validation to prevent reward spoofing, and integrating third-party demand networks (Google AdMob, AppLovin, Meta Audience Network) into your LevelPlay dashboard.


1. Rewarded Video Architecture & Reward Validation

Rewarded ads allow players to voluntarily watch a 30-second video in exchange for in-game assets (e.g., extra lives, 2x coin multipliers, revive after defeat).

Preventing Reward Fraud: S2S vs Client Validation

  • Client Validation: The LevelPlay SDK fires an event (OnAdRewarded) directly to the client. Easy to set up, but vulnerable to memory manipulation on rooted Android devices.
  • Server-to-Server (S2S) Validation: LevelPlay servers ping your backend (Firebase Cloud Functions / PlayFab) with a signed cryptographic payload once the ad completes. Your backend then credits the player's account securely.

2. Production C# Rewarded Ad Implementation (LevelPlayRewardedAd)

Extend your LevelPlayAdManager to support Rewarded Video placement handling and auto-reloading.

CSHARP
using System;
using UnityEngine;
using com.unity3d.mediation;

public class LevelPlayRewardedManager : MonoBehaviour
{
    [Header("Rewarded Ad Unit ID")]
    [SerializeField] private string rewardedAdUnitId = "Rewarded_Android";

    private LevelPlayRewardedAd rewardedAd;

    private void Start()
    {
        // Register for LevelPlay Init Complete event
        LevelPlay.OnInitSuccess += (config) => SetupRewardedAd();
    }

    private void SetupRewardedAd()
    {
        Debug.Log($"[LevelPlay Rewarded] Initializing Rewarded Ad Unit: {rewardedAdUnitId}");
        rewardedAd = new LevelPlayRewardedAd(rewardedAdUnitId);

        // Register Rewarded Callback Handlers
        rewardedAd.OnAdLoaded += OnRewardedAdLoaded;
        rewardedAd.OnAdLoadFailed += OnRewardedAdLoadFailed;
        rewardedAd.OnAdDisplayed += OnRewardedAdDisplayed;
        rewardedAd.OnAdRewarded += OnRewardedAdRewarded;
        rewardedAd.OnAdClosed += OnRewardedAdClosed;

        // Preload initial rewarded ad
        rewardedAd.LoadAd();
    }

    private void OnRewardedAdLoaded(LevelPlayAdInfo adInfo)
    {
        Debug.Log($"[LevelPlay Rewarded] Ad Loaded Successfully! Revenue eCPM: ${adInfo.Revenue}");
    }

    private void OnRewardedAdLoadFailed(LevelPlayAdError error)
    {
        Debug.LogError($"[LevelPlay Rewarded Error] Load Failed: {error.ErrorMessage}");
    }

    private void OnRewardedAdDisplayed(LevelPlayAdInfo adInfo)
    {
        Debug.Log("[LevelPlay Rewarded] Player started watching rewarded video.");
    }

    // =========================================================================
    // GRANT REWARD CALLBACK
    // =========================================================================
    private void OnRewardedAdRewarded(LevelPlayAdInfo adInfo, LevelPlayReward reward)
    {
        Debug.Log($"[LevelPlay Reward Success] Player completed video! Granting {reward.Amount} x {reward.Name}");
        
        // Grant reward locally (or trigger S2S backend check)
        GrantPlayerInGameReward(reward.Name, reward.Amount);
    }

    private void OnRewardedAdClosed(LevelPlayAdInfo adInfo)
    {
        Debug.Log("[LevelPlay Rewarded] Ad closed. Preloading next rewarded video...");
        rewardedAd.LoadAd(); // Auto-preload next ad
    }

    public void ShowRewardedAdButton()
    {
        if (rewardedAd != null && rewardedAd.IsAdReady())
        {
            Debug.Log("[LevelPlay Rewarded] Showing Rewarded Video Ad...");
            rewardedAd.ShowAd();
        }
        else
        {
            Debug.LogWarning("[LevelPlay Warning] Rewarded Ad is not loaded yet.");
        }
    }

    private void GrantPlayerInGameReward(string rewardType, int amount)
    {
        if (rewardType == "Gems")
        {
            PlayerPrefs.SetInt("UserGems", PlayerPrefs.GetInt("UserGems", 0) + amount);
        }
        else
        {
            PlayerPrefs.SetInt("UserCoins", PlayerPrefs.GetInt("UserCoins", 0) + amount);
        }
    }
}

3. Configuring Ad Network Mediation in LevelPlay

To maximize eCPM competition, add major ad networks to your LevelPlay Dashboard under Setup > SDK Networks.

Required Network Adapter Packages & Setup

Ad Network Demand SourceBidding Model SupportedUnity Package AdapterSetup Prerequisite
Google AdMobIn-App Bidding & WaterfallAdMobAdapterRequires AdMob App ID in AndroidManifest.xml
AppLovin MAX / ExchangeReal-Time BiddingAppLovinAdapterAdd AppLovin SDK Key to LevelPlay dashboard
Meta Audience NetworkBidding OnlyMetaAdapterRequires Meta Business Manager App Verification
Unity AdsBidding & WaterfallUnityAdsAdapterLink Unity Organization Account
MintegralBiddingMintegralAdapterExcellent eCPM performance for APAC region

[!TIP] Always prioritize Real-Time Bidding (Header Bidding) adapters over manual waterfalls. Real-time bidding forces demand networks to compete for every single impression in under 200ms.


4. Part 2 Summary & Next Steps

In this second installment, we implemented Rewarded Video Ads, set up C# completion callbacks, and configured multi-network ad mediation adapters across AdMob, AppLovin, and Meta.

๐Ÿ‘‰ Continue to Part 3: eCPM Optimization, A/B Testing, LiveOps & ARPDAU Maximization โ†’


๐Ÿ’ก Looking for a Custom Ad Monetization & LiveOps Strategy?

Struggling with low eCPMs, fill rates, or ad retention drops? I work directly with mobile game studios to architect high-yield ad waterfalls, IAP pricing, and LiveOps strategies:

  • High-eCPM Waterfall Architecture: Real-time bidding setup across AdMob, AppLovin, and LevelPlay.
  • Segmented Monetization: Tailored ad frequency caps for non-payers vs VIP players.
  • LiveOps & Retention Tuning: Balancing ad frequency to keep D30 retention strong.

๐Ÿ‘‰ Book a Game Monetization & LiveOps Strategy Session or reach out directly to discuss your game's revenue goals.


๐ŸŽฎ Shipped Mobile Games & Official Store Profiles

Explore live commercial titles built with Unity and published across official app stores:


Planning to monetize your mobile game or optimize your engineering budget? Check out our 2026 Mobile Game Development Cost Guide or book an engineering consultation.

Share this article

Looking to build a production-ready game?

See how I built Bird Sort Mania in 20 days using AI, or check out my full Mobile Games Portfolio to see my shipped titles on Android and iOS.

Join 5,000+ Game Developers

Get weekly insights on Unity performance optimization, AI gameplay architectures, and robust system design. No spam, just deep technical breakdowns.

Unsubscribe at any time. Your data is never shared.

Recommended Reading

More articles in Unity LevelPlay