Integração de anúncios in-game
Última atualização: 2026-08-11
Integre anúncios Banner, intersticial e rewarded pela bridge do host PlayNova. Seu jogo roda em um iframe e se 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 compartilha receita com criadores certificados (70% criador por padrão). Jogos só solicitam show/load; o host gerencia inventário, limites de frequência e relatórios de impressões/cliques.
Envelope para cada mensagem:
{ "source": "...", "type": "...", "payload": { } }- Jogos devem definir
sourcecomoplaynova-game - O host responde com
sourceplaynova-host
Formatos de anúncio:
- Rewarded — opt-in do jogador (revive, recompensa dupla, item grátis). Conceda recompensas somente após
ads.rewarded_completed. - Intersticial — pausas naturais (nível completo / game over). Nunca durante a entrada.
- Banner — faixa do host; o jogo só solicita show/hide.
Posicionamentos recomendados
Sempre passe uma string placement estável para análises e limites. Prefira os nomes de plataforma abaixo:
| Placement | Caso de uso |
|---|---|
revive | Continuar após falha |
double_reward | Bônus fim de nível |
free_item / unlock | Consumível ou desbloqueio de conteúdo |
level_complete / level_start / game_over / pause | Momentos intersticiais |
banner_bottom / banner_top | Slots Banner |
Fluxo de integração
- Em uma pausa natural, chame
ads.load_*complacement(erequestIdopcional). - Aguarde
ads.*_loaded(ou trate*_failede continue sem anúncios). - Chame
ads.show_*com o mesmorequestId/placement. - Para rewarded, altere o estado do jogo somente 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 seu pacote de jogo a esses valores exatos.
Jogo → host
| type | Propósito |
|---|---|
ads.load_rewarded | Pré-carregar inventário rewarded |
ads.show_rewarded | Exibir rewarded (conceder só após completar) |
ads.load_interstitial | Pré-carregar intersticial |
ads.show_interstitial | Exibir intersticial em pausa |
ads.show_banner | Solicitar Banner do host visível |
ads.hide_banner | Ocultar Banner do host |
ads.preload | Pré-carregar vários formatos |
ads.get_banner_height | Consultar altura do Banner para layout |
Host → jogo
| type | Propósito |
|---|---|
ads.rewarded_loaded | Rewarded pronto para exibir |
ads.rewarded_failed | Falha load/show rewarded |
ads.rewarded_completed | Rewarded concluído — seguro conceder |
ads.rewarded_dismissed | Rewarded fechado cedo — não conceder |
ads.interstitial_loaded | Intersticial pronto |
ads.interstitial_failed | Intersticial falhou |
ads.interstitial_closed | Intersticial fechado |
ads.banner_shown | Banner visível |
ads.banner_hidden | Banner oculto |
ads.banner_failed | Banner 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.
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 SOMENTE aqui
}
});Regras de produção
- Sem auto-clique, loop forçado ou ocultar controles Close / Skip.
- Não conceda recompensas sem
ads.rewarded_completedpara esserequestId. - 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.
- 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 demanda 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 a receita?
Após anúncios em produção, impressões e receita vão para análises do criador. Liquidação conforme termos do programa.
A bridge do host está ativa na página de jogo. Os tipos de mensagem acima são o contrato de produção — implemente agora.
