Ir al contenido

Banner

Los anuncios de banner son anuncios de imagen o de texto rectangulares que ocupan un lugar dentro del diseño de una aplicación. Permanecen en la pantalla mientras los usuarios interactúan con la aplicación y pueden actualizarse automáticamente después de un cierto período de tiempo. Si eres nuevo en la publicidad móvil, son una excelente opción para comenzar.

Existen tres formas de integrar un banner: añadiendo la vista de banner a un layout XML, creándola mediante código o insertándola en Jetpack Compose. A continuación se muestran ejemplos de cada opción:

<com.wortise.ads.banner.BannerAd
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:adSize="HEIGHT_50"
app:adUnitId="Ad Unit ID de Wortise"
/>

El widget tiene soporte para los siguientes parámetros:

ParámetroTipoRequeridoDescripción
app:adUnitIdStringSiEl ID del ad unit a asignar al banner
app:adSizeAdSizeNoTamaño máximo (altura) para el banner. Los posibles valores para este parámetro se encuentran declarados en la clase AdSize
app:autoRefreshTimeIntegerNoValor en segundos que representa el tiempo que deberá transcurrir para que se realice la carga de un nuevo anuncio banner
class MainActivity : Activity() {
private var bannerAd: BannerAd? = null
override fun onCreate(savedInstanceState: Bundle?) {
...
bannerAd = BannerAd(this).also {
it.adSize = AdSize.HEIGHT_50
it.adUnitId = "<Ad Unit ID de Wortise>"
// Por ejemplo, añadímos el BannerAd en un FrameLayout
val frameLayout = findViewById<FrameLayout>(R.id.frame)
frameLayout.addView(it)
it.loadAd()
}
}
override fun onDestroy() {
...
bannerAd?.destroy()
}
override fun onPause() {
...
bannerAd?.pause()
}
override fun onResume() {
...
bannerAd?.resume()
}
}

La clase BannerAd ofrece los siguientes métodos para configurar la instancia:

MétodoRequeridoDescripción
setAdUnitId(String)SiAsigna un ad unit al banner
setAdSize(AdSize)NoTamaño máximo (altura) para el banner. Los posibles valores para este parámetro se encuentran declarados en la clase AdSize
setAutoRefreshTime(long)NoValor en milisegundos que representa el tiempo que deberá transcurrir para que se realice la carga de un nuevo anuncio banner
setAutoRefreshTime(long, TimeUnit)NoIgual que el método anterior, pero permitiendo especificar la unidad de tiempo del valor indicado

Los anuncios de banner de Wortise se pueden integrar en Jetpack Compose utilizando la API de interoperabilidad AndroidView de Compose.

@Composable
fun WortiseBanner() {
val context = LocalContext.current
val banner = remember { BannerAd(context) }
AndroidView(
factory = {
banner.apply {
adSize = AdSize.HEIGHT_50
adUnitId = "<Ad Unit ID de Wortise>"
loadAd()
}
},
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
)
DisposableEffect(Unit) {
onDispose {
banner.destroy()
}
}
}

La clase BannerAd es una View estándar de Android, por lo que se puede insertar en una interfaz de Compose mediante AndroidView.

La instancia del banner se crea con remember para conservarla entre recomposiciones y se destruye cuando el composable sale de la composición.

@Composable
fun MyScreen() {
Column {
// Contenido de tu pantalla
WortiseBanner()
}
}

Los banners adaptativos son un nuevo formato de banner que se caracteriza por adaptar el tamaño de los anuncios según el dispositivo y la interfaz de la aplicación, para lograr maximizar el rendimiento.

Actualmente existe soporte para dos tipos de banners adaptativos:

Este tipo de banner está diseñado para reemplazar a los banners tradicionales de 320x50 y ser posicionado en la parte superior o inferior de la pantalla.

Para hacer uso de este formato, se debe utilizar el siguiente código para configurar un tamaño adaptativo, indicando la anchura del banner:

// Es necesario especificar la anchura del banner
val adSize = AdSize.getAnchoredAdaptiveBannerAdSize(context, width)
bannerAd.adSize = adSize

Alternativamente, se puede implementar esta otra opción para que el SDK calcule automáticamente la anchura del banner, donde se deberá pasar la propia instancia del BannerAd o el View que va a contener a dicho banner:

val adSize = AdSize.getAnchoredAdaptiveBannerAdSize(view)
bannerAd.adSize = adSize

Este otro tipo de banner, en comparación con los anclados, está diseñado para tener una altura variable y ser posicionado dentro de un contenido desplazable.

En este caso, se debe utilizar un código como el siguiente para configurar un tamaño adaptativo apropiado:

val maxHeight = 200
// Es necesario especificar la anchura del banner. La altura máxima es un
// parámetro opcional
val adSize = AdSize.getInlineAdaptiveBannerAdSize(context, width, maxHeight)
bannerAd.adSize = adSize

Alternativamente, se puede implementar esta otra opción para que el SDK calcule automáticamente la anchura del banner, donde se deberá pasar la propia instancia del BannerAd o el View que va a contener a dicho banner:

val maxHeight = 200
val adSize = AdSize.getInlineAdaptiveBannerAdSize(view, maxHeight)
bannerAd.adSize = adSize

Los banners colapsables son banners anclados que inicialmente se muestran como una superposición de mayor tamaño, con un botón que los colapsa hasta el tamaño declarado. Su objetivo es mejorar el rendimiento de los banners anclados sin ocupar más espacio de forma permanente.

Para solicitar uno, hay que pasar una instancia de RequestParameters con la posición deseada al método loadAd:

val parameters = RequestParameters(
collapsible = CollapsiblePosition.BOTTOM
)
bannerAd.loadAd(parameters)

La posición determina dónde se ancla el anuncio expandido, y debe coincidir con la posición del banner dentro del layout de la app:

ValorDescripción
CollapsiblePosition.BOTTOMEl banner se encuentra en la parte inferior
CollapsiblePosition.TOPEl banner se encuentra en la parte superior

Se puede añadir un listener a cualquier instancia de BannerAd para recibir los diferentes eventos que sucedan durante su ciclo de vida. Para ello, es necesario implementar la interfaz BannerAd.Listener, como se muestra en el siguiente ejemplo:

bannerAd.listener = object : BannerAd.Listener {
override fun onBannerClicked(ad: BannerAd) {
// Invocado cuando el anuncio ha sido clickeado
}
override fun onBannerFailedToLoad(ad: BannerAd, error: AdError) {
// Invocado cuando el anuncio no se ha podido cargar
// (por error o falta de inventario)
}
override fun onBannerImpression(ad: BannerAd) {
// Invocado cuando el anuncio ha generado una impresión
}
override fun onBannerLoaded(ad: BannerAd) {
// Invocado cuando el anuncio ha sido cargado
}
override fun onBannerRevenuePaid(ad: BannerAd, data: Revenuedata) {
// Invocado cuando el anuncio ha generado un ingreso
}
}