Anúncios de abertura do aplicativo

Os anúncios de abertura de aplicativos são um formato de anúncio especial para monetizar as telas de carregamento do seu app. Esses anúncios podem ser fechados a qualquer momento e foram criados para serem veiculados:

  • Quando o app é aberto.
  • Quando o app é trazido para o primeiro plano.
  • Quando o usuário volta do segundo plano para o app.

Este guia mostrará como integrar anúncios de abertura do aplicativo 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.

Aparência

Os anúncios de abertura do aplicativo incluem um botão Go to the app para que os usuários saibam que estão no seu aplicativo e possam fechar o anúncio. Veja um exemplo de como este formato de anúncio pode se apresentar:

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.

Termos

  • Inicialização a frio é a inicialização de um aplicativo que não está na RAM, criando uma nova sessão de aplicativo.
  • Inicialização a quente é a alternação do aplicativo do modo de segundo plano, quando o aplicativo está pausado na RAM, para o modo de primeiro plano.

Implementação

  1. Crie um AppOpenAdLoader.
  2. Carregue o anúncio, convocando o método AppOpenAdLoader.LoadAd(AdRequest) — seja via async/await ou usando callbacks.
  3. Registrar listeners para eventos em que os usuários interagem com seu anúncio.
  4. Usar AppOpenAdLoader.LoadAd(AdRequest) para lidar com mudanças de status do aplicativo e exibir anúncios de abertura do aplicativo.
  5. Mostrar o anúncio chamando o método AppOpenAd.Show().
  6. Liberar os recursos.

Principais etapas

  1. Crie um AppOpenAdLoader.

    using UnityEngine;
    using YandexMobileAds;
    using YandexMobileAds.Base;
    
    public class YandexMobileAdsAppOpenAdDemoScript : MonoBehaviour
    {
        private AppOpenAdLoader appOpenAdLoader;
        private AppOpenAd appOpenAd;
    
        private void SetupLoader()
        {
            appOpenAdLoader = new AppOpenAdLoader();
            // ...
        }
    }
    
  2. Carregar o anúncio usando o método LoadAd.

    private async void RequestAppOpenAd()
    {
        string adUnitId = "demo-appopenad-yandex"; // substitua por "R-M-XXXXXX-Y"
        try {
            appOpenAd = await appOpenAdLoader.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 RequestAppOpenAd()
    {
        string adUnitId = "demo-appopenad-yandex"; // substitua por "R-M-XXXXXX-Y"
        AdRequest adRequest = new AdRequest(adUnitId);
        appOpenAdLoader.LoadAd(
            adRequest: adRequest,
            onLoaded: appOpenAd => {
                // O anúncio foi carregado com sucesso. Agora é possível lidar com isso.
                this.appOpenAd = appOpenAd;
            },
            onFailed: args => {
                // O anúncio não carregou, com {args.Message}
                // Tentar carregar outro anúncio a partir do callback onFailed é 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 anúncios de demonstração: "demo-appopenad-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;
    
    // ...
    appOpenAd.OnAdClicked += HandleAdClicked;
    appOpenAd.OnAdShown += HandleAdShown;
    appOpenAd.OnAdFailedToShow += HandleAdFailedToShow;
    appOpenAd.OnAdDismissed += HandleAdDismissed;
    appOpenAd.OnAdImpression += HandleImpression;
    // ...
    
    public void HandleAdClicked(object sender, EventArgs args)
    {
        // Convocado quando há o registro de clique em um anúncio.
    }
    
    public void HandleAdShown(object sender, EventArgs args)
    {
        // Convocado quando o anúncio é exibido.
    }
    
    public void HandleAdFailedToShow(object sender, AdFailureEventArgs args)
    {
        // Convocado quando um anúncio deixa de ser exibido.
    }
    
    public void HandleAdDismissed(object sender, EventArgs args)
    {
        // Convocado quando um anúncio é descartado.
    }
    
    public void HandleImpression(object sender, ImpressionData impressionData)
    {
        // Convocado quando há o registro de impressão de um anúncio.
    }
    
  4. Usar AppOpenAdLoader.LoadAd(AdRequest) para lidar com mudanças de status do aplicativo e exibir anúncios de abertura do aplicativo.

    using YandexMobileAds;
    
    public class YandexMobileAdsAppOpenAdDemoScript : MonoBehaviour
    {
         public void Awake()
         {
             // Use o AppStateObserver para ouvir eventos de abertura/fechamento do aplicativo.
             AppStateObserver.OnAppStateChanged += HandleAppStateChanged;
         }
    
         public void OnDestroy()
         {
             // Desinscreva-se do evento para evitar vazamentos de memória.
             AppStateObserver.OnAppStateChanged -= HandleAppStateChanged;
         }
    }
    
  5. Mostrar o anúncio chamando o método AppOpenAd.Show().

    private void HandleAppStateChanged(object sender, AppStateChangedEventArgs args)
    {
         if (!args.IsInBackground)
         {
             ShowAppOpenAd();
         }
    }
    
    private void ShowAppOpenAd()
    {
         if (appOpenAd != null)
         {
             appOpenAd.Show();
         }
    }
    

    Observação

    Se o anúncio já tiver sido veiculado, a chamada do método AppOpenAd.Show() (abrir anúncio, exibir) method retornará um erro de exibição em HandleAdFailedToShow(falha na exibição).

  6. Chame Destroy() para os anúncios que são exibidos e elimine links que não são mais usados na cena atual.

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

    public void DestroyAppOpenAd()
    {
         if (appOpenAd != null)
         {
             appOpenAd.Destroy();
             appOpenAd = null;
         }
    }
    

Exemplo de código completo

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

public class YandexMobileAdsAppOpenAdDemoScript : MonoBehaviour
{
    private AppOpenAdLoader appOpenAdLoader;
    private AppOpenAd appOpenAd;
    private var isColdStartAdShown = false;

    private void Awake()
    {
        DontDestroyOnLoad(gameObject);
        SetupLoader();
        AppStateObserver.OnAppStateChanged += HandleAppStateChanged;
        RequestAppOpenAd();
    }

    private void OnDestroy()
    {
        AppStateObserver.OnAppStateChanged -= HandleAppStateChanged;
    }

    private void SetupLoader()
    {
        appOpenAdLoader = new AppOpenAdLoader();
    }

    private void HandleAppStateChanged(object sender, AppStateChangedEventArgs args)
    {
        if (!args.IsInBackground)
        {
            ShowAppOpenAd();
        }
    }

    private void ShowAppOpenAd()
    {
        if (appOpenAd != null)
        {
            appOpenAd.Show();
        }
    }

    private async void RequestAppOpenAd()
    {
        string adUnitId = "demo-appopenad-yandex"; // substitua por "R-M-XXXXXX-Y"
        try {
            appOpenAd = await appOpenAdLoader.LoadAd(new AdRequest(adUnitId));

            // Adicionar manipuladores de eventos para ações do anúncio
            appOpenAd.OnAdClicked += HandleAdClicked;
            appOpenAd.OnAdShown += HandleAdShown;
            appOpenAd.OnAdFailedToShow += HandleAdFailedToShow;
            appOpenAd.OnAdDismissed += HandleAdDismissed;
            appOpenAd.OnAdImpression += HandleImpression;

            if (!isColdStartAdShown) {
                ShowAppOpenAd();
                isColdStartAdShown = true;
            }
        }
        catch (AdLoadingException e)
        {
            // O anúncio não carregou, com {e.Message}
            // Tentar carregar outro anúncio a partir do bloco catch é fortemente desencorajado.
        }
    }

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

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

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

    public void HandleAdFailedToShow(object sender, AdFailureEventArgs args)
    {
        // Convocado quando um anúncio deixa de ser exibido.

        // Liberar recursos.
        DestroyAppOpenAd();

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

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

    public void HandleAdShown(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 DestroyAppOpenAd()
    {
        if (appOpenAd != null)
        {
            appOpenAd.Destroy();
            appOpenAd = null;
        }
    }
}
using System;
using UnityEngine;
using UnityEngine.UI;
using YandexMobileAds;
using YandexMobileAds.Base;

public class YandexMobileAdsAppOpenAdDemoScript : MonoBehaviour {
    private AppOpenAdLoader appOpenAdLoader;
    private AppOpenAd appOpenAd;
    private var isColdStartAdShown = false;

    private void Awake()
    {
        DontDestroyOnLoad(gameObject);
        SetupLoader();
        AppStateObserver.OnAppStateChanged += HandleAppStateChanged;
        RequestAppOpenAd();
    }

    private void OnDestroy()
    {
        AppStateObserver.OnAppStateChanged -= HandleAppStateChanged;
    }

    private void SetupLoader()
    {
        appOpenAdLoader = new AppOpenAdLoader();
    }

    private void HandleAppStateChanged(object sender, AppStateChangedEventArgs args)
    {
        if (!args.IsInBackground)
        {
            ShowAppOpenAd();
        }
    }

    private void ShowAppOpenAd()
    {
        if (appOpenAd != null)
        {
            appOpenAd.Show();
        }
    }

    private void RequestAppOpenAd()
    {
        string adUnitId = "demo-appopenad-yandex"; // substitua por "R-M-XXXXXX-Y"
        AdRequest adRequest = new AdRequest(adUnitId);
        appOpenAdLoader.LoadAd(
            adRequest: adRequest,
            onLoaded: HandleAdLoaded,
            onFailed: HandleAdFailedToLoad);
    }

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

        // Adicionar manipuladores de eventos para ações do anúncio
        this.appOpenAd.OnAdClicked += HandleAdClicked;
        this.appOpenAd.OnAdShown += HandleAdShown;
        this.appOpenAd.OnAdFailedToShow += HandleAdFailedToShow;
        this.appOpenAd.OnAdDismissed += HandleAdDismissed;
        this.appOpenAd.OnAdImpression += HandleImpression;

        if (!isColdStartAdShown)
        {
            ShowAppOpenAd();
            isColdStartAdShown = true;
        }
    }

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

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

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

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

    public void HandleAdFailedToShow(object sender, AdFailureEventArgs args)
    {
        // Convocado quando um anúncio deixa de ser exibido.

        // Liberar recursos.
        DestroyAppOpenAd();

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

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

    public void HandleAdShown(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 DestroyAppOpenAd()
    {
        if (appOpenAd != null)
        {
            appOpenAd.Destroy();
            appOpenAd = null;
        }
    }
}

Funcionalidades da integração de anúncios de abertura do aplicativo

  1. O carregamento pode demorar, então não aumente o tempo de inicialização a frio se o anúncio não tiver carregado.
  2. Pré-carregue anúncios com antecedência para impressões subsequentes em inicializações a quente.
  3. Não recomendamos carregar anúncios de abertura de app em simultâneo com outros formatos de anúncio na inicialização do aplicativo, pois este pode estar baixando dados operacionais essenciais. Isso pode gerar cargas excessivas para o seu dispositivo e para a conexão de internet, atrasando o carregamento dos anúncios.
  4. 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.

Teste da integração de anúncios de abertura de app

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-appopenad-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 se seus anúncios de abertura de app estão integrados corretamente 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 App Open Ad was integrated successfully

Se houver algum problema na integração dos anúncios, 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 na hora da abertura do app e durante o processo de testagem. 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-appopenad-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.

Recomendações

  1. Não recomendamos a exibição de anúncios de abertura de app antes da tela de carregamento inicial do aplicativo.

    A apresentação da tela de carregamento inicial melhora a experiência do usuário, tornando-a mais intuitiva. Dessa forma, o usuário sabe que abriu o aplicativo certo e não fica surpreso ou confuso com o anúncio. Na mesma tela, você pode avisar os usuários sobre o próximo anúncio. Use um indicador de carregamento ou simplesmente uma mensagem de texto informando ao usuário que ele retomará a visualização do conteúdo do aplicativo após o anúncio.

  2. Se houver um atraso entre a solicitação e a renderização do anúncio, o usuário poderá abrir brevemente seu aplicativo e, em seguida, ver inesperadamente um anúncio não relacionado ao conteúdo. Isso pode impactar negativamente a experiência do usuário, então vale a pena evitar. Uma possível solução é exibir a tela de carregamento inicial antes da apresentação do conteúdo principal, e só começar a exibir anúncios a partir dessa tela. Não recomendamos a exibição de anúncios caso o app já tenha apresentado conteúdo após a tela de carregamento inicial.

  3. Espere os usuários novos abrirem e usarem o aplicativo algumas vezes antes de começar a exibir impressões de anúncios de abertura de app. Só exiba o anúncio para usuários que atendam a critérios específicos (por exemplo, que concluam uma determinada fase, abram o app um certo número de vezes ou não participem de oferecimentos recompensados). Não recomendamos a exibição de anúncios imediatamente após a instalação do aplicativo.

  4. Ajuste a frequência de impressões com base no comportamento do usuário. Não recomendamos a veiculação de anúncios a cada inicialização do app a frio ou a quente.

  5. Só exiba anúncios caso o aplicativo já esteja rodando em segundo plano há algum tempo (30 segundos, 2 minutos ou 15 minutos, por exemplo).

  6. Não deixe de realizar testes, pois cada aplicativo é um caso único e requer uma abordagem própria para maximizar a receita sem comprometer a retenção dos usuários ou o tempo de permanência no app. O comportamento e o engajamento dos usuários podem oscilar com o tempo, por isso recomendamos que você teste diferentes estratégias de exibição de anúncios de abertura de app periodicamente no seu aplicativo.

Recursos adicionais

Seguinte