Skip to content

Integración de anuncios in-game ​

Última actualización: 2026-08-11

Integra anuncios Banner, intersticial y rewarded mediante el bridge del host de PlayNova. Tu juego se ejecuta en un iframe y se comunica con el host mediante postMessage — no incorpores SDK de anuncios de terceros en el paquete.

Cómo funciona la monetización ​

PlayNova sirve anuncios en el host y comparte ingresos con creadores certificados (70 % para el creador por defecto). Los juegos solo solicitan show/load; el host gestiona inventario, límites de frecuencia e informes de impresiones/clics.

Sobre para cada mensaje:

json
{ "source": "...", "type": "...", "payload": { } }
  • Los juegos deben establecer source en playnova-game
  • El host responde con source playnova-host

Formatos de anuncio:

  • Rewarded — opt-in del jugador (revive, doble recompensa, objeto gratis). Concede recompensas solo tras ads.rewarded_completed.
  • Intersticial — pausas naturales (nivel completado / game over). Nunca durante la entrada.
  • Banner — franja del host; el juego solo solicita show/hide.

Ubicaciones recomendadas ​

Pasa siempre una cadena placement estable para analíticas y límites. Prefiere los nombres de plataforma siguientes:

PlacementCaso de uso
reviveContinuar tras fallar
double_rewardBonus al final del nivel
free_item / unlockConsumible o desbloqueo de contenido
level_complete / level_start / game_over / pauseMomentos intersticiales
banner_bottom / banner_topEspacios Banner

Flujo de integración ​

  1. En una pausa natural, llama a ads.load_* con placement (y requestId opcional).
  2. Espera ads.*_loaded (o gestiona *_failed y continúa sin anuncios).
  3. Llama a ads.show_* con el mismo requestId / placement.
  4. En rewarded, modifica el estado del juego solo en ads.rewarded_completed. En dismissed/failed, no concedas la recompensa.

Tipos de mensajes bridge ​

Las cadenas type canónicas están definidas en playnova-web (ads-bridge). Alinea tu paquete de juego con estos valores exactos.

Juego → host ​

typePropósito
ads.load_rewardedPrecargar inventario rewarded
ads.show_rewardedMostrar rewarded (conceder solo tras completar)
ads.load_interstitialPrecargar intersticial
ads.show_interstitialMostrar intersticial en pausa
ads.show_bannerSolicitar Banner del host visible
ads.hide_bannerOcultar Banner del host
ads.preloadPrecargar varios formatos
ads.get_banner_heightConsultar altura del Banner para el layout

Host → juego ​

typePropósito
ads.rewarded_loadedRewarded listo para mostrar
ads.rewarded_failedFallo load/show rewarded
ads.rewarded_completedRewarded completado — seguro conceder
ads.rewarded_dismissedRewarded cerrado antes — no conceder
ads.interstitial_loadedIntersticial listo
ads.interstitial_failedIntersticial fallido
ads.interstitial_closedIntersticial cerrado
ads.banner_shownBanner visible
ads.banner_hiddenBanner oculto
ads.banner_failedBanner fallido

Helper copiar y pegar ​

Pégalo en tu index.html (o módulo). Sustituye la concesión de recompensa por tu lógica de juego.

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);
  });
}
// Ejemplo: flujo 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') {
    // conceder recompensa SOLO aquí
  }
});

Reglas de producción ​

  • No auto-clic, bucles forzados ni ocultar controles Close / Skip.
  • No concedas recompensas sin ads.rewarded_completed para ese requestId.
  • Respeta fallos del host: inventario vacío, continúa el juego con normalidad.
  • Prefiere load antes de show para menos espera al activar.
  • Paquetes sin SDK de anuncios de terceros, trackers ni scripts pop-under.
  • La frecuencia intersticial la impone el host; spam de show puede ignorarse.

FAQ ​

¿Puedo usar AdMob / Unity Ads dentro del zip? ​

No. PlayNova agrega demanda en el host. Incrustar otros SDK fallará la revisión y rompe supuestos del sandbox iframe.

¿Qué pasa si el host no responde? ​

Trata silencio o *_failed como no-fill. Continúa el juego sin bloquear al jugador con un spinner infinito.

¿Dónde veo los ingresos? ​

Tras publicar anuncios en producción, impresiones e ingresos van a analíticas de creador. Liquidación según términos del programa.


El bridge del host está activo en la página de juego. Los tipos de mensaje anteriores son el contrato de producción — impleméntalos ahora.

Documentación para creadores de PlayNova