Este guia aborda como carregar um anúncio de banner adaptativo fixo em um app Android.
Pré-requisitos
- Leia o guia para iniciantes.
- Opcional: para um exemplo de implementação de anúncios de banner, selecione um dos
seguintes apps de exemplo:
- Exemplo de anúncios de banner adaptativo fixo em Java, Kotlin ou Jetpack Compose.
- A demonstração de recursos avançados em Java ou Kotlin.
Sempre use anúncios de teste
Ao criar e testar seus apps, use anúncios de teste em vez de anúncios de produção ativos. Sua conta poderá ser suspensa se isso não for feito.
A maneira mais fácil de carregar anúncios de teste é usar nosso ID de bloco de anúncios de teste dedicado para banners do Android:
/21775744923/example/adaptive-banner
Ele foi configurado especialmente para retornar anúncios de teste em todas as solicitações, e você pode usá-lo nos seus próprios apps durante a programação, os testes e a depuração. Só não se esqueça de substituí-lo pelo seu ID de bloco de anúncios antes de publicar o app.
Para mais informações sobre como os anúncios de teste do SDK dos anúncios para dispositivos móveis do Google funcionam, consulte Ativar anúncios de teste.
Definir a visualização de anúncio
Layout XML
Adicione uma visualização ao arquivo XML de layout para servir como contêiner do banner adaptável fixo:
<!-- Ad view container that fills the width of the screen and adjusts its
height to the content of the ad. -->
<FrameLayout
android:id="@+id/ad_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true" />
Jetpack Compose
Inclua o módulo JetpackComposeDemo/compose-util. Esse módulo inclui helpers para compor o objeto
AdView
e os recursos.Crie uma classe
BannerAd
do módulocompose-util
:
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
Definir o tamanho do anúncio
Defina o AdSize
como um tipo de banner adaptativo fixo com uma largura especificada:
Java
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
Kotlin
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
Jetpack Compose
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
Adicionar AdManagerAdView
ao layout
Crie um AdManagerAdView
usando o tamanho do anúncio para adicionar ao layout do seu
app:
Java
// Create a new ad view.
adView = new AdManagerAdView(this);
adView.setAdUnitId(AD_UNIT);
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);
Kotlin
// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
this.adView = adView
// Replace ad container with new ad view.
binding.adViewContainer.removeAllViews()
binding.adViewContainer.addView(adView)
Jetpack Compose
val adView = remember { AdManagerAdView(context) }
// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = ADMANANGER_ADAPTIVE_BANNER_AD_UNIT_ID
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
Carregar um anúncio
Depois que o AdManagerAdView
estiver aplicado, a próxima etapa será
carregar um anúncio. Isso é feito com o método loadAd()
na classe AdManagerAdView
. Ele usa um parâmetro AdManagerAdRequest
que tem informações de tempo de execução, como dados de segmentação, sobre uma
única solicitação de anúncio.
Confira um exemplo de como carregar um anúncio:
Java
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
Kotlin
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
Se for bem-sucedido, seu app estará pronto para exibir anúncios de banner.
Atualizar um anúncio
Se você configurou o bloco de anúncios para ser atualizado, não é preciso solicitar outro anúncio quando ele não carrega. O SDK dos anúncios para dispositivos móveis do Google respeita qualquer taxa de atualização especificada na interface do Ad Manager. Se você não tiver ativado a atualização, faça uma nova solicitação. Para mais detalhes sobre a atualização dos blocos de anúncios, como instruções para definir uma taxa de atualização, consulte Taxa de atualização dos anúncios em apps para dispositivos móveis.
Liberar um recurso de anúncio
Quando terminar de usar um anúncio de banner, libere os recursos dele.
Para liberar o recurso do anúncio, remova o anúncio da hierarquia de visualização e solte todas as referências dele:
Java
public void destroyBanner() {
// Remove banner from view hierarchy.
if (adView != null) {
View parentView = (View) adView.getParent();
if (parentView instanceof ViewGroup) {
((ViewGroup) parentView).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
}
// Drop reference to the banner ad.
adView = null;
}
Kotlin
fun destroyBanner() {
// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
parentView.removeView(adView)
}
// Destroy the banner ad resources.
adView?.destroy()
// Drop reference to the banner ad.
adView = null
}
Eventos de anúncios
É possível detectar vários eventos no ciclo de vida do anúncio, incluindo carregamento, impressão e clique, além de eventos de abertura e fechamento. Recomendamos definir o callback antes de carregar o banner.Java
if (adView != null) {
adView.setAdListener(
new AdListener() {
@Override
public void onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
@Override
public void onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
// Code to be executed when an ad request fails.
}
@Override
public void onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
@Override
public void onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
});
}
Kotlin
adView?.adListener =
object : AdListener() {
override fun onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
override fun onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
override fun onAdFailedToLoad(adError: LoadAdError) {
// Code to be executed when an ad request fails.
}
override fun onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
override fun onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
override fun onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
}
Cada um dos métodos substituíveis em AdListener
corresponde a um evento no ciclo de vida de um anúncio.
Métodos substituíveis | |
---|---|
onAdClicked() |
O método onAdClicked()
é invocado quando um clique é registrado para um anúncio.
|
onAdClosed() |
O método onAdClosed()
é invocado quando um usuário volta ao app depois de acessar o URL de destino
de um anúncio. O app pode usar isso para retomar atividades suspensas ou
realizar qualquer outro trabalho necessário para se preparar para a interação.
|
onAdFailedToLoad() |
O método onAdFailedToLoad() é o único que inclui um parâmetro. O parâmetro de erro do tipo LoadAdError descreve o erro que ocorreu. Para mais informações, consulte a documentação sobre como depurar erros de carregamento de anúncios.
|
onAdImpression() |
O método onAdImpression()
é invocado quando uma impressão é registrada para um anúncio.
|
onAdLoaded() |
O método onAdLoaded()
é executado quando um anúncio termina de carregar. Se você quiser atrasar
a adição do AdManagerAdView
à sua atividade ou fragmento até ter certeza de que um anúncio será carregado, por
exemplo, faça isso aqui.
|
onAdOpened() |
O método onAdOpened()
é invocado quando um anúncio abre um overlay que cobre a tela.
|
Aceleração de hardware para anúncios em vídeo
Para veicular os anúncios em vídeo corretamente nas suas visualizações de anúncios de banner, ative a aceleração de hardware.
A aceleração de hardware é ativada por padrão, mas alguns apps podem desativá-la. Se esse for o caso do seu app, recomendamos ativar a aceleração de hardware para classes
Activity
que usam anúncios.
Ativar a aceleração de hardware
Se o app não se comporta da forma correta com a aceleração de hardware ativada globalmente, ela também pode ser controlada para atividades específicas. Para ativar ou desativar a aceleração de hardware, use o atributo android:hardwareAccelerated
para os elementos <application>
e <activity>
no AndroidManifest.xml
. O exemplo a seguir ativa a aceleração de hardware para todo o app, mas a desativa para uma atividade:
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
<!-- For activities that don't use ads, hardwareAcceleration can be false. -->
<activity android:hardwareAccelerated="false" />
</application>
Consulte o guia de aceleração de hardware para mais informações sobre opções de controle. As visualizações de anúncios individuais não podem ser ativadas para aceleração de hardware com a atividade desativada. Portanto, a atividade em si precisa ter a aceleração de hardware ativada.
Contagem manual de impressões
A contagem manual de impressões só é compatível com campanhas de venda direta e internas com criativos veiculados diretamente no Ad Manager. Ela não deve ser usada para preenchimento ou anúncios de redes de terceiros. Para mais detalhes, consulte Como contar impressões e cliques.
É possível enviar pings de impressões manualmente para o Ad Manager se há condições especiais em relação a quando uma impressão deve ser registrada:
Java
if (adManagerAdView != null) {
adManagerAdView.setManualImpressionsEnabled(true);
}
Kotlin
adManagerAdView?.setManualImpressionsEnabled(true)
Você poderá registrar uma impressão manualmente ao identificar que um anúncio foi retornado com sucesso e está sendo exibido na tela:
Java
if (adManagerAdView != null) {
adManagerAdView.recordManualImpression();
}
Kotlin
adManagerAdView?.recordManualImpression()
Eventos de apps
Com os eventos de aplicativos, você pode criar anúncios que enviam mensagens ao código do app. O app pode, então, realizar ações com base nessas mensagens.
Você pode detectar eventos do Ad Manager específicos do app usando
AppEventListener
.
Esses eventos podem ocorrer a qualquer momento do ciclo de vida do anúncio, até mesmo antes de
onAdLoaded()
ser chamado.
Defina o AppEventListener
no seu AdManagerAdView
:
Java
if (adManagerAdView != null) {
adManagerAdView.setAppEventListener(this);
}
Kotlin
adManagerAdView?.appEventListener = this
Veja um exemplo de como mudar a cor de segundo plano do seu app com base em um evento do aplicativo com um nome de cor:
Java
@Override
public void onAppEvent(@NonNull String name, @NonNull String info) {
if (name.equals("color")) {
switch (info) {
case "green":
// Set background color to green.
break;
case "blue":
// Set background color to blue.
break;
default:
// Set background color to black.
break;
}
}
}
Kotlin
override fun onAppEvent(name: String, info: String) {
if (name == "color") {
when (info) {
"green" -> {
// Set background color to green.
}
"blue" -> {
// Set background color to blue.
}
else -> {
// Set background color to black.
}
}
}
}
Aqui está o criativo correspondente, que envia mensagens de evento sobre cores do app para o listener:
<html>
<head>
<script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Send a color=green event when ad loads.
admob.events.dispatchAppEvent("color", "green");
document.getElementById("ad").addEventListener("click", function() {
// Send a color=blue event when ad is clicked.
admob.events.dispatchAppEvent("color", "blue");
});
});
</script>
<style>
#ad {
width: 320px;
height: 50px;
top: 0px;
left: 0px;
font-size: 24pt;
font-weight: bold;
position: absolute;
background: black;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div id="ad">Carpe diem!</div>
</body>
</html>
Confira o exemplo de eventos do app do Ad Manager para uma implementação de eventos do app no app de demonstração da API.
Próximas etapas
Banners recolhíveis
Os anúncios de banner recolhível aparecem inicialmente como uma sobreposição maior, com um botão para os deixar menores. Considere usar esse recurso para otimizar ainda mais sua performance. Consulte anúncios de banner recolhível para mais detalhes.
Banners adaptativos inline
Os banners adaptativos inline são maiores e mais altos do que os fixos. Eles têm altura variável e podem ser tão altos quanto a tela do dispositivo. Para apps que posicionam anúncios de banner em conteúdo rolável, recomendamos usar os banners adaptativos inline em vez dos adaptativos fixos. Consulte banners adaptativos inline para mais detalhes.