Skip to content

In-game интеграция рекламы ​

Последнее обновление: 2026-08-11

Интегрируйте Banner, interstitial и rewarded через host bridge PlayNova. Игра работает в iframe и общается с хостом через postMessage — не встраивайте сторонние рекламные SDK в пакет.

Как работает монетизация ​

PlayNova показывает рекламу на стороне хоста и делит доход с сертифицированными создателями (по умолчанию 70% создателю). Игры только запрашивают show/load; инвентарь, частотные лимиты и отчёты impressions/clicks обрабатывает хост.

Конверт для каждого сообщения:

json
{ "source": "...", "type": "...", "payload": { } }
  • Игры должны установить source в playnova-game
  • Хост отвечает с source playnova-host

Форматы рекламы:

  • Rewarded — opt-in игрока (revive, двойная награда, бесплатный предмет). Выдавайте награды только после ads.rewarded_completed.
  • Interstitial — естественные паузы (уровень пройден / game over). Никогда во время ввода.
  • Banner — полоса хоста; игра только запрашивает show/hide.

Рекомендуемые placements ​

Всегда передавайте стабильную строку placement для аналитики и лимитов. Предпочитайте имена платформы ниже:

PlacementСценарий
reviveПродолжить после провала
double_rewardБонус в конце уровня
free_item / unlockРасходник или разблокировка контента
level_complete / level_start / game_over / pauseМоменты interstitial
banner_bottom / banner_topСлоты Banner

Поток интеграции ​

  1. На естественной паузе вызовите ads.load_* с placement (и опциональным requestId).
  2. Дождитесь ads.*_loaded (или обработайте *_failed и продолжите без рекламы).
  3. Вызовите ads.show_* с тем же requestId / placement.
  4. Для rewarded меняйте состояние игры только на ads.rewarded_completed. При dismissed/failed не выдавайте награду.

Типы bridge-сообщений ​

Канонические строки type определены в playnova-web (ads-bridge). Согласуйте пакет игры с этими точными значениями.

Игра → хост ​

typeНазначение
ads.load_rewardedПредзагрузка rewarded-инвентаря
ads.show_rewardedПоказ rewarded (награда только после завершения)
ads.load_interstitialПредзагрузка interstitial
ads.show_interstitialПоказ interstitial на паузе
ads.show_bannerЗапрос видимости Banner хоста
ads.hide_bannerСкрыть Banner хоста
ads.preloadПредзагрузка нескольких форматов
ads.get_banner_heightЗапрос высоты Banner для layout

Хост → игра ​

typeНазначение
ads.rewarded_loadedRewarded готов к показу
ads.rewarded_failedОшибка load/show rewarded
ads.rewarded_completedRewarded завершён — можно выдать награду
ads.rewarded_dismissedRewarded закрыт рано — не выдавать
ads.interstitial_loadedInterstitial готов
ads.interstitial_failedInterstitial ошибка
ads.interstitial_closedInterstitial закрыт
ads.banner_shownBanner виден
ads.banner_hiddenBanner скрыт
ads.banner_failedBanner ошибка

Helper для копирования ​

Вставьте в index.html (или модуль). Замените выдачу награды своей логикой игры.

js
function pnAds(type, payload) {
  parent.postMessage({ source: 'playnova-game', type, payload }, '*');
}
function onPnHost(handler) {
  window.addEventListener('message', (e) => {
    const d = e.data;
    if (!d || d.source !== 'playnova-host') return;
    handler(d);
  });
}
// Пример: поток revive
pnAds('ads.load_rewarded', { placement: 'revive' });
onPnHost((msg) => {
  if (msg.type === 'ads.rewarded_loaded') {
    pnAds('ads.show_rewarded', {
      requestId: msg.payload && msg.payload.requestId,
      placement: 'revive',
      reward: { type: 'life', amount: 1 },
    });
  }
  if (msg.type === 'ads.rewarded_completed') {
    // выдавать награду ТОЛЬКО здесь
  }
});

Правила production ​

  • Без auto-click, принудительных циклов и скрытия Close / Skip.
  • Не выдавайте награды без ads.rewarded_completed для этого requestId.
  • Уважайте ошибки хоста: пустой инвентарь — продолжайте игру.
  • Предзагружайте перед show, чтобы игрок меньше ждал.
  • Пакеты без сторонних рекламных SDK, трекеров и pop-under скриптов.
  • Частота interstitial контролируется хостом; spam show может игнорироваться.

FAQ ​

Можно ли использовать AdMob / Unity Ads в zip? ​

Нет. PlayNova агрегирует спрос на хосте. Встраивание других SDK провалит review и нарушит iframe sandbox.

Что если хост не отвечает? ​

Считайте тишину или *_failed как no-fill. Продолжайте игру без бесконечного spinner.

Где смотреть доход? ​

После запуска рекламы в production impressions и доход идут в аналитику создателя. Расчёты по условиям программы.


Host bridge активен на play-странице. Типы сообщений выше — production-контракт — реализуйте их сейчас.

Документация PlayNova для создателей