Реалізація Interstitial Ads для мобільної гри
Interstitial у грах — формат з найбільшим ризиком негативного UX. Показати у невідповідний момент значить отримати 1-зіркової відзив «реклама прямо під час гри». Показувати рідко і у правильних точках — значить мати стабільний джерело доходу без шкоди для retention. Google Play та App Store відхиляють ігри з interstitial, що показується «несподівано» — це буквально пункт у правилах.
Правильні точки показу у грі
Тільки у переходних станах. Між рівнями, на екрані результата, при повороту в головне меню — так. Під час геймплею, при натиску паузи, при старті рівня — ніколи.
На Unity зручно управляти показом через конечний автомат стану гри:
public enum GameState { MainMenu, LoadingLevel, Playing, LevelComplete, GameOver }
private void OnStateChanged(GameState newState) {
switch (newState) {
case GameState.LevelComplete:
case GameState.GameOver:
TryShowInterstitial();
break;
}
}
Cooldown та частота
Мінімальний cooldown між показами — 30–60 секунд. На практиці для казуальних ігр добре роботає «раз у 2–3 рівня» або «раз у 3 хвилини ігрового часу», що наступить раніше:
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;
}
}
Cooldown зберігаємо у PlayerPrefs — при убійстві застосунку та перезапуску не повинно бути «накопленого» показу одразу при старті.
Предзавантаження та обробка станів
Interstitial завантажується заранее — при ініціалізації або одразу після попереднього показу. Затримка при запиті у момент показу руйнує UX. Схема: OnSceneLoaded → LoadInterstitial().
Якщо реклама не завантажилась (нема мережі, нема fill) — гра продовжується без реклами, користувач не видить жодних помилок. Не блокуємо прогрес відсутністю реклами.
Не показуємо платящим гравцям. Якщо користувач має активну підписку або купив «відключення реклами» — interstitial не повинен з'являтись. Перевірка через флаг у профілі користувача, збережений локально та синхронізований з сервером.
A/B-тестування параметрів
AdMob підтримує вбудоване A/B-тестування для параметрів медіації. Але для ігрової логіки (cooldown, кількість рівнів між показами) Firebase Remote Config зручніше:
var cooldown = RemoteConfig.GetValue("interstitial_cooldown_seconds").DoubleValue;
var levelsBetween = RemoteConfig.GetValue("levels_between_interstitials").LongValue;
Типовой експеримент: група A показує кожні 2 рівня, група B — кожні 4. Метрика успіху — не тільки eCPM, але й D1/D7 retention. Агресивна частота легко піднімає короткочасний доход і убиває retention.
Терміни реалізації — 1–2 дні з cooldown-логікою, правильними placements та інтеграцією Remote Config.







