Интеграция на реклами в играта
Последна актуализация: 2026-08-11
Интегрирайте Banner, interstitial и rewarded реклами чрез PlayNova host bridge. Играта работи в iframe и комуникира с хоста чрез postMessage — не вграждайте рекламни SDK на трети страни в пакета.
Как работи монетизацията
PlayNova попълва реклами от страна на хоста и споделя приходи с сертифицирани създатели (по подразбиране 70% създател). Игрите само искат show/load; хостът управлява инвентара, честотните ограничения и отчитането impression/click.
Плик за всяко съобщение:
{ "source": "...", "type": "...", "payload": { } }- Игрите трябва да зададат
sourceнаplaynova-game - Хостът отговаря с
sourceplaynova-host
Формати на реклами:
- Rewarded — opt-in на играча (revive, двойна награда, безплатен предмет). Давайте награди само след
ads.rewarded_completed. - Interstitial — естествени паузи (завършен level / game over). Никога по време на въвеждане.
- Banner — лента на хоста; играта само иска show/hide.
Препоръчани разположения
Винаги предавайте стабилен placement низ за аналитика и ограничения. Предпочитайте имената на платформата по-долу:
| Placement | Случай на употреба |
|---|---|
revive | Продължаване след неуспех |
double_reward | Бонус в края на level |
free_item / unlock | Consumable или отключване на съдържание |
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 | Rewarded load/show неуспешен |
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. - Уважавайте грешки на хоста: празен инвентар, продължете играта плавно.
- Предпочитайте load преди show за по-малко чакане.
- Пакети без рекламни SDK на трети страни, tracker-и или pop-under скриптове.
- Честотата interstitial се налага от хоста; spam show може да се игнорира.
ЧЗВ
Мога ли да използвам AdMob / Unity Ads в zip?
Не. PlayNova агрегира търсенето на хоста. Вграждането на други SDK проваля review и нарушава iframe sandbox предположенията.
Какво ако хостът не отговори?
Третирайте тишина или *_failed като no-fill. Продължете играта без блокиране с безкраен spinner.
Къде виждам приходите?
След live реклами в production impression и приходи отиват в аналитика на създателя. Уреждане според условията на програмата.
Host bridge е live на play страницата. Типовете съобщения по-горе са production договор — имплементирайте ги сега.
