Skip to content

Integração de anúncios in-game ​

Última atualização: 2026-08-11

Integre anúncios Banner, intersticial e rewarded através da bridge do host PlayNova. O seu jogo corre num iframe e comunica com o host via postMessage — não incorpore SDKs de anúncios de terceiros no pacote.

Como funciona a monetização ​

A PlayNova preenche anúncios no host e partilha receitas com criadores certificados (70% criador por defeito). Os jogos apenas pedem show/load; o host gere inventário, limites de frequência e relatórios de impressões/cliques.

Envelope para cada mensagem:

json
{ "source": "...", "type": "...", "payload": { } }
  • Os jogos devem definir source como playnova-game
  • O host responde com source playnova-host

Formatos de anúncio:

  • Rewarded — opt-in do jogador (revive, recompensa dupla, item grátis). Conceda recompensas apenas após ads.rewarded_completed.
  • Intersticial — pausas naturais (nível concluído / game over). Nunca durante a entrada.
  • Banner — faixa do host; o jogo apenas pede show/hide.

Posicionamentos recomendados ​

Passe sempre uma string placement estável para análises e limites. Prefira os nomes de plataforma abaixo:

PlacementCaso de uso
reviveContinuar após falha
double_rewardBónus fim de nível
free_item / unlockConsumível ou desbloqueio de conteúdo
level_complete / level_start / game_over / pauseMomentos intersticiais
banner_bottom / banner_topSlots Banner

Fluxo de integração ​

  1. Numa pausa natural, chame ads.load_* com placement (e requestId opcional).
  2. Aguarde ads.*_loaded (ou trate *_failed e continue sem anúncios).
  3. Chame ads.show_* com o mesmo requestId / placement.
  4. Para rewarded, altere o estado do jogo apenas em ads.rewarded_completed. Em dismissed/failed, não conceda a recompensa.

Tipos de mensagens bridge ​

Strings type canónicas estão definidas em playnova-web (ads-bridge). Alinhe o seu pacote de jogo com estes valores exactos.

Jogo → host ​

typePropósito
ads.load_rewardedPré-carregar inventário rewarded
ads.show_rewardedMostrar rewarded (conceder só após completar)
ads.load_interstitialPré-carregar intersticial
ads.show_interstitialMostrar intersticial numa pausa
ads.show_bannerPedir Banner do host visível
ads.hide_bannerOcultar Banner do host
ads.preloadPré-carregar vários formatos
ads.get_banner_heightConsultar altura do Banner para layout

Host → jogo ​

typePropósito
ads.rewarded_loadedRewarded pronto a mostrar
ads.rewarded_failedFalha load/show rewarded
ads.rewarded_completedRewarded concluído — seguro conceder
ads.rewarded_dismissedRewarded fechado cedo — não conceder
ads.interstitial_loadedIntersticial pronto
ads.interstitial_failedIntersticial falhou
ads.interstitial_closedIntersticial fechado
ads.banner_shownBanner visível
ads.banner_hiddenBanner oculto
ads.banner_failedBanner falhou

Helper copiar e colar ​

Cole no seu index.html (ou módulo). Substitua a concessão de recompensa pela sua lógica de jogo.

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);
  });
}
// Exemplo: fluxo 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 APENAS aqui
  }
});

Regras de produção ​

  • Sem auto-clique, loop forçado ou ocultar controlos Close / Skip.
  • Não conceda recompensas sem ads.rewarded_completed para esse requestId.
  • Respeite falhas do host: inventário vazio, continue o jogo normalmente.
  • Prefira load antes de show para menos espera no gatilho.
  • Pacotes sem SDK de anúncios de terceiros, trackers ou scripts pop-under.
  • A frequência intersticial é imposta pelo host; spam de show pode ser ignorado.

FAQ ​

Posso usar AdMob / Unity Ads no zip? ​

Não. A PlayNova agrega procura no host. Incorporar outros SDKs falha na revisão e quebra suposições do sandbox iframe.

E se o host não responder? ​

Trate silêncio ou *_failed como no-fill. Continue o jogo sem bloquear o jogador com spinner infinito.

Onde vejo as receitas? ​

Após anúncios em produção, impressões e receitas vão para análises do criador. Liquidação conforme termos do programa.


A bridge do host está activa na página de jogo. Os tipos de mensagem acima são o contrato de produção — implemente agora.

Documentação para criadores PlayNova