Voltar para o Blog
Quest Log

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

Smartphone exibindo um jogo mobile com espaço de anúncio e moedas de recompensa ao redor

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

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:

  1. Crie a conta em admob.google.com (precisa de uma conta Google).
  2. Adicione seu app. Se ele ainda não está publicado na loja, registre como app não listado e vincule depois.
  3. 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.
  4. 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.

Próximo nível
Quer aprender isso na prática?

No CursoGame.Dev você sai dos tutoriais soltos e constrói jogos publicáveis, com trilha progressiva, quests práticas e feedback real.

Conhecer a plataforma
+500 alunos4.9/5Garantia 7 dias

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");
        });
    }
}

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.