Annonceintegration i spillet
Sidst opdateret: 2026-08-11
Integrer Banner-, interstitial- og rewarded-annoncer via PlayNova-værtens bridge. Dit spil kører i en iframe og kommunikerer med værten via postMessage — indlejr ikke tredjeparts annonce-SDK'er i pakken.
Sådan fungerer monetisering
PlayNova fylder annoncer på værtssiden og deler indtægter med certificerede skabere (standard 70% skaber). Spil anmoder kun om show/load; værten håndterer lager, frekvensgrænser og impression/klik-rapportering.
Konvolut for hver besked:
{ "source": "...", "type": "...", "payload": { } }- Spil skal sætte
sourcetilplaynova-game - Værten svarer med
sourceplaynova-host
Annonceformater:
- Rewarded — spiller opt-in (revive, dobbelt belønning, gratis genstand). Giv belønninger kun efter
ads.rewarded_completed. - Interstitial — naturlige pauser (niveau fuldført / game over). Aldrig midt i input.
- Banner — værtsejet bånd; spillet anmoder kun om show/hide.
Anbefalede placeringer
Send altid en stabil placement-streng til analyse og grænser. Brug platformnavnene nedenfor:
| Placement | Anvendelse |
|---|---|
revive | Fortsæt efter fejl |
double_reward | Bonus ved niveauafslutning |
free_item / unlock | Forbrugsvare eller indholdsoplåsning |
level_complete / level_start / game_over / pause | Interstitial-øjeblikke |
banner_bottom / banner_top | Banner-pladser |
Integrationsflow
- Ved naturlig pause, kald
ads.load_*medplacement(og valgfrirequestId). - Vent på
ads.*_loaded(eller håndter*_failedog fortsæt uden annoncer). - Kald
ads.show_*med sammerequestId/placement. - For rewarded, ændr spiltilstand kun ved
ads.rewarded_completed. dismissed/failed — giv ingen belønning.
Bridge-beskedtyper
Kanoniske type-strenge er defineret i playnova-web (ads-bridge). Hold dit spilpakke aligned med disse præcise værdier.
Spil → vært
| type | Formål |
|---|---|
ads.load_rewarded | Forudindlæs rewarded-lager |
ads.show_rewarded | Vis rewarded (giv kun efter fuldførelse) |
ads.load_interstitial | Forudindlæs interstitial |
ads.show_interstitial | Vis interstitial ved pause |
ads.show_banner | Anmod om synlig vært-Banner |
ads.hide_banner | Skjul vært-Banner |
ads.preload | Forudindlæs flere formater |
ads.get_banner_height | Forespørg Banner-højde til layout |
Vært → spil
| type | Formål |
|---|---|
ads.rewarded_loaded | Rewarded klar til visning |
ads.rewarded_failed | Rewarded load/show fejlede |
ads.rewarded_completed | Rewarded fuldført — sikkert at give |
ads.rewarded_dismissed | Rewarded lukket tidligt — giv ikke |
ads.interstitial_loaded | Interstitial klar |
ads.interstitial_failed | Interstitial fejlede |
ads.interstitial_closed | Interstitial lukket |
ads.banner_shown | Banner synlig |
ads.banner_hidden | Banner skjult |
ads.banner_failed | Banner fejlede |
Kopier-indsæt hjælper
Indsæt i index.html (eller modul). Erstat belønningsgivning med din egen spilogik.
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);
});
}
// Eksempel: revive-flow
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') {
// giv belønning KUN her
}
});Produktionsregler
- Ingen auto-klik, tvungne loops eller skjul Close / Skip.
- Giv ingen belønninger uden
ads.rewarded_completedfor detrequestId. - Respekter værtfejl: tomt lager, fortsæt spillet smidigt.
- Foretræk load før show for kortere ventetid.
- Pakker uden tredjeparts annonce-SDK'er, trackere eller pop-under scripts.
- Interstitial-frekvens håndhæves af værten; show-spam kan ignoreres.
FAQ
Kan jeg bruge AdMob / Unity Ads i zip?
Nej. PlayNova aggregerer efterspørgsel på værten. Indlejring af andre SDK'er fejler review og bryder iframe sandbox-antagelser.
Hvad hvis værten ikke svarer?
Behandl stilhed eller *_failed som no-fill. Fortsæt spillet uden at blokere spilleren med uendelig spinner.
Hvor ser jeg indtægter?
Efter live-annoncer i produktion går impressions og indtægter til skaberanalyse. Afregning efter programvilkår.
Vært-bridge er live på spilsiden. Beskedtyperne ovenfor er produktionskontrakten — implementer dem nu.
