Мы держим эту таблицу для себя — по ней собираются наши плейблы. Выкладываем как есть: вес, формат, вызов CTA и то, обо что реально режут на модерации. Пользуйтесь, даже если собираете не у нас.
Звёздочкой отмечены три сети, под которые мы собираем по умолчанию: у всех трёх один self-contained HTML, MRAID и потолок 5 МБ, поэтому одна сборка закрывает все три.
| Сеть | Вес | Формат | Обвязка и вызов CTA | Что важно знать |
|---|---|---|---|---|
| Unity Ads★ | ≤ 5 МБ | single HTML | MRAID 3.0, инжектится webviewmraid.open(url) |
Ждать viewableChange до старта, обе ориентации, без XHR, нужны ссылки на оба стора.
iOS-ссылку подавать в легаси-виде itunes.apple.com/…/id<ID>?mt=8 — валидатор режет apps.apple.com как invalid, хотя тот просто редиректит. |
| AppLovin★ | ≤ 5 МБ | single HTML | MRAID 2.0mraid.open(url) |
Внешние запросы и аналитика — только с их одобрения. Autoplay запрещён дословно: таймер объявления стартует после первого взаимодействия, поэтому autoplay-fallback не делаем вовсе. |
| ironSource / LevelPlay★ | ≤ 5 МБ | single HTML | MRAID; у легаси-плейблов встречается DAPI | Ревью идёт через дашборд, публичного тест-тула нет — тем важнее чек-лист до отправки. |
| Meta / Facebook | ≤ 2 МБ single ≤ 5 МБ zip | single HTML в base64 или zip с index.html в корне | FbPlayableAd.onCTAClick() |
HTTP-запросов не должно быть вообще. Прогонять через их Playable Preview. |
| Google Ads | ≤ 5 МБ | zip с HTML | Exit API: ExitApi.exit() |
Заливается как interactive-ассет App campaigns, проверяется в HTML5 Validator. |
| Mintegral | ≤ 5 МБ | single HTML или zip | MRAID, сигнал конца игры window.gameEnd() |
Тестируется в Mindworks Playable Testing. |
| TikTok / Pangle | ≤ 5 МБ | zip | window.openAppStore() |
Обязателен config.json в корне: ориентация и список языков. |
| Vungle / Liftoff | ≤ 5 МБ | single HTML или zip | MRAID | Главный файл обязан называться ad.html, проверяется их Creative Verifier. |
Лимит сети — это порог отказа, а не цель. Между вашим файлом и проверкой стоят обёртка сети, base64 и разница версий, поэтому цель мы ставим ниже потолка. Для Unity, AppLovin и ironSource это ≤ 4,5 МБ, для Meta в single-файле — ≤ 1,8 МБ.
По нему проверяется каждая наша сборка, и этот же список приходит клиенту отчётом. Пункты 1, 2, 3, 6, 11 и 12 гоняются автопроверкой — не на глаз.
file:// без интернетаready и viewableChange; закрытие объявления не блокируетсяconfig.json, правильное имя файлаСвой чек-лист проверяет то, на что он настроен. Поэтому поверх идёт независимый гейт: он разбирает готовый файл заново и гоняет его в браузере в трёх вьюпортах — 390×844, 576×1024 и 844×390 — по тем же байтам, которые уйдут в сеть. Вердикт PASS / FAIL / BLOCKED идёт в отчёт как есть, вместе с SHA-256 каждого файла.
<script src="mraid.js"> — внешняя зависимость там, где всё должно быть внутри файла; чужой пакет и тестовый идентификатор приложения, спрятанные внутри упакованного слоя, куда обычная проверка по тексту не заглядывает.Шесть пунктов поверх основного чек-листа. Именно на них разворачивают креатив с гемблинг-оффером, когда технически всё в порядке.
Всё ниже — реальные возвраты и находки на наших наборах, а не теория из документации.
Валидатор помечает apps.apple.com как invalid и не пускает креатив. Работает только легаси-вид itunes.apple.com/<geo>/app/…/id<ID>?mt=8 — он всё равно редиректит куда надо.
Автоплей запрещён дословно: таймер объявления начинается с первого касания. Поэтому у нас нет самого механизма автозапуска, а не «выключен флажком».
FbPlayableAd или вызов другой сети, оставшийся в каскаде CTA от донора. Ветка может быть недостижима — для проверяющего это всё равно блокер. Увод сводим к одному определению.
Донорский <script src="mraid.js"> или любой относительный src: в self-contained файле внешних зависимостей быть не должно, а в webview этот путь просто не разрешится.
Стор-адрес или тестовый идентификатор приложения, зашитый в zip- или base64-слой донора. Поиск по тексту его не видит — нужен разбор упакованного содержимого.
В переиспользованном креативе остаётся дисклеймер другой юрисдикции. На новом гео это прямая причина отказа — вычищается вместе с локализацией.