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. Eles podem ser fechados a qualquer momento e são projetados para serem mostrados quando os usuários trazem seu 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 como é um anúncio de abertura do app:
Pré-requisitos
- Conclua o Guia para iniciantes.
- Plug-in do Unity 7.1.0 ou mais recente.
Sempre teste com anúncios de teste
O exemplo de código a seguir contém um ID de bloco de anúncios que você pode usar para solicitar anúncios de teste. Ele foi configurado especialmente para retornar anúncios de teste em vez de anúncios de produção para cada solicitação, tornando-o 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 usar no app, configure explicitamente 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:
- Criar uma classe de utilitários
- Carregar o anúncio de abertura do app
- Detectar eventos de anúncios de abertura do app
- Considerar a validade dos anúncios
- Detectar eventos de estado do app
- Mostrar o anúncio de abertura do app
- Limpar o anúncio de abertura do app
- Pré-carregar o próximo anúncio de abertura do app
Criar uma classe de utilitários
Crie uma classe chamada 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 apresenta falha. O objeto AppOpenAd
carregado é
fornecido como um parâmetro no gerenciador de conclusão. O exemplo abaixo mostra como
carregar um 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);
});
}
Detectar 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. Registre um delegado para detectar esses eventos, 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 verifica há quanto tempo o anúncio foi carregado.
Depois, use esse método para verificar se o anúncio ainda é válido.
O anúncio de abertura do app tem um tempo limite de 4 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;
}
}
Detectar eventos de estado do app
Use o AppStateEventNotifier
para detectar eventos de primeiro plano e
segundo plano do aplicativo. Essa classe vai gerar o evento AppStateChanged
sempre que
o aplicativo for colocado 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 o 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 veiculado.
/// <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 é mais usado e que a memória que ele ocupa pode ser recuperada. Se esse método não for chamado, haverá 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,
é necessário criar um novo objeto AppOpenAd
.
Para preparar um anúncio de abertura do app para a próxima oportunidade de impressão, faça o pré-carregamento dele assim que 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ó mostra anúncios de abertura do app quando os usuários colocam o app em primeiro plano enquanto ele está suspenso na memória. As "inicializações a frio" ocorrem quando o app é iniciado, mas não foi suspenso 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 app aberto carregado anteriormente pronto para ser mostrado imediatamente. O atraso entre o momento em que você solicita um anúncio e o momento em que o recebe pode criar uma situação em que os usuários conseguem usar seu app brevemente antes de serem surpreendidos por um anúncio fora de contexto. Isso deve ser evitado porque é uma experiência de usuário ruim.
A maneira preferida 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 app e mostrar o anúncio apenas na tela de carregamento. Se o app tiver terminado de carregar e enviado o usuário para o conteúdo principal, não mostre o anúncio.
Práticas recomendadas
Os anúncios de abertura do app ajudam a monetizar a tela de carregamento quando o app é iniciado pela primeira vez e durante a troca de apps. No entanto, é importante seguir as práticas recomendadas abaixo para que os usuários gostem de usar seu 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 durante os momentos em que os usuários estariam esperando o carregamento do app.
- Se você tiver uma tela de carregamento abaixo do anúncio de abertura do app e ela
terminar de carregar antes que o anúncio seja dispensado, dispense a tela de carregamento no
manipulador de eventos
OnAdDidDismissFullScreenContent
. - Na plataforma iOS,
AppStateEventNotifier
cria uma instância deAppStateEventClient GameObject
. EsseGameObject
é necessário para que os eventos sejam disparados. Portanto, não o destrua. Os eventos param de ser acionados se oGameObject
for destruído.
Outros recursos
- Exemplo HelloWorld: Uma implementação mínima de todos os formatos de anúncio.