Anúncios de abertura do app

Os anúncios de abertura do app são um formato especial destinado a editores que querem gerar receita com as telas de carregamento do app. Os anúncios de abertura do app podem ser fechados a qualquer momento e são projetados para aparecer quando os usuários trazem o app para o primeiro plano.

Os anúncios de abertura do app mostram automaticamente uma pequena área de branding para que os usuários saibam que estão no seu app. Confira um exemplo de anúncio de abertura do app:

Pré-requisitos

Sempre teste com anúncios de teste

O exemplo de código abaixo contém um ID do bloco de anúncios que pode ser usado para solicitar anúncios de teste. Ele foi configurado especificamente para retornar anúncios de teste em vez de anúncios de produção para cada solicitação, o que o torna seguro para uso.

No entanto, depois de registrar um app na interface da Web da AdMob e criar seus próprios IDs de bloco de anúncios para uso no app, configure seu dispositivo como um dispositivo de teste durante o desenvolvimento.

Android

ca-app-pub-3940256099942544/9257395921

iOS

ca-app-pub-3940256099942544/5575463023

Implementação

As principais etapas para integrar anúncios de abertura do app são:

  1. Criar uma classe de utilitários
  2. Carregar o anúncio de abertura do app
  3. Ouvir eventos de anúncios de abertura do app
  4. Considerar a validade dos anúncios
  5. Ouvir eventos de estado do app
  6. Mostrar o anúncio de abertura do app
  7. Limpar o anúncio de abertura do app
  8. Pré-carregar o próximo anúncio de abertura do app

Criar uma classe de utilitários

Crie uma nova classe com o nome AppOpenAdController para carregar o anúncio. Essa classe controla uma variável de instância para acompanhar um anúncio carregado e o ID do bloco de anúncios de cada plataforma.

using System;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;

/// <summary>
/// Demonstrates how to use the Google Mobile Ads app open ad format.
/// </summary>
[AddComponentMenu("GoogleMobileAds/Samples/AppOpenAdController")]
public class AppOpenAdController : MonoBehaviour
{

    // These ad units are configured to always serve test ads.
#if UNITY_ANDROID
    private string _adUnitId = "ca-app-pub-3940256099942544/9257395921";
#elif UNITY_IPHONE
    string _adUnitId = "ca-app-pub-3940256099942544/5575463023";
#else
    private string _adUnitId = "unused";
#endif

    public bool IsAdAvailable
    {
        get
        {
            return _appOpenAd != null;
        }
    }

    public void Start()
    {
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize((InitializationStatus initStatus) =>
        {
            // This callback is called once the MobileAds SDK is initialized.
        });
    }

    /// <summary>
    /// Loads the app open ad.
    /// </summary>
    public void LoadAppOpenAd()
    {
    }

    /// <summary>
    /// Shows the app open ad.
    /// </summary>
    public void ShowAppOpenAd()
    {
    }
}

Carregar o anúncio de abertura do app

É possível carregar um anúncio de abertura do app usando o método estático Load() na classe AppOpenAd. O método de carregamento requer um ID do bloco de anúncios, um objeto AdRequest e um gerenciador de conclusão que é chamado quando o carregamento do anúncio é concluído ou falha. O objeto AppOpenAd carregado é fornecido como um parâmetro no gerenciador de conclusão. O exemplo abaixo mostra como carregar uma AppOpenAd.


 // These ad units are configured to always serve test ads.
#if UNITY_ANDROID
   private string _adUnitId = "ca-app-pub-3940256099942544/9257395921";
#elif UNITY_IPHONE
   string _adUnitId = "ca-app-pub-3940256099942544/5575463023";
#else
  private string _adUnitId = "unused";
#endif

  private AppOpenAd appOpenAd;

  /// <summary>
  /// Loads the app open ad.
  /// </summary>
  public void LoadAppOpenAd()
  {
      // Clean up the old ad before loading a new one.
      if (appOpenAd != null)
      {
            appOpenAd.Destroy();
            appOpenAd = null;
      }

      Debug.Log("Loading the app open ad.");

      // Create our request used to load the ad.
      var adRequest = new AdRequest();

      // send the request to load the ad.
      AppOpenAd.Load(_adUnitId, adRequest,
          (AppOpenAd ad, LoadAdError error) =>
          {
              // if error is not null, the load request failed.
              if (error != null || ad == null)
              {
                  Debug.LogError("app open ad failed to load an ad " +
                                 "with error : " + error);
                  return;
              }

              Debug.Log("App open ad loaded with response : "
                        + ad.GetResponseInfo());

              appOpenAd = ad;
              RegisterEventHandlers(ad);
          });
  }

Ouvir eventos de anúncios de abertura do app

Para personalizar ainda mais o comportamento do seu anúncio, você pode se conectar a vários eventos no ciclo de vida do anúncio: abertura, fechamento e assim por diante. Detecte esses eventos registrando um delegado, conforme mostrado abaixo.

private void RegisterEventHandlers(AppOpenAd ad)
{
    // Raised when the ad is estimated to have earned money.
    ad.OnAdPaid += (AdValue adValue) =>
    {
        Debug.Log(String.Format("App open ad paid {0} {1}.",
            adValue.Value,
            adValue.CurrencyCode));
    };
    // Raised when an impression is recorded for an ad.
    ad.OnAdImpressionRecorded += () =>
    {
        Debug.Log("App open ad recorded an impression.");
    };
    // Raised when a click is recorded for an ad.
    ad.OnAdClicked += () =>
    {
        Debug.Log("App open ad was clicked.");
    };
    // Raised when an ad opened full screen content.
    ad.OnAdFullScreenContentOpened += () =>
    {
        Debug.Log("App open ad full screen content opened.");
    };
    // Raised when the ad closed full screen content.
    ad.OnAdFullScreenContentClosed += () =>
    {
        Debug.Log("App open ad full screen content closed.");
    };
    // Raised when the ad failed to open full screen content.
    ad.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("App open ad failed to open full screen content " +
                       "with error : " + error);
    };
}

Considerar a validade dos anúncios

Para que um anúncio expirado não seja veiculado, adicione um método ao AppOpenAdController que verifique há quanto tempo o anúncio foi carregado. Depois, use esse método para verificar se o anúncio continua válido.

O anúncio de abertura do app tem um tempo limite de quatro horas. Armazene em cache o tempo de carregamento na variável _expireTime.

// send the request to load the ad.
AppOpenAd.Load(_adUnitId, adRequest,
    (AppOpenAd ad, LoadAdError error) =>
    {
        // If the operation failed, an error is returned.
        if (error != null || ad == null)
        {
            Debug.LogError("App open ad failed to load an ad with error : " +
                            error);
            return;
        }

        // If the operation completed successfully, no error is returned.
        Debug.Log("App open ad loaded with response : " + ad.GetResponseInfo());

        // App open ads can be preloaded for up to 4 hours.
        _expireTime = DateTime.Now + TimeSpan.FromHours(4);

        _appOpenAd = ad;
    });

Atualize a propriedade IsAdAvailable para verificar _expireTime e confirmar se o anúncio carregado ainda é válido.

public bool IsAdAvailable
{
    get
    {
        return _appOpenAd != null
               && _appOpenAd.IsLoaded()
               && DateTime.Now < _expireTime;
    }
}

Ouvir eventos de estado do app

Use AppStateEventNotifier para detectar eventos em primeiro e segundo plano do aplicativo. Essa classe vai gerar o evento AppStateChanged sempre que o aplicativo estiver em primeiro ou segundo plano.

private void Awake()
{
    // Use the AppStateEventNotifier to listen to application open/close events.
    // This is used to launch the loaded ad when we open the app.
    AppStateEventNotifier.AppStateChanged += OnAppStateChanged;
}

private void OnDestroy()
{
    // Always unlisten to events when complete.
    AppStateEventNotifier.AppStateChanged -= OnAppStateChanged;
}

Quando processamos o estado AppState.Foreground e a IsAdAvailable é true, chamamos ShowAppOpenAd() para mostrar o anúncio.

private void OnAppStateChanged(AppState state)
{
    Debug.Log("App State changed to : "+ state);

    // if the app is Foregrounded and the ad is available, show it.
    if (state == AppState.Foreground)
    {
        if (IsAdAvailable)
        {
            ShowAppOpenAd();
        }
    }
}

Mostrar o anúncio de abertura do app

Para mostrar um anúncio de abertura do app carregado, chame o método Show() na instância AppOpenAd. Os anúncios só podem ser mostrados uma vez por carregamento. Use o método CanShowAd() para verificar se o anúncio está pronto para ser mostrado.

/// <summary>
/// Shows the app open ad.
/// </summary>
public void ShowAppOpenAd()
{
    if (appOpenAd != null && appOpenAd.CanShowAd())
    {
        Debug.Log("Showing app open ad.");
        appOpenAd.Show();
    }
    else
    {
        Debug.LogError("App open ad is not ready yet.");
    }
}

Limpar o anúncio de abertura do app

Quando terminar de usar um AppOpenAd, chame o método Destroy() antes de descartar a referência a ele:

appOpenAd.Destroy();

Isso notifica o plug-in de que o objeto não será mais usado e que a memória que ele ocupa pode ser recuperada. A falha na chamada desse método resulta em vazamentos de memória.

Pré-carregar o próximo anúncio de abertura do app

AppOpenAd é um objeto de uso único. Isso significa que, depois que um anúncio de abertura de app é mostrado, o objeto não pode ser usado novamente. Para solicitar outro anúncio de abertura de app, crie um novo objeto AppOpenAd.

Para preparar um anúncio de abertura do app para a próxima oportunidade de impressão, pré-carregue o anúncio de abertura do app quando o evento de anúncio OnAdFullScreenContentClosed ou OnAdFullScreenContentFailed for gerado.

private void RegisterReloadHandler(AppOpenAd ad)
{
    ...
    // Raised when the ad closed full screen content.
    ad.OnAdFullScreenContentClosed += ()
    {
        Debug.Log("App open ad full screen content closed.");

        // Reload the ad so that we can show another as soon as possible.
        LoadAppOpenAd();
    };
    // Raised when the ad failed to open full screen content.
    ad.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("App open ad failed to open full screen content " +
                       "with error : " + error);

        // Reload the ad so that we can show another as soon as possible.
        LoadAppOpenAd();
    };
}

Inicializações a frio e telas de carregamento

Até agora, a documentação pressupõe que você só veicule anúncios de abertura do app quando os usuários colocam o app em primeiro plano quando ele está suspenso na memória. As "inicializações a frio" ocorrem quando o app é iniciado, mas não foi suspenso anteriormente na memória.

Um exemplo de inicialização a frio é quando um usuário abre seu app pela primeira vez. Com as inicializações a frio, você não terá um anúncio de abertura de app carregado anteriormente que esteja pronto para ser mostrado imediatamente. O atraso entre o momento em que você solicita um anúncio e o momento em que ele é recebido pode criar uma situação em que os usuários podem usar seu app brevemente antes de se surpreenderem com um anúncio fora do contexto. Isso precisa ser evitado porque é uma experiência ruim para o usuário.

A maneira preferencial de usar anúncios de abertura do app em inicializações a frio é usar uma tela de carregamento para carregar os recursos do jogo ou do app e mostrar o anúncio apenas na tela de carregamento. Se o carregamento do app estiver concluído e o usuário tiver sido enviado ao conteúdo principal do app, não mostre o anúncio.

Práticas recomendadas

Os anúncios de abertura do app ajudam a gerar receita com a tela de carregamento do app quando ele é inicializado pela primeira vez e durante a troca de apps. No entanto, é importante manter as práticas recomendadas a seguir em mente para que os usuários gostem de usar o app.

  • Mostre o primeiro anúncio de abertura do app depois que o usuário acessar o aplicativo algumas vezes.
  • Mostre anúncios de abertura do app em momentos em que os usuários esperariam o carregamento do app.
  • Se você tiver uma tela de carregamento abaixo do anúncio de abertura do app e ela for concluída antes que o anúncio seja dispensado, dispense a tela de carregamento no manipulador de eventos OnAdDidDismissFullScreenContent.
  • Na plataforma iOS, AppStateEventNotifier instancia um AppStateEventClient GameObject. Essa GameObject é necessária para que os eventos sejam disparados, então não a destrua. Os eventos param de ser acionados se o GameObject for destruído.

Outros recursos