Интеграция рекламной сети Яндекс.Рекламы в мобильное приложение
Яндекс Мобильные Рекламные Блоки (YandexMobileAds SDK) — один из немногих источников рекламного дохода, который стабильно работает для русскоязычной аудитории после 2022 года. Fill rate у Яндекса в России выше, чем у AdMob для того же трафика, особенно в категориях утилит, новостей и игр.
Подводные камни SDK
SDK Яндекса версии 7.x переработал инициализацию: теперь нужен явный MobileAds.initialize(context) в Application.onCreate(), а не ленивая инициализация при первом запросе. Старый паттерн работает, но первые 2–3 запроса к серверу проходят с задержкой ~800 мс — это видно на метрике time-to-first-ad.
На iOS похожая история: YMAMobileAds.initializeSdk() нужно вызывать в applicationDidFinishLaunching, до любых UI-операций. Если инициализация происходит позже (например, внутри lazy var), первые баннеры не показываются на холодном запуске — и это не фиксируется в Crashlytics, просто тихий miss.
Нативная реклама (YMANativeAd) требует обязательного указания adContainer и вызова bind(with:) до показа. Если биндинг не прошёл — YMANativeAdViewProtocol не рендерится, место остаётся пустым. Это типичная ошибка при использовании нативки в UITableViewCell: при переиспользовании ячейки нужно явно отвязывать предыдущий nativeAd через unbind().
Как мы подключаем
Android зависимости:
implementation 'com.yandex.android:mobileads:7.5.0'
// Если нужна медиация через AdMob
implementation 'com.yandex.ads.adapters:admob:7.5.0.0'
iOS (CocoaPods / SPM):
pod 'YandexMobileAds', '~> 7.5'
Для Android важно добавить в AndroidManifest.xml мета-тег с идентификатором партнёра — без него объявления не загружаются в production, только тестовые. Частая ошибка: разработчик тестирует на тест-ID, всё работает, а в релизе — ноль показов.
Форматы и специфика реализации
Sticky-баннер (YMAAdSize.stickySize(withContainerWidth:)) — адаптивный формат, который автоматически подбирает высоту под ширину контейнера. Не используйте фиксированный 320×50 — Яндекс его поддерживает, но fill rate адаптивного баннера выше примерно на 15–20% по нашим наблюдениям.
Rewarded отличается от других сетей тем, что событие rewardDidLoad срабатывает до показа, а сама награда передаётся в didReward(_ reward:). Если логика выдачи награды привязана к dismiss-событию — получите ситуацию, когда пользователь закрыл рекламу до конца, но награда уже начислена.
Интерстициал — отдельный инстанс YMAInterstitialAd на каждый показ. Переиспользование одного объекта для нескольких показов подряд — undefined behavior, который ломается на iOS 16+ с EXC_BAD_ACCESS при повторном вызове show().
Этапы интеграции
- Создание рекламного блока в Яндекс Партнёрском интерфейсе, получение
blockID - Добавление SDK и настройка инициализации в Application/AppDelegate
- Реализация форматов с правильными lifecycle-хуками
- GDPR/согласие —
YMAUserConsentдля EU-пользователей - Тестирование с demo-blockID (
R-M-DEMO-*), затем с реальными блоками - Мониторинг fill rate и RPM в Яндекс Партнёрском кабинете
Сроки: одиночный формат — 1 день, полная интеграция всех форматов с правильными lifecycle-хуками — 2–3 дня. Стоимость рассчитывается после обсуждения состава работ.







