Integracja reklam in-game
Ostatnia aktualizacja: 2026-08-11
Integruj reklamy Banner, interstitial i rewarded przez most hosta PlayNova. Gra działa w iframe i komunikuje się z hostem przez postMessage — nie osadzaj SDK reklamowych firm trzecich w pakiecie.
Jak działa monetyzacja
PlayNova serwuje reklamy po stronie hosta i dzieli przychody z certyfikowanymi twórcami (domyślnie 70% twórcy). Gry tylko żądają show/load; host zarządza inventory, limitami częstotliwości i raportowaniem impression/click.
Koperta dla każdej wiadomości:
{ "source": "...", "type": "...", "payload": { } }- Gry muszą ustawić
sourcenaplaynova-game - Host odpowiada z
sourceplaynova-host
Formaty reklam:
- Rewarded — opt-in gracza (revive, podwójna nagroda, darmowy przedmiot). Przyznawaj nagrody tylko po
ads.rewarded_completed. - Interstitial — naturalne przerwy (poziom ukończony / game over). Nigdy w trakcie inputu.
- Banner — pasek hosta; gra tylko żąda show/hide.
Zalecane placementy
Zawsze przekazuj stabilny string placement dla analityki i limitów. Preferuj nazwy platformy poniżej:
| Placement | Przypadek użycia |
|---|---|
revive | Kontynuacja po porażce |
double_reward | Bonus na końcu poziomu |
free_item / unlock | Consumable lub odblokowanie treści |
level_complete / level_start / game_over / pause | Momenty interstitial |
banner_bottom / banner_top | Sloty Banner |
Przepływ integracji
- W naturalnej przerwie wywołaj
ads.load_*zplacement(i opcjonalnymrequestId). - Czekaj na
ads.*_loaded(lub obsłuż*_failedi kontynuuj bez reklam). - Wywołaj
ads.show_*z tym samymrequestId/placement. - Dla rewarded zmieniaj stan gry tylko na
ads.rewarded_completed. Przy dismissed/failed nie przyznawaj nagrody.
Typy wiadomości bridge
Kanoniczne stringi type są zdefiniowane w playnova-web (ads-bridge). Dopasuj pakiet gry do tych dokładnych wartości.
Gra → host
| type | Cel |
|---|---|
ads.load_rewarded | Wstępne ładowanie inventory rewarded |
ads.show_rewarded | Pokaż rewarded (przyznaj tylko po ukończeniu) |
ads.load_interstitial | Wstępne ładowanie interstitial |
ads.show_interstitial | Pokaż interstitial w przerwie |
ads.show_banner | Żądaj widocznego Banner hosta |
ads.hide_banner | Ukryj Banner hosta |
ads.preload | Wstępne ładowanie wielu formatów |
ads.get_banner_height | Zapytaj wysokość Banner dla layoutu |
Host → gra
| type | Cel |
|---|---|
ads.rewarded_loaded | Rewarded gotowy do pokazania |
ads.rewarded_failed | Błąd load/show rewarded |
ads.rewarded_completed | Rewarded ukończony — bezpiecznie przyznać |
ads.rewarded_dismissed | Rewarded zamknięty wcześnie — nie przyznawać |
ads.interstitial_loaded | Interstitial gotowy |
ads.interstitial_failed | Interstitial nieudany |
ads.interstitial_closed | Interstitial zamknięty |
ads.banner_shown | Banner widoczny |
ads.banner_hidden | Banner ukryty |
ads.banner_failed | Banner nieudany |
Helper kopiuj-wklej
Wklej do index.html (lub modułu). Zamień przyznawanie nagrody na własną logikę gry.
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);
});
}
// Przykład: przepływ 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') {
// przyznaj nagrodę TYLKO tutaj
}
});Zasady produkcji
- Bez auto-click, wymuszonych pętli i zasłaniania Close / Skip.
- Nie przyznawaj nagród bez
ads.rewarded_completeddla tegorequestId. - Szanuj błędy hosta: puste inventory, kontynuuj grę normalnie.
- Preferuj load przed show, by gracz mniej czekał.
- Pakiety bez SDK reklamowych firm trzecich, trackerów i skryptów pop-under.
- Częstotliwość interstitial jest wymuszana przez host; spam show może być ignorowany.
FAQ
Czy mogę użyć AdMob / Unity Ads w zip?
Nie. PlayNova agreguje popyt na hoście. Osadzenie innych SDK nie przejdzie review i łamie założenia sandbox iframe.
Co jeśli host nie odpowiada?
Traktuj ciszę lub *_failed jako no-fill. Kontynuuj grę bez blokowania gracza nieskończonym spinnerem.
Gdzie widzę przychody?
Po uruchomieniu reklam w produkcji impression i przychody trafiają do analityki twórcy. Rozliczenie według warunków programu.
Most hosta jest aktywny na stronie gry. Typy wiadomości powyżej to kontrakt produkcyjny — zaimplementuj je teraz.
