In-game advertentie-integratie
Laatst bijgewerkt: 2026-08-11
Integreer Banner-, interstitial- en rewarded-advertenties via de PlayNova host-bridge. Je game draait in een iframe en communiceert met de host via postMessage — embed geen third-party advertentie-SDK's in het pakket.
Hoe monetisatie werkt
PlayNova vult advertenties aan hostzijde en deelt omzet met gecertificeerde makers (standaard 70% maker). Games vragen alleen show/load aan; de host beheert inventaris, frequentielimieten en impression/click-rapportage.
Envelope voor elk bericht:
{ "source": "...", "type": "...", "payload": { } }- Games moeten
sourceinstellen opplaynova-game - De host antwoordt met
sourceplaynova-host
Advertentieformaten:
- Rewarded — speler opt-in (revive, dubbele beloning, gratis item). Geef beloningen alleen na
ads.rewarded_completed. - Interstitial — natuurlijke pauzes (level voltooid / game over). Nooit tijdens invoer.
- Banner — host-eigen strip; game vraagt alleen show/hide aan.
Aanbevolen placements
Geef altijd een stabiele placement-string door voor analytics en limieten. Gebruik de platformnamen hieronder:
| Placement | Use case |
|---|---|
revive | Doorgaan na falen |
double_reward | Bonus einde level |
free_item / unlock | Verbruiksitem of content unlock |
level_complete / level_start / game_over / pause | Interstitial-momenten |
banner_bottom / banner_top | Banner-slots |
Integratiestroom
- Roep bij een natuurlijke pauze
ads.load_*aan metplacement(en optionelerequestId). - Wacht op
ads.*_loaded(of behandel*_faileden ga door zonder advertenties). - Roep
ads.show_*aan met dezelfderequestId/placement. - Voor rewarded: wijzig gamestatus alleen bij
ads.rewarded_completed. Bij dismissed/failed geen beloning.
Bridge-berichttypen
Canonieke type-strings staan in playnova-web (ads-bridge). Houd je gamepakket aligned met deze exacte waarden.
Game → host
| type | Doel |
|---|---|
ads.load_rewarded | Rewarded-inventaris preloaden |
ads.show_rewarded | Rewarded tonen (beloning alleen na voltooiing) |
ads.load_interstitial | Interstitial preloaden |
ads.show_interstitial | Interstitial tonen bij pauze |
ads.show_banner | Host Banner zichtbaar aanvragen |
ads.hide_banner | Host Banner verbergen |
ads.preload | Meerdere formaten preloaden |
ads.get_banner_height | Bannerhoogte opvragen voor layout |
Host → game
| type | Doel |
|---|---|
ads.rewarded_loaded | Rewarded klaar om te tonen |
ads.rewarded_failed | Rewarded load/show mislukt |
ads.rewarded_completed | Rewarded voltooid — veilig om te geven |
ads.rewarded_dismissed | Rewarded vroeg gesloten — niet geven |
ads.interstitial_loaded | Interstitial klaar |
ads.interstitial_failed | Interstitial mislukt |
ads.interstitial_closed | Interstitial gesloten |
ads.banner_shown | Banner zichtbaar |
ads.banner_hidden | Banner verborgen |
ads.banner_failed | Banner mislukt |
Kopieer-plak helper
Plak in je index.html (of module). Vervang beloningsverlening door je eigen gamelogica.
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);
});
}
// Voorbeeld: revive-stroom
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') {
// beloning ALLEEN hier geven
}
});Productieregels
- Geen auto-klik, geforceerde loops of verbergen van Close / Skip.
- Geen beloningen zonder
ads.rewarded_completedvoor dierequestId. - Respecteer host-fouten: lege inventaris, ga soepel verder.
- Prefereer load vóór show voor minder wachten bij trigger.
- Pakketten zonder third-party advertentie-SDK's, trackers of pop-under scripts.
- Interstitial-frequentie wordt afgedwongen door host; show-spam kan worden genegeerd.
FAQ
Kan ik AdMob / Unity Ads in de zip gebruiken?
Nee. PlayNova aggregeert vraag op de host. Andere SDK's embedden faalt review en breekt iframe sandbox-aannames.
Wat als de host niet antwoordt?
Behandel stilte of *_failed als no-fill. Ga door zonder speler te blokkeren met eindeloze spinner.
Waar zie ik omzet?
Na live advertenties in productie gaan impressions en omzet naar maker-analytics. Afrekening volgens programmavoorwaarden.
Host-bridge is live op de speelpagina. Berichttypen hierboven zijn het productiecontract — implementeer ze nu.
