In-game інтеграція реклами
Останнє оновлення: 2026-08-11
Інтегруйте Banner, interstitial та rewarded через host bridge PlayNova. Гра працює в iframe і спілкується з хостом через postMessage — не вбудовуйте сторонні рекламні SDK у пакет.
Як працює монетизація
PlayNova показує рекламу на стороні хоста та ділить дохід із сертифікованими творцями (за замовчуванням 70% творцю). Ігри лише запитують show/load; інвентар, частотні ліміти та звіти impressions/clicks обробляє хост.
Конверт для кожного повідомлення:
{ "source": "...", "type": "...", "payload": { } }- Ігри повинні встановити
sourceнаplaynova-game - Хост відповідає з
sourceplaynova-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 |
Потік інтеграції
- На природній паузі викличте
ads.load_*зplacement(і опціональнимrequestId). - Дочекайтеся
ads.*_loaded(або обробіть*_failedі продовжуйте без реклами). - Викличте
ads.show_*з тим самимrequestId/placement. - Для 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_loaded | Rewarded готовий до показу |
ads.rewarded_failed | Помилка load/show rewarded |
ads.rewarded_completed | Rewarded завершено — можна видати нагороду |
ads.rewarded_dismissed | Rewarded закрито рано — не видавати |
ads.interstitial_loaded | Interstitial готовий |
ads.interstitial_failed | Interstitial помилка |
ads.interstitial_closed | Interstitial закрито |
ads.banner_shown | Banner видимий |
ads.banner_hidden | Banner прихований |
ads.banner_failed | Banner помилка |
Helper для копіювання
Вставте в index.html (або модуль). Замініть видачу нагороди власною логікою гри.
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-контракт — реалізуйте їх зараз.
