Implementing Interstitial Ads for Mobile Games
Interstitials in games — the format with highest UX risk. Show at wrong moment and you get 1-star review "ads right during gameplay". Show rarely and at right points — you have stable revenue source without retention damage. Google Play and App Store reject games with interstitials showing "unexpectedly" — it's literally in the rules.
Right Display Points in Game
Only in transition states. Between levels, on results screen, returning to main menu — yes. During gameplay, when pressing pause, at level start — never.
In Unity it's convenient managing via game state finite automaton:
public enum GameState { MainMenu, LoadingLevel, Playing, LevelComplete, GameOver }
private void OnStateChanged(GameState newState) {
switch (newState) {
case GameState.LevelComplete:
case GameState.GameOver:
TryShowInterstitial();
break;
}
}
Cooldown and Frequency
Minimum cooldown between shows — 30–60 seconds. In practice for casual games works well "every 2–3 levels" or "every 3 minutes game time", whichever comes first:
private float lastInterstitialTime = -999f;
private int levelsSinceLastAd = 0;
private const float COOLDOWN = 120f;
private const int LEVELS_BETWEEN_ADS = 3;
public bool CanShowInterstitial() {
return Time.time - lastInterstitialTime > COOLDOWN
&& levelsSinceLastAd >= LEVELS_BETWEEN_ADS;
}
public void OnLevelCompleted() {
levelsSinceLastAd++;
if (CanShowInterstitial()) {
ShowInterstitial();
lastInterstitialTime = Time.time;
levelsSinceLastAd = 0;
}
}
Store cooldown in PlayerPrefs — app shouldn't "accumulate" show on next restart.
Pre-loading and State Handling
Interstitial loads in advance — on init or right after previous show. Delay on request at show moment destroys UX. Scheme: OnSceneLoaded → LoadInterstitial().
If ad didn't load (no network, no fill) — game continues without ad, user sees no errors. Don't block progress by missing ad.
Don't show to paying players. If user has active subscription or bought "disable ads" — interstitial shouldn't appear. Check via flag in user profile, saved locally and synced with server.
A/B Testing Parameters
AdMob supports built-in A/B-testing for mediation parameters. But for game logic (cooldown, levels between shows) Firebase Remote Config is more convenient:
var cooldown = RemoteConfig.GetValue("interstitial_cooldown_seconds").DoubleValue;
var levelsBetween = RemoteConfig.GetValue("levels_between_interstitials").LongValue;
Typical experiment: group A shows every 2 levels, group B every 4. Success metric — not just eCPM but D1/D7 retention. Aggressive frequency easily raises short-term revenue and kills retention.
Timeline for implementation — 1–2 days with cooldown logic, right placements and Remote Config integration.







