Implementing Rewarded Ads for Mobile Games
Rewarded advertising in game context works differently than in regular apps. Here there's game economy, game states, session context. Poorly integrated rewarded is not just lost revenue, it's spoiled game experience.
Where Exactly to Embed in Game
Placement is selected deliberately — you need a point where player has real need they're ready to "pay" with watching:
Continue after fail — most converting placement. Player just lost, spent time, lost progress. Offer "Watch ad — continue from same spot" converts in 30–50% of cases in well-tuned games. Technically: show after onGameOver, before results screen. Limitation: 1–2 uses per attempt max, otherwise trivializes difficulty.
Daily bonus multiplier — "Watch ad — get x3 to daily reward". High conversion, doesn't break game balance, player doesn't feel pressure.
Extra currency / chest unlock — offer in main menu or after level. Works when offer is specific: "+50 gems" better than "bonus".
Technical Implementation on Unity
// Initialization in GameManager
private RewardedAd rewardedAd;
public void LoadRewardedAd() {
var adUnitId = Application.platform == RuntimePlatform.Android
? "ca-app-pub-xxx/yyy" : "ca-app-pub-xxx/zzz";
RewardedAd.Load(adUnitId, new AdRequest(), (ad, error) => {
if (error != null) { Debug.LogWarning($"Rewarded load failed: {error}"); return; }
rewardedAd = ad;
RegisterRewardedAdEvents(rewardedAd);
});
}
private void RegisterRewardedAdEvents(RewardedAd ad) {
ad.OnAdFullScreenContentClosed += () => {
LoadRewardedAd(); // start loading next immediately
};
}
public void ShowRewardedAd(System.Action<int> onRewarded) {
if (rewardedAd == null || !rewardedAd.CanShowAd()) {
Debug.Log("Rewarded not ready");
return;
}
rewardedAd.Show(reward => {
onRewarded?.Invoke(reward.Amount);
});
}
IronSource (LevelPlay) in Unity has different model: IronSource.Agent.loadRewardedVideo() needs calling in advance, availability state via IronSourceRewardedVideoEvents.onAdAvailableEvent. Button "Watch Ad" should be visible only when IronSource.Agent.isRewardedVideoAvailable() returned true.
Server Verification (SSV) for Game Currency
If rewarded gives hard currency (gems, crystals) — SSV is mandatory. Without verification rewards can be hacked with tools like Frida in minutes: intercept call and repeat as many times as needed.
Scheme: pass userId and unique nonce in customData when creating request. AdMob/IronSource include them in SSV-callback to your backend with ECDSA-signature. Server verifies signature, checks nonce uniqueness (so one callback doesn't pass twice), grants currency.
Client implementation takes half day, server part — 1 day with testing.
Limiting Displays
Number of rewarded per day should be limited on server level, not just client. Client limits are bypassed by PlayerPrefs reset. Server must know how many times user already got reward today and reject overflow.
Typical limits: 5–10 rewarded/day for currency, 1–2/day for continue. Too strict kills revenue, too loose destroys economy.
Timeline: basic integration with 2–3 placements and limits — 2 days. With SSV and server reward logic — 3 days.







