Como Colocar Anúncios em Jogo Mobile com AdMob: Banner, Interstitial e Rewarded

Aprenda a colocar anúncios em jogo mobile com AdMob: banner, interstitial e rewarded, com código real em C# e onde posicionar sem matar a retenção.
Como Colocar Anúncios em Jogo Mobile com AdMob: Banner, Interstitial e Rewarded
Anúncios em jogo mobile são a forma mais comum de monetizar um jogo gratuito, e também a mais fácil de fazer errado. Errado pra dois lados: dá pra ganhar quase nada mostrando banner no lugar errado, e dá pra destruir a retenção enfiando vídeo na cara do jogador a cada trinta segundos. O jogo que acerta esse equilíbrio paga as contas; o que erra perde o jogador antes de gerar a primeira impressão relevante.
Esse tutorial cobre o caminho completo: o que cada formato de anúncio faz (banner, interstitial e rewarded), como criar a conta e os blocos no AdMob, a integração com código real em C# usando o SDK oficial do Google pra Unity, o caminho equivalente no Godot, e as decisões de design que definem se o anúncio rende ou irrita.
Como anúncios geram dinheiro (o mínimo que você precisa saber)
Antes do código, vale entender o modelo, porque ele muda decisões de design.
O AdMob é a rede de anúncios do Google pra apps. Você cria "blocos de anúncios" (ad units), o SDK busca um anúncio na rede, exibe, e você recebe uma parte do que o anunciante pagou. Três termos aparecem o tempo todo:
- Impressão: cada vez que um anúncio é exibido.
- eCPM: quanto você ganha, em média, a cada mil impressões. Varia por formato, país do jogador e época do ano.
- Fill rate: a porcentagem de pedidos de anúncio que voltam com um anúncio de verdade. Nem todo pedido tem anunciante disponível.
A consequência prática: formatos diferentes pagam muito diferente. Rewarded (vídeo com recompensa) costuma ter o eCPM mais alto, porque o jogador escolheu assistir e o anunciante paga mais por essa atenção. Banner fica na outra ponta: rende pouco por impressão e compensa só pelo volume. Interstitial fica no meio. Não vou te dar números porque eles variam demais pra serem úteis; o que não varia é essa ordem.
Outra consequência: receita de anúncio depende de sessão. Jogador que volta todo dia vale mais que instalação que abre uma vez. Por isso anúncio mal posicionado é um tiro no pé duplo: rende pouco hoje e mata a receita de amanhã junto com a retenção.
Os três formatos de anúncios em jogo mobile
Banner
Uma faixa fixa, geralmente no topo ou na base da tela, que fica visível durante o gameplay ou nos menus. É o formato mais simples de integrar e o que menos rende por impressão.
Quando usar: jogos casuais de sessão longa, onde o banner fica horas na tela acumulando impressões, e em telas de menu ou pausa. Quando evitar: em jogos de ação onde a faixa rouba espaço de tela e dedo, e perto de botões, porque clique acidental em anúncio é motivo clássico de suspensão de conta no AdMob.
Interstitial
Anúncio de tela cheia, imagem ou vídeo, que aparece em transições: fim de fase, game over, volta ao menu. O jogador pode fechar depois de alguns segundos.
É o formato que mais exige bom senso. Em transição natural, funciona; no meio do gameplay, é o jeito mais rápido de ganhar uma avaliação de uma estrela. A regra que eu sigo: interstitial só em pausa natural do jogo, nunca com frequência maior que uma a cada poucos minutos de jogo, e nunca nas primeiras sessões do jogador, que é quando ele decide se fica.
Rewarded
Vídeo que o jogador escolhe assistir em troca de algo: vida extra, moedas, dobrar a recompensa da fase, revive. É o formato favorito de quase todo mundo que trabalha com mobile, por um motivo simples: é o único em que o anúncio melhora a experiência em vez de interromper. O jogador ganha, o anunciante ganha atenção real, você ganha o eCPM mais alto da casa.
O segredo do rewarded está na economia do jogo: a recompensa precisa valer o vídeo de 15 a 30 segundos, sem quebrar o balanceamento. "Assista e dobre as moedas da fase" e "assista pra continuar de onde morreu" são os dois padrões mais usados porque encaixam em qualquer loop.
Configurando o AdMob
O setup fora do código é direto:
- Crie a conta em admob.google.com (precisa de uma conta Google).
- Adicione seu app. Se ele ainda não está publicado na loja, registre como app não listado e vincule depois.
- Crie um bloco de anúncios pra cada formato que vai usar: um pra banner, um pra interstitial, um pra rewarded. Cada bloco gera um ID no formato
ca-app-pub-XXXX/YYYY. - Anote também o App ID (formato
ca-app-pub-XXXX~YYYY, com til), que vai na configuração do projeto.
Um aviso que economiza sua conta: durante o desenvolvimento, nunca use seus IDs reais. Clicar nos próprios anúncios, mesmo sem querer durante testes, conta como tráfego inválido e pode suspender sua conta antes do primeiro pagamento. O Google publica IDs de teste exatamente pra isso. Os de Android:
- App ID de teste:
ca-app-pub-3940256099942544~3347511713 - Banner:
ca-app-pub-3940256099942544/6300978111 - Interstitial:
ca-app-pub-3940256099942544/1033173712 - Rewarded:
ca-app-pub-3940256099942544/5224354917
Esses IDs sempre retornam anúncios de teste. Você troca pelos reais só no build de produção.
Integrando o AdMob na Unity (C#)
Vou usar a Unity aqui porque o AdMob tem SDK oficial pra ela, o Google Mobile Ads SDK, e o código abaixo é a API atual dele. Se você é de Godot, o caminho está na seção seguinte, e os conceitos são idênticos.
Instalação: baixe o pacote GoogleMobileAds.unitypackage no repositório oficial do Google (googleads/googleads-mobile-unity no GitHub) e importe no projeto. Depois, em Assets > Google Mobile Ads > Settings, cole o App ID do Android e do iOS. O plugin cuida do AndroidManifest por você.
Inicialização
O SDK precisa inicializar uma vez antes de qualquer pedido de anúncio. Faça isso numa cena de boot:
using GoogleMobileAds.Api;
using UnityEngine;
public class AdsManager : MonoBehaviour
{
void Start()
{
// Inicializa o SDK. O callback dispara quando estiver pronto
// pra receber pedidos de anúncio.
MobileAds.Initialize(initStatus =>
{
Debug.Log("AdMob inicializado");
});
}
}
Banner
O banner é criado, carregado e fica na tela até você destruir:
using GoogleMobileAds.Api;
private BannerView _bannerView;
// ID de TESTE do banner Android. Troque pelo seu em produção.
private const string BannerId = "ca-app-pub-3940256099942544/6300978111";
public void ShowBanner()
{
// Destrói o anterior antes de criar outro, senão eles se acumulam.
_bannerView?.Destroy();
_bannerView = new BannerView(BannerId, AdSize.Banner, AdPosition.Bottom);
_bannerView.LoadAd(new AdRequest());
}
public void HideBanner()
{
_bannerView?.Destroy();
_bannerView = null;
}
AdSize.Banner é o tamanho padrão de 320x50. Chame HideBanner() ao entrar no gameplay se o banner for só de menu.
Interstitial
Interstitial segue o padrão carrega-antes, mostra-depois. Você carrega com antecedência (no início da fase, por exemplo) e mostra na transição:
using GoogleMobileAds.Api;
private InterstitialAd _interstitial;
private const string InterstitialId = "ca-app-pub-3940256099942544/1033173712";
public void LoadInterstitial()
{
InterstitialAd.Load(InterstitialId, new AdRequest(),
(InterstitialAd ad, LoadAdError error) =>
{
if (error != null || ad == null)
{
// Sem fill ou sem rede. O jogo segue normal, sem anúncio.
return;
}
_interstitial = ad;
// Quando o jogador fechar o anúncio, já carrega o próximo.
_interstitial.OnAdFullScreenContentClosed += LoadInterstitial;
});
}
public void ShowInterstitial()
{
if (_interstitial != null && _interstitial.CanShowAd())
{
_interstitial.Show();
}
}
Repare no detalhe do callback de erro: o anúncio pode simplesmente não vir (fill rate não é 100%), e o jogo precisa funcionar igual sem ele. Nunca trave uma transição esperando anúncio carregar.
Rewarded
A diferença do rewarded é o callback de recompensa, que só dispara se o jogador assistiu até o fim:
using GoogleMobileAds.Api;
private RewardedAd _rewarded;
private const string RewardedId = "ca-app-pub-3940256099942544/5224354917";
public void LoadRewarded()
{
RewardedAd.Load(RewardedId, new AdRequest(),
(RewardedAd ad, LoadAdError error) =>
{
if (error != null || ad == null) return;
_rewarded = ad;
_rewarded.OnAdFullScreenContentClosed += LoadRewarded;
});
}
public void ShowRewarded()
{
if (_rewarded != null && _rewarded.CanShowAd())
{
_rewarded.Show((Reward reward) =>
{
// Só chega aqui se o jogador assistiu o vídeo inteiro.
// É AQUI que você dá a recompensa, em nenhum outro lugar.
GrantCoins(100);
});
}
}
Dois cuidados de UX que fazem diferença: só mostre o botão de "assistir vídeo" quando CanShowAd() é verdadeiro, porque botão que não responde parece bug; e dê a recompensa exclusivamente dentro do callback, porque o jogador pode fechar o vídeo no meio.
E no Godot?
O AdMob não tem SDK oficial pra Godot, mas a comunidade resolveu isso bem. O plugin mais maduro é o Godot AdMob da Poing Studios, gratuito e open source, disponível no Asset Library e no GitHub, com suporte a Android e iOS no Godot 4. Ele expõe os mesmos três formatos com a mesma lógica que você viu acima: inicializa o SDK, carrega o anúncio com antecedência, mostra no momento certo, trata o caso de não vir anúncio.
Por ser um plugin de terceiro, a API muda entre versões com mais frequência que a do SDK oficial, então a fonte certa pros nomes exatos de classes e sinais é a documentação do próprio plugin, não um post de blog. O que não muda é o desenho: tudo que este tutorial disse sobre formatos, IDs de teste, pré-carregamento e recompensa no callback se aplica igual. Se você entendeu a versão C#, a versão GDScript é tradução.
Onde colocar anúncios sem destruir a retenção
A integração é a parte fácil. O que separa jogo que monetiza de jogo que afugenta é o design da exibição:
Rewarded primeiro. Se for escolher um único formato pra começar, escolha rewarded. Melhor eCPM, zero interrupção, e te força a pensar na economia do jogo, o que melhora o design como um todo.
Interstitial com frequency cap. Defina um intervalo mínimo entre interstitials (alguns minutos) e um número máximo por sessão, e respeite. O AdMob permite configurar isso no próprio bloco, mas controlar no código te dá mais precisão sobre o contexto.
Protega a primeira sessão. As primeiras sessões decidem se o jogador fica. Muitos jogos seguram interstitial até a segunda ou terceira sessão, ou até o jogador passar das fases iniciais. Anúncio pra quem ainda não decidiu ficar é receita de centavos a custo de retenção.
Nunca perto de botão. Banner colado em botão de ação gera clique acidental. O jogador odeia, e o AdMob pune tráfego inválido com suspensão.
Meça antes de escalar. Acompanhe retenção de dia 1 e dia 7 no antes e depois de cada mudança de anúncio. Se o interstitial novo derrubou a retenção, ele está te custando dinheiro mesmo que o painel do AdMob mostre receita subindo.
Fechando
Colocar anúncios em jogo mobile tem duas metades. A técnica é pequena: conta no AdMob, IDs de teste durante o desenvolvimento, pré-carregar, mostrar, tratar o caso sem fill. O código desse artigo cobre isso inteiro.
A metade difícil é a de design, e ela se resume a uma pergunta: esse anúncio respeita o tempo do jogador? Rewarded responde sim por construção. Interstitial responde sim só em transição natural e com frequência baixa. Banner responde sim longe do dedo e do gameplay. Erre nessa pergunta e nenhum eCPM salva o jogo; acerte e a monetização vira parte da experiência em vez de pedágio.
Comece pequeno: um rewarded de dobrar recompensa, com ID de teste, rodando no seu aparelho. Quando esse fluxo estiver redondo, o resto é repetir o padrão.

