Ganhar dinheiro
Integração com AdMob
Configuração de monetização
1Criar conta no AdMob#
Crie uma conta no Google AdMob. Você vai precisar de uma conta Google para começar. O AdMob é a plataforma de publicidade para celulares do Google.
2Adicione seu app#
No painel do AdMob:
- Clique em 'Apps' na barra lateral
- Clique em 'Add App'
- Selecione 'No' em 'Is your app listed on a supported app store?'
- Digite o nome do seu app
- Selecione 'Android' como plataforma
- Clique em 'Add'
3Obter o App ID#
Depois de criar seu app:
- Copie o App ID exibido (formato: ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX)
- Isso é diferente do seu Ad Unit ID
- Você vai usar isso no AndroidManifest.xml
App ID format:
ca-app-pub-1234567890123456~12345678904Criar bloco de anúncios (banner)#
No seu app do AdMob:
- Clique na aba 'Ad units'
- Clique em 'Add ad unit'
- Selecione 'Banner'
- Digite o nome do bloco de anúncios (por exemplo, 'Main Banner')
- Clique em 'Create ad unit'
- Copie o Ad Unit ID
Banner Ad Unit ID format:
ca-app-pub-1234567890123456/12345678905Configuração no AppMint#
No AppMint, Etapa 3:
- Ative 'AdMob Ads' e cole o seu AdMob App ID (o que tem ~)
- Ad Control: mantenha 'Automatic' - o app posiciona os anúncios para você
- Ative 'Banner Ad', escolha a Ad Position (Bottom ou Top) e cole o seu Banner Ad Unit ID (o que tem /)
- Continue com as outras configurações e gere seu app
Ad Unit ID (not App ID):
ca-app-pub-XXXXXXXXXXXXXXXX/YYYYYYYYYY6Teste anúncios no seu app#
Durante o desenvolvimento, use os IDs de teste oficiais do Google para evitar violações de política. Copie e cole estes no gerador:
📋 AdMob App ID:
ca-app-pub-3940256099942544~3347511713
📋 Banner Ad Unit ID:
ca-app-pub-3940256099942544/6300978111
📋 Interstitial Ad Unit ID:
ca-app-pub-3940256099942544/1033173712
📋 Rewarded Ad Unit ID:
ca-app-pub-3940256099942544/5224354917
📋 Publisher ID:
pub-3940256099942544
📋 Developer Website:
https://example.com
Esses IDs de teste exibem anúncios com aparência real sem gerar receita nem violar políticas. Troque pelos seus IDs reais na produção.
Test IDs for Generator:
AdMob App ID: ca-app-pub-3940256099942544~3347511713
Banner Ad ID: ca-app-pub-3940256099942544/6300978111
Interstitial ID: ca-app-pub-3940256099942544/1033173712
Rewarded Ad ID: ca-app-pub-3940256099942544/5224354917
Publisher ID: pub-3940256099942544
Developer URL: https://example.com7Anúncios intersticiais#
Anúncios intersticiais são anúncios de tela cheia que cobrem toda a interface do app. Os usuários podem fechá-los para voltar ao app.
📺 Como ativar (Etapa 3, Ad Control 'Automatic'):
- Ative 'Full Screen Ad'
- Ad Type: escolha 'Interstitial Ad'
- Digite seu Interstitial Ad Unit ID (ou deixe em branco para anúncios de teste)
- Escolha o modo de disparo:
🔄 Após navegações (padrão):
O anúncio aparece a cada N navegações de página. Por exemplo, se estiver em 4, o anúncio aparece após o 4º, 8º, 12º carregamento de página, e assim por diante.
📱 Abertura do app:
O anúncio aparece uma vez, logo após a tela de abertura, quando o app abre pela primeira vez.
👆 Sob demanda:
Sem anúncios automáticos - sua página exibe um com um toque, usando WebToApk.showInterstitialAd().
⚠️ Ad Type é uma escolha única: Interstitial OU Rewarded, não os dois.
Example: every 4 page navigations
Page 1 → No ad
Page 2 → No ad
Page 3 → No ad
Page 4 → 📺 Interstitial Ad shown!
Page 5 → No ad
Page 6 → No ad
Page 7 → No ad
Page 8 → 📺 Interstitial Ad shown!
...8Anúncios premiados#
Anúncios premiados são anúncios em vídeo de tela cheia que os usuários assistem em troca de uma recompensa. Eles rendem mais do que anúncios de banner ou intersticiais.
🎁 Como ativar (Etapa 3, Ad Control 'Automatic'):
- Ative 'Full Screen Ad'
- Ad Type: escolha 'Rewarded Ad'
- Digite seu Rewarded Ad Unit ID (ou deixe em branco para anúncios de teste)
- Escolha o modo de disparo:
🔄 Após navegações (padrão):
Semelhante ao intersticial - o anúncio aparece a cada N carregamentos de página. 'Show ad after every N page navigations' define o N. O padrão é 4.
📱 Abertura do app:
O vídeo premiado aparece uma vez, quando o app abre pela primeira vez após a tela de abertura.
👆 Sob demanda:
Sem anúncios automáticos - o botão 'assista a um anúncio para ganhar' da sua própria página chama WebToApk.showRewardedAd().
💡 Quantas navegações?
Menos = mais anúncios (mais receita, mas pior experiência). Mais = menos anúncios (melhor experiência, mas menos receita). Recomendado: 3 a 5.
⚠️ Política do Google: anúncios premiados precisam da autorização do usuário. Nos modos Após navegações e Abertura do app, seu app primeiro mostra um aviso 'Assistir a um anúncio?' com um botão 'Não, obrigado'; o anúncio só é exibido se o usuário aceitar.
Revenue comparison (approximate):
Banner Ads: $0.10 - $0.50 per 1000 views
Interstitial Ads: $1 - $5 per 1000 views
Rewarded Ads: $5 - $15 per 1000 views
Recommended N (page navigations per ad):
Aggressive: 2-3 (more ads, more revenue)
Balanced: 4-5 (recommended)
Conservative: 6-10 (fewer ads, better UX)9Consentimento e política de privacidade (obrigatório)#
⚠️ O AdMob exige um mecanismo de consentimento para usuários do EEE, do Reino Unido, da Suíça e de estados dos EUA.
Isso é tratado automaticamente pelo app gerado, usando a User Messaging Platform (UMP) do Google. O app vai:
- Mostrar uma caixa de consentimento aos usuários do EEE/Reino Unido/Suíça antes de exibir anúncios
- Mostrar uma caixa de opt-out aos usuários dos estados dos EUA aplicáveis
- Só solicite anúncios depois de obter o consentimento
O que VOCÊ precisa fazer:
- No console do AdMob → Privacy & messaging → Create a European regulations message
- No console do AdMob → Privacy & messaging → Create a US state regulations message
- Defina a URL da sua política de privacidade no gerador (Etapa 3 ou Etapa 4)
- Confirme que sua política de privacidade menciona a publicidade do AdMob
⚠️ Sem essa configuração, o AdMob pode mostrar um aviso de política: 'Consent requirement: No CMP'
10Processo de análise de anúncios#
Depois de publicar seu app:
- O AdMob vai analisar seu app (geralmente leva de 24 a 48 horas)
- No começo, você verá anúncios de teste
- Depois de aprovado, os anúncios reais começam a aparecer
- Mantenha o conteúdo do seu app em conformidade com as políticas
11Ativar pagamentos#
Para receber a receita dos anúncios:
- Vá em 'Payments' no painel do AdMob
- Adicione uma forma de pagamento (conta bancária ou outras opções)
- Verifique seu endereço
- Configure as informações fiscais
- Os pagamentos são feitos mensalmente após atingir o limite de US$ 100
12Boas práticas#
✅ Posição do banner: um banner na parte de baixo é menos invasivo e dá uma experiência melhor ao usuário
✅ Intersticial/Premiado: escolha um, não os dois. Anúncios premiados rendem mais, mas exigem engajamento do usuário
✅ Contagem de ações: comece com 4 a 5 navegações entre anúncios. Muito frequente = avaliações ruins
✅ Teste primeiro: sempre teste com blocos de anúncios de teste durante o desenvolvimento
✅ Acompanhe o desempenho: confira o painel do AdMob com frequência para ver ganhos e métricas
⚠️ Não clique: nunca clique nos seus próprios anúncios - isso viola a política do AdMob
⚠️ Conteúdo de qualidade: garanta que seu app ofereça valor e siga as políticas do AdMob
💡 Dica de especialista: combine Banner (sempre visível) + Intersticial ou Premiado (periódico) para a máxima receita
13Solução de problemas#
Problemas comuns e soluções:
- Nenhum anúncio aparecendo: verifique se você está usando o Ad Unit ID correto (e não o App ID)
- Anúncios de teste funcionam, mas os reais não: aguarde a conclusão da análise do AdMob
- Falha na solicitação do anúncio: verifique a conexão com a internet e o status da conta do AdMob
- Conta suspensa: revise as políticas do AdMob e apele, se necessário
14Anúncios controlados pelo desenvolvedor: posicione cada anúncio você mesmo#
Baixe a página de demonstração completa abaixo (Coin Runner): um banner dentro do layout, um intersticial entre as fases, um botão 'Assista a um anúncio para ganhar 50 moedas', um retângulo 300×250, a chave de abertura do app e um registro ao vivo de cada resultado. Compacte em ZIP, envie como um ZIP offline, escolha Developer-controlled com os IDs de teste já preenchidos e compile - cada botão se explica sozinho.
As opções acima são o modo Automático: o app exibe o banner e o anúncio de tela cheia ou premiado para você. Se você quer todos os formatos do AdMob e liberdade para colocar cada um exatamente onde sua página precisa, escolha 'Ad Control → Developer-controlled' na Etapa 3.
Neste modo NADA é automático. Informe um ID de bloco de anúncios para cada formato que você usar - banner, retângulo médio (300×250), intersticial, premiado, intersticial premiado, abertura do app - e deixe os demais em branco. Sua página então controla tudo por meio de window.AppMintAds:
- AppMintAds.banner.attach('#slot', {size:'banner'|'medium_rectangle'}) - um banner posicionado sobre o elemento que você indicar, em um card, entre itens de lista, onde quiser. Ele acompanha o elemento ao rolar; detach() o remove. Até dois ao mesmo tempo.
- await AppMintAds.load('interstitial') → {ok:true} ou {ok:false, code:'no_fill'|'network'|'invalid_unit'|'consent'|'ad_free'|'disabled'}
- await AppMintAds.show('rewarded') → {shown:true, earned:true, reward:{type,amount}} ou {shown:false, reason}
- AppMintAds.isReady('interstitial') - ative seu botão com base nisso
- AppMintAds.appOpen.setEnabled(false) - pausa o anúncio de abertura do app enquanto o usuário está no meio de uma tarefa
O AppMintAds existe apenas dentro do app instalado - sempre verifique se o recurso está disponível (if (window.AppMintAds) …) para que a página continue funcionando em um navegador. As regras do Google continuam valendo e o app as aplica: um anúncio premiado só é exibido a partir do toque do próprio usuário (seu botão 'Assistir anúncio' É a aceitação), os intersticiais mantêm um intervalo de 60 segundos e nunca coloque um anúncio sobre uma ação principal.
// Feature-detect: AppMintAds exists only in the installed app
const ads = window.AppMintAds;
// 1. A banner INSIDE your layout — <div id="ad-slot"></div> reserves the space
if (ads) {
const r = await ads.banner.attach('#ad-slot', { size: 'banner' });
console.log(r.ok ? 'banner ' + r.width + 'x' + r.height : 'no banner: ' + r.code);
}
// 2. A full-page ad at a natural break (between levels), never on every tap
async function levelFinished() {
if (ads && ads.isReady('interstitial')) await ads.show('interstitial');
showNextLevel(); // continues whether or not an ad was shown
}
// 3. A 'Watch ad to earn 50 coins' button — the tap is the user's opt-in
watchBtn.onclick = async () => {
if (!ads) return; // browser: no native ads
// From a tap the ad plays. Without one (a timer, a route change) the app shows
// AdMob's "Watch an ad? / No thanks" intro first and answers code 'declined'.
const r = await ads.show('rewarded');
if (r.earned) addCoins(r.reward.amount || 50); // grant ONLY when earned
else if (r.reason === 'ad_free') addCoins(50); // premium user: grant without an ad
else toast('No ad available right now'); // no popup, no Skip button
};
// 4. Preload and keep the button honest
ads?.load('rewarded').then(r => { watchBtn.disabled = !r.ok; });
No app, o botão desta etapa salva esses arquivos no seu celular. Aqui eles são downloads diretos.
admob-developer-demo.html15Eventos de status dos anúncios: saiba o que aconteceu com cada solicitação#
Todo anúncio controlado pelo desenvolvedor informa seu ciclo de vida completo em UM evento, appmint:ad, para que você possa registrar preenchimentos, reagir a falhas e controlar sua própria interface:
{ type, phase, slot?, code?, adCode?, message?, width?, height?, reward?, earned? }
- type: banner | mrec | interstitial | rewarded | rewarded_interstitial | app_open
- phase: loading → loaded | failed → opened → impression → clicked → closed, mais rewarded (uma recompensa foi ganha) e show_failed
- code (em failed): no_fill | network | invalid_unit | internal - adCode é o número do próprio AdMob, message é o texto dele
- slot: qual espaço de banner, para banner/mrec
As promises dão a mesma resposta por chamada; o evento dá tudo, inclusive anúncios para os quais você não chamou show() (um anúncio de abertura do app, uma atualização de banner). No modo Automático o AppMintAds ainda existe, mas responde com o código 'automatic_mode' - use as chamadas WebToApk.showInterstitialAd()/showRewardedAd() e os eventos appmint:reward / appmint:ad-closed / appmint:ad-unavailable de lá.
window.addEventListener('appmint:ad', e => {
const a = e.detail;
console.log(a.type, a.phase, a.code || '', a.message || '');
if (a.phase === 'failed' && a.code === 'no_fill') analytics.track('ad_no_fill', a);
if (a.type === 'rewarded' && a.phase === 'rewarded') console.log('earned', a.reward);
if (a.type === 'banner' && a.phase === 'loaded') console.log('banner ' + a.width + 'x' + a.height + ' in ' + a.slot);
});
// What can this build serve? (guard it — in a browser AppMintAds is undefined)
if (window.AppMintAds) console.log(AppMintAds.config());
// → { control: 'developer', formats: { banner: true, mrec: false, interstitial: true, ... } }