Skip to content

Integrazione annunci in-game ​

Ultimo aggiornamento: 2026-08-11

Integra annunci Banner, interstitial e rewarded tramite il bridge host PlayNova. Il gioco gira in un iframe e comunica con l'host via postMessage — non incorporare SDK pubblicitari di terze parti nel pacchetto.

Come funziona la monetizzazione ​

PlayNova eroga annunci lato host e condivide i ricavi con creatori certificati (70% creatore di default). I giochi richiedono solo show/load; l'host gestisce inventario, limiti di frequenza e reporting impression/click.

Envelope per ogni messaggio:

json
{ "source": "...", "type": "...", "payload": { } }
  • I giochi devono impostare source su playnova-game
  • L'host risponde con source playnova-host

Formati annuncio:

  • Rewarded — opt-in giocatore (revive, doppia ricompensa, oggetto gratis). Concedi ricompense solo dopo ads.rewarded_completed.
  • Interstitial — pause naturali (livello completato / game over). Mai durante l'input.
  • Banner — striscia dell'host; il gioco richiede solo show/hide.

Placement consigliati ​

Passa sempre una stringa placement stabile per analitiche e limiti. Preferisci i nomi piattaforma sotto:

PlacementCaso d'uso
reviveContinua dopo fallimento
double_rewardBonus fine livello
free_item / unlockConsumabile o sblocco contenuto
level_complete / level_start / game_over / pauseMomenti interstitial
banner_bottom / banner_topSlot Banner

Flusso di integrazione ​

  1. In una pausa naturale, chiama ads.load_* con placement (e requestId opzionale).
  2. Attendi ads.*_loaded (o gestisci *_failed e continua senza annunci).
  3. Chiama ads.show_* con lo stesso requestId / placement.
  4. Per rewarded, modifica lo stato del gioco solo su ads.rewarded_completed. Su dismissed/failed, non concedere la ricompensa.

Tipi messaggi bridge ​

Le stringhe type canoniche sono definite in playnova-web (ads-bridge). Allinea il pacchetto gioco a questi valori esatti.

Gioco → host ​

typeScopo
ads.load_rewardedPrecarica inventario rewarded
ads.show_rewardedMostra rewarded (concedi solo dopo completamento)
ads.load_interstitialPrecarica interstitial
ads.show_interstitialMostra interstitial in pausa
ads.show_bannerRichiedi Banner host visibile
ads.hide_bannerNascondi Banner host
ads.preloadPrecarica più formati
ads.get_banner_heightInterroga altezza Banner per layout

Host → gioco ​

typeScopo
ads.rewarded_loadedRewarded pronto da mostrare
ads.rewarded_failedLoad/show rewarded fallito
ads.rewarded_completedRewarded completato — sicuro concedere
ads.rewarded_dismissedRewarded chiuso presto — non concedere
ads.interstitial_loadedInterstitial pronto
ads.interstitial_failedInterstitial fallito
ads.interstitial_closedInterstitial chiuso
ads.banner_shownBanner visibile
ads.banner_hiddenBanner nascosto
ads.banner_failedBanner fallito

Helper copia-incolla ​

Incolla in index.html (o modulo). Sostituisci la concessione ricompensa con la tua logica di gioco.

js
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);
  });
}
// Esempio: flusso 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') {
    // concedi ricompensa SOLO qui
  }
});

Regole di produzione ​

  • Niente auto-click, loop forzati o occultamento controlli Close / Skip.
  • Non concedere ricompense senza ads.rewarded_completed per quel requestId.
  • Rispetta errori host: inventario vuoto, continua il gioco normalmente.
  • Preferisci load prima di show per meno attesa al trigger.
  • Pacchetti senza SDK annunci terze parti, tracker o script pop-under.
  • La frequenza interstitial è imposta dall'host; spam show può essere ignorato.

FAQ ​

Posso usare AdMob / Unity Ads nello zip? ​

No. PlayNova aggrega la domanda sull'host. Incorporare altri SDK fallisce la review e rompe le ipotesi sandbox iframe.

Cosa succede se l'host non risponde? ​

Tratta silenzio o *_failed come no-fill. Continua il gameplay senza bloccare il giocatore con spinner infinito.

Dove vedo i ricavi? ​

Dopo annunci live in produzione, impression e ricavi vanno in analytics creatore. Liquidazione secondo termini del programma.


Il bridge host è live sulla play page. I tipi messaggio sopra sono il contratto production — implementali ora.

Documentazione creatori PlayNova