Как реализовать гибкую систему показа рекламы на любом экране iOS приложения
Что проверяют
Умеете ли вы спроектировать рекламный слой, который не расползается по контроллерам: одна точка принятия решений, настройки с сервера, возможность сменить рекламную сеть. Следом спрашивают, как отключить рекламу подписчикам и как соблюсти требования App Tracking Transparency.
Как отвечать
Разложите систему на слои:
- абстракция над SDK: протокол вроде
AdProviderс загрузкой баннера, полноэкранной и rewarded-рекламы, под каждую сеть свой адаптер. Экраны не знают про SDK, и смена сети не трогает UI; - места показа: у каждого места свой идентификатор (
feed_inline,after_level), а удалённый конфиг решает, включено ли оно, какой формат, как часто показывать и какой интервал держать между полноэкранными показами. Новое место подключается без релиза логики; - координатор: единственный, кто отвечает на вопрос «показывать ли сейчас». Учитывает подписку (в StoreKit 2 через
Transaction.currentEntitlements), согласие пользователя, лимиты частоты и заранее предзагружает полноэкранную рекламу; - встраивание в UI: контейнер
AdSlotView, в SwiftUI обёрнутый черезUIViewRepresentable. Он держит место и схлопывается без рекламы. В ленте реклама идёт отдельным типом ячейки в diffable data source; - приватность: запрос
ATTrackingManager.requestTrackingAuthorizationдо обращения к IDFA, строкаNSUserTrackingUsageDescriptionв Info.plist, privacy manifest у подключаемых SDK; - аналитика: события запроса, заполнения, показа и клика, по ним идёт A/B-тест;
- жизненный цикл: колбэки SDK переводите на главный поток, объекты рекламы освобождайте при уходе с экрана.
Где спотыкаются
Вызывают SDK прямо во viewDidLoad каждого экрана. Проверка подписки и лимиты частоты копируются по проекту, а смена сети превращается в правку десятков файлов.
Показывают системный запрос ATT при первом запуске без объяснения, и большинство отказывает. Или читают IDFA без запроса, а он возвращается нулевым.
Вставляют баннер без резервирования места и показывают полноэкранную рекламу посреди действия пользователя. Вёрстка прыгает, случайных кликов становится больше, а рекламная сеть может ограничить показы за невалидный трафик.