Anúncios intersticiais

A publicidade intersticial é um formato de anúncio em tela cheia incorporado ao conteúdo do aplicativo durante pausas naturais, como a transição entre níveis de jogo ou a conclusão de uma ação-alvo.

Quando um aplicativo exibe um anúncio intersticial, o usuário pode clicar para acessar o site do anunciante ou fechar o anúncio e retornar ao app.

Durante as impressões de anúncios intersticiais, a atenção do usuário fica totalmente voltada para o anúncio, o que resulta em um custo mais alto para essas impressões.

Aparência

Este guia mostrará como integrar anúncios intersticiais em aplicativos Unity. Além de exemplos de código e instruções, contém recomendações específicas aos formatos e links para recursos adicionais.

Pré-requisito

  1. Siga as Yandex Mobile Ads etapas de integração do plug‑in descritas em Início rápido.
  2. Certifique-se de possuir a última versão do Yandex Mobile Ads plug-in Unity. Se estiver usando mediação, atualize para a single build mais recente.

Implementação

Principais passos para integrar anúncios intersticiais:

  1. Crie um InterstitialAdLoader.
  2. Carregue o anúncio, convocando o método InterstitialAdLoader.LoadAd(AdRequest) — seja via async/await ou usando callbacks.
  3. Passar configurações adicionais se você estiver usando Adfox.
  4. Registrar listeners para eventos em que os usuários interagem com seu anúncio.
  5. Mostrar o anúncio chamando o método Interstitial.Show().
  6. Liberar os recursos.

Características da integração de anúncios intersticiais

  1. Se o carregamento falhar, não tente carregar outro anúncio. Se não houver outra opção, limite o número de tentativas de carregamento de anúncios. Isso ajudará a evitar solicitações constantes malsucedidas e problemas de conexão se houver limitações.

  2. Recomendamos usar uma única instância de InterstitialAdLoader para todos os carregamentos de anúncios a fim de melhorar o desempenho.

Guia passo a passo

  1. Crie um objeto InterstitialAdLoader em um script C# anexo a GameObject.

    using UnityEngine;
    using YandexMobileAds;
    using YandexMobileAds.Base;
    
    public class YandexMobileAdsInterstitialDemoScript : MonoBehaviour
    {
        private InterstitialAdLoader interstitialAdLoader;
        private Interstitial interstitial;
    
        private void SetupLoader()
        {
            interstitialAdLoader = new InterstitialAdLoader();
            // ...
        }
    }
    
  2. Carregar o anúncio usando o método LoadAd.

    private async void RequestInterstitial()
    {
        string adUnitId = "demo-interstitial-yandex"; // substitua por "R-M-XXXXXX-Y"
        try
        {
            interstitial = await interstitialAdLoader.LoadAd(new AdRequest(adUnitId));
        }
        catch (AdLoadingException e)
        {
            // O anúncio não carregou, com {e.Message}
            // Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado.
        }
    }
    
    private void RequestInterstitial()
    {
        string adUnitId = "demo-interstitial-yandex"; // substitua por "R-M-XXXXXX-Y"
        AdRequest adRequest = new AdRequest(adUnitId);
        interstitialAdLoader.LoadAd(
            adRequest: adRequest,
            onLoaded: interstitial => {
                // O anúncio foi carregado com sucesso. Agora é possível lidar com isso.
                this.interstitial = interstitial;
            },
            onFailed: args => {
                // O anúncio não carregou, com {args.Message}
                // Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado.
            });
    }
    

    adUnitId: Um identificador único que é emitido na interface da Yandex Advertising Network e tem este formato: R-M-XXXXXX-Y.

    Sugestão

    Para fins de teste, você pode usar o ID do bloco de demonstração: "demo-interstitial-yandex". Antes de publicar o anúncio, você precisa substituir o ID do bloco de demonstração por um ID de bloco de anúncios real.

    Você pode expandir os parâmetros de solicitação de anúncio através de AdTargeting, passando interesses do usuário, dados contextuais da página, detalhes de localização ou outras informações. O acréscimo de mais contexto às solicitações de anúncios pode melhorar a qualidade dos anúncios consideravelmente. Para saber mais, consulte Segmentação de anúncios.

  3. Registrar listeners para eventos em que os usuários interagem com seu anúncio.

    using System;
    
    // ...
    interstitial.OnAdClicked += HandleAdClicked;
    interstitial.OnAdShown += HandleInterstitialShown;
    interstitial.OnAdFailedToShow += HandleInterstitialFailedToShow;
    interstitial.OnAdImpression += HandleImpression;
    interstitial.OnAdDismissed += HandleInterstitialDismissed;
    // ...
    
    public void HandleAdClicked(object sender, EventArgs args)
    {
        // Convocado quando há o registro de clique em um anúncio.
    }
    
    public void HandleInterstitialShown(object sender, EventArgs args)
    {
        // Convocado quando o anúncio é exibido.
    }
    
    public void HandleInterstitialFailedToShow(object sender, AdFailureEventArgs args)
    {
        // Convocado quando um InterstitialAd deixa de ser exibido.
    }
    
    public void HandleInterstitialDismissed(object sender, EventArgs args)
    {
        // Convocado quando o anúncio é descartado.
    }
    
    public void HandleImpression(object sender, ImpressionData impressionData)
    {
        // Convocado quando há o registro de impressão de um anúncio.
    }
    
  4. Mostre o anúncio chamando Show() no objeto Interstitial.

    if (interstitial != null)
    {
        interstitial.Show();
    }
    
  5. Chame Destroy() em anúncios que são exibidos e elimine links que não são mais usados na tela atual.

    Isso libera os recursos e evita vazamentos de memória.

    public void DestroyInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Destroy();
            interstitial = null;
        }
    }
    

Teste da integração de anúncios intersticiais

Uso de blocos de anúncios de demonstração para teste de anúncios

Use anúncios-teste para verificar a integração dos anúncios intersticiais e o aplicativo em si. Para garantir que os anúncios-teste sejam retornados para cada solicitação de anúncio, é possível usar uma ID especial de posicionamento de anúncios demonstrativa.

adUnitId de demonstração: demo-interstitial-yandex.

Importante

Antes de publicar seu app na loja, certifique-se de substituir a ID de posicionamento demonstrativa pela ID real obtida na interface Yandex Advertising Network.

Para a lista de todas as IDs de posicionamento de anúncio demonstrativas disponíveis, consulte Blocos de anúncio demonstrativos para testes.

Teste da integração de anúncios

Você pode verificar sua integração de anúncios intersticiais usando o analisador integrado do SDK. Aparecerá no log um relatório detalhado com os resultados do teste.

Para visualizar o relatório, faça uma busca pela palavra-chave "YandexAds" no Logcat, uma ferramenta para depuração de aplicativos Android.

adb logcat -v brief '*:S YandexAds'

Se a integração for bem-sucedida, a seguinte mensagem será retornada:

adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type interstitial was integrated successfully

Se houver algum problema na integração dos anúncios intersticiais, você receberá um relatório detalhado do problema com soluções recomendadas.

Uso de blocos de anúncios de demonstração para teste de anúncios

Use anúncios-teste para verificar a integração dos anúncios e o aplicativo em si. Para garantir que os anúncios-teste sejam retornados para cada solicitação de anúncio, é possível usar uma ID especial de posicionamento de anúncios demonstrativa.

adUnitId de demonstração: demo-interstitial-yandex.

Importante

Antes de publicar seu app na loja, certifique-se de substituir a ID de posicionamento demonstrativa pela ID real obtida na interface Yandex Advertising Network.

Para a lista de todas as IDs de posicionamento de anúncio demonstrativas disponíveis, consulte Blocos de anúncio demonstrativos para testes.

Teste da integração de anúncios

Você pode testar sua integração de anúncios usando a ferramenta Console nativa.

Para ver logs detalhados, convoque o método enableLogging da classe YandexAds.

YandexAds.enableLogging()

Para ver os logs do SDK, acesse a ferramenta Console e defina Subsystem = com.mobile.ads.ads.sdk. Você também pode filtrar logs por categoria e nível de erro.

Se você estiver tendo problemas para integrar anúncios, receberá um relatório detalhado sobre os problemas e recomendações de como corrigi-los.

Dicas

Pré-carregamento de anúncios

Carregar um anúncio pode levar vários segundos, dependendo do número de redes de anúncios conectadas na mediação móvel e da velocidade da Internet do usuário. Recomendamos pré-carregar os anúncios antes de exibi-los.

Você pode chamar o carregamento de anúncios no método Awake para gameObject. Você precisa preservar o objeto entre as cenas usando a chamada DontDestroyOnLoad(). Isso garante que o anúncio carregado não seja excluído junto com o gameObject na mudança de cena.

private void Awake()
{
    SetupLoader();
    RequestInterstitial();
    DontDestroyOnLoad(gameObject);
}

Além disso, você pode vincular o carregamento do próximo anúncio às funções de callback executadas quando a exibição do anúncio é concluída ou falha. Assim:

public void HandleInterstitialFailedToShow(object sender, EventArgs args)
{
    // Convocado quando um InterstitialAd deixa de ser exibido.

    // Liberar recursos após anúncio ser descartado.
    DestroyInterstitial();

    // Agora você pode pré-carregar o próximo anúncio intersticial.
    RequestInterstitial();
}

public void HandleInterstitialDismissed(object sender, EventArgs args)
{
    // Convocado quando o anúncio é descartado.

    // Liberar recursos após anúncio ser descartado.
    DestroyInterstitial();

    // Agora você pode pré-carregar o próximo anúncio intersticial.
    RequestInterstitial();
}

Se você armazenar em cache anúncios em muitas telas que provavelmente não serão exibidas, a eficácia do anúncio pode diminuir. Por exemplo, se os usuários completam 2–3 níveis de jogo por sessão, você não deve armazenar em cache anúncios para 6–7 telas. Caso contrário, a visualizabilidade do seu anúncio pode diminuir, e o sistema de publicidade pode despriorizar seu aplicativo.

Para garantir que o cache beneficie seu app, monitore as métricas "Taxa de exibição" ou "Taxa de visualização" na interface Yandex Advertising Network. Se estiver abaixo de 20%, você provavelmente deve revisar seu algoritmo de cache. Quanto maior o percentual de impressões, melhor.

Exemplo de código completo

using System;
using UnityEngine;
using UnityEngine.UI;
using YandexMobileAds;
using YandexMobileAds.Base;

public class YandexMobileAdsInterstitialDemoScript : MonoBehaviour
{
    private InterstitialAdLoader interstitialAdLoader;
    private Interstitial interstitial;
    [SerializeField] private Button button;

    private void Awake()
    {
        SetupLoader();
        RequestInterstitial();
        DontDestroyOnLoad(gameObject);
        button = this.GetComponent<Button>();
        button.onClick.AddListener(ShowInterstitial);
    }

    private void SetupLoader()
    {
        interstitialAdLoader = new InterstitialAdLoader();
    }

    private async void RequestInterstitial()
    {
        string adUnitId = "demo-interstitial-yandex"; // substitua por "R-M-XXXXXX-Y"
        try
        {
            interstitial = await interstitialAdLoader.LoadAd(new AdRequest(adUnitId));

            // Adicionar manipuladores de eventos para ações do anúncio
            interstitial.OnAdClicked += HandleAdClicked;
            interstitial.OnAdShown += HandleInterstitialShown;
            interstitial.OnAdFailedToShow += HandleInterstitialFailedToShow;
            interstitial.OnAdImpression += HandleImpression;
            interstitial.OnAdDismissed += HandleInterstitialDismissed;
        }
        catch (AdLoadingException e)
        {
            // O anúncio não carregou, com {e.Message}
            // Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado.
        }
    }

    private void ShowInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Show();
        }
    }

    public void HandleInterstitialDismissed(object sender, EventArgs args)
    {
        // Convocado quando o anúncio é descartado.

        // Liberar recursos após anúncio ser descartado.
        DestroyInterstitial();

        // Agora você pode pré-carregar o próximo anúncio intersticial.
        RequestInterstitial();
    }

    public void HandleInterstitialFailedToShow(object sender, EventArgs args)
    {
        // Convocado quando um InterstitialAd deixa de ser exibido.

        // Liberar recursos após anúncio ser descartado.
        DestroyInterstitial();

        // Agora você pode pré-carregar o próximo anúncio intersticial.
        RequestInterstitial();
    }

    public void HandleAdClicked(object sender, EventArgs args)
    {
        // Convocado quando há o registro de clique em um anúncio.
    }

    public void HandleInterstitialShown(object sender, EventArgs args)
    {
        // Convocado quando o anúncio é exibido.
    }

    public void HandleImpression(object sender, ImpressionData impressionData)
    {
        // Convocado quando há o registro de impressão de um anúncio.
    }

    public void DestroyInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Destroy();
            interstitial = null;
        }
    }
}
using System;
using UnityEngine;
using UnityEngine.UI;
using YandexMobileAds;
using YandexMobileAds.Base;

public class YandexMobileAdsInterstitialDemoScript : MonoBehaviour
{
    private InterstitialAdLoader interstitialAdLoader;
    private Interstitial interstitial;
    [SerializeField] private Button button;

    private void Awake()
    {
        SetupLoader();
        RequestInterstitial();
        DontDestroyOnLoad(gameObject);
        button = this.GetComponent<Button>();
        button.onClick.AddListener(ShowInterstitial);
    }

    private void SetupLoader()
    {
        interstitialAdLoader = new InterstitialAdLoader();
    }

    private void RequestInterstitial()
    {
        string adUnitId = "demo-interstitial-yandex"; // substitua por "R-M-XXXXXX-Y"
        AdRequest adRequest = new AdRequest(adUnitId);
        interstitialAdLoader.LoadAd(
            adRequest: adRequest,
            onLoaded: HandleInterstitialLoaded,
            onFailed: HandleInterstitialFailedToLoad);
    }

    private void ShowInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Show();
        }
    }

    public void HandleInterstitialLoaded(Interstitial interstitial)
    {
        // O anúncio foi carregado com sucesso. Agora é possível lidar com isso.
        this.interstitial = interstitial;

        // Adicionar manipuladores de eventos para ações do anúncio
        this.interstitial.OnAdClicked += HandleAdClicked;
        this.interstitial.OnAdShown += HandleInterstitialShown;
        this.interstitial.OnAdFailedToShow += HandleInterstitialFailedToShow;
        this.interstitial.OnAdImpression += HandleImpression;
        this.interstitial.OnAdDismissed += HandleInterstitialDismissed;
    }

    public void HandleInterstitialFailedToLoad(AdFailedToLoadEventArgs args)
    {
        // O anúncio não carregou, com {args.Message}
        // Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado.
    }

    public void HandleInterstitialDismissed(object sender, EventArgs args)
    {
        // Convocado quando o anúncio é descartado.

        // Liberar recursos após anúncio ser descartado.
        DestroyInterstitial();

        // Agora você pode pré-carregar o próximo anúncio intersticial.
        RequestInterstitial();
    }

    public void HandleInterstitialFailedToShow(object sender, EventArgs args)
    {
        // Convocado quando um InterstitialAd deixa de ser exibido.

        // Liberar recursos após anúncio ser descartado.
        DestroyInterstitial();

        // Agora você pode pré-carregar o próximo anúncio intersticial.
        RequestInterstitial();
    }

    public void HandleAdClicked(object sender, EventArgs args)
    {
        // Convocado quando há o registro de clique em um anúncio.
    }

    public void HandleInterstitialShown(object sender, EventArgs args)
    {
        // Convocado quando o anúncio é exibido.
    }

    public void HandleImpression(object sender, ImpressionData impressionData)
    {
        // Convocado quando há o registro de impressão de um anúncio.
    }

    public void DestroyInterstitial()
    {
        if (interstitial != null)
        {
            interstitial.Destroy();
            interstitial = null;
        }
    }
}

Recursos adicionais