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:
{ "source": "...", "type": "...", "payload": { } }- Os 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 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:
| 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
- Numa 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 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
| type | Propósito |
|---|---|
ads.load_rewarded | Pré-carregar inventário rewarded |
ads.show_rewarded | Mostrar rewarded (conceder só após completar) |
ads.load_interstitial | Pré-carregar intersticial |
ads.show_interstitial | Mostrar intersticial numa pausa |
ads.show_banner | Pedir 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 a mostrar |
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 APENAS aqui
}
});Regras de produção
- Sem auto-clique, loop forçado ou ocultar controlos 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.
- 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.
