Documentación del SDK

Integra el SDK de Android de Appaloo en tu app y publica tus anuncios con unas pocas líneas de código.

Instalación

Añade el SDK de Appaloo a tu proyecto de Android desde nuestro repositorio Maven. El SDK apunta a Android API 30+.

settings.gradle.kts

dependencyResolutionManagement { repositories { google() mavenCentral() maven { url = uri("https://download.appaloo.io/appaloo-sdk/android") } } }

app/build.gradle.kts

dependencies { implementation("io.appaloo:sdk:1.0.3") }
Permisos

El SDK necesita acceso a Internet para descargar el contenido de los anuncios.

<uses-permission android:name="android.permission.INTERNET" />

Inicialización

Crea un AppalooClient con el UUID de tu anuncio. Si integras varios anuncios, puedes crear un cliente para cada uno: es un objeto ligero.

import com.appaloo.AppalooClient private val appaloo = AppalooClient( adId = "{adID}", )

Anuncios intersticiales

Los anuncios intersticiales son anuncios a pantalla completa que pueden servir como pausa natural entre pantallas o como un anuncio independiente activado por una acción del usuario.

Los usuarios pueden cerrar estos anuncios tras una cuenta atrás de 15 segundos o, en los anuncios de vídeo, cuando termina el vídeo.

import com.appaloo.AppalooClient import com.appaloo.AdDetails import com.appaloo.InterstitialCallbacks class MainActivity : AppCompatActivity() { private val appaloo = AppalooClient("{adID}") private fun showAd() { appaloo.loadInterstitial(this, object : InterstitialCallbacks { override fun onAdLoaded(adDetails: AdDetails) { Log.d("Appaloo", "Showing ad for ${adDetails.appName}") } override fun onAdLoadFailed(errorCode: Int, message: String) { Log.w("Appaloo", "Ad failed: $errorCode - $message") } }) } }

Anuncios recompensados

Los anuncios recompensados son anuncios de vídeo que premian al usuario por verlos completos. Suelen usarse para incentivar a los usuarios a completar una tarea o a interactuar con la app.

El mismo flujo que loadInterstitial, pero el SDK invoca onAdFinished solo después de que el usuario haya visto el anuncio completo. Concede tu recompensa dentro de este callback.

import com.appaloo.AppalooClient import com.appaloo.AdDetails import com.appaloo.RewardedCallbacks class GameActivity : AppCompatActivity() { private val appaloo = AppalooClient("{adID}") private fun grantBonusLife() { appaloo.loadRewarded(this, object : RewardedCallbacks { override fun onAdLoaded(adDetails: AdDetails) { // Ad is on screen; do not credit yet. } override fun onAdFinished(adDetails: AdDetails) { // User finished watching: credit the reward here. player.lives += 1 } override fun onAdLoadFailed(errorCode: Int, message: String) { Log.w("Appaloo", "Reward unavailable ($errorCode)") } }) } }

Importante: otorga la recompensa únicamente dentro de onAdFinished. onAdLoaded se dispara en cuanto se renderiza el anuncio, antes de que el usuario lo haya visto.

Anuncios integrados

Los anuncios integrados son anuncios pequeños que se insertan en tu propio diseño. Puedes usarlos dentro de un feed de noticias, un directorio, una galería de fotos y mucho más.

import com.appaloo.AppalooClient import android.view.ViewGroup class FeedActivity : AppCompatActivity() { private val appaloo = AppalooClient("{adID}") private fun addInlineAd(container: ViewGroup) { val adView = appaloo.loadInline(this) container.addView(adView) } }

En Jetpack Compose, envuélvela en un AndroidView:

import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import com.appaloo.AdDetails import com.appaloo.AppalooClient import com.appaloo.InlineCallbacks @Composable fun AppalooInlineAd(modifier: Modifier = Modifier) { val appaloo = remember { AppalooClient("{adID}") } var hasAd by remember { mutableStateOf(true) } if (hasAd) { AndroidView( modifier = modifier.fillMaxWidth().height(275.dp), factory = { ctx -> appaloo.loadInline(ctx, object : InlineCallbacks { override fun onAdLoaded(adDetails: AdDetails) {} override fun onAdLoadFailed(errorCode: Int, message: String) { hasAd = false } }) }, ) } } @Composable fun Feed() { LazyColumn { item { Text("A post") } item { AppalooInlineAd() } item { Text("Another post") } } }
Sin anuncio en Compose

AndroidView mide el anuncio a partir de las restricciones de Compose, así que la vista no puede contraerse a altura cero cuando no hay ningún anuncio disponible. En su lugar, controla el estado de relleno en tus callbacks y deja el composable fuera del árbol, como hace el ejemplo.

Anuncios de banner

Los banners son una franja compacta anclada a todo el ancho. loadBanner devuelve una View que colocas donde quieras, normalmente anclada en la parte inferior de la pantalla. Se rellena cuando se sirve un anuncio y se contrae a altura cero si no hay ninguno disponible.

import com.appaloo.AppalooClient import com.appaloo.AdDetails import com.appaloo.BannerCallbacks import android.view.ViewGroup class MainActivity : AppCompatActivity() { private val appaloo = AppalooClient("{adID}") private fun addBanner(container: ViewGroup) { val adView = appaloo.loadBanner(this, object : BannerCallbacks { override fun onAdLoaded(adDetails: AdDetails) { Log.d("Appaloo", "Banner for ${adDetails.appName}") } override fun onAdLoadFailed(errorCode: Int, message: String) { Log.w("Appaloo", "Banner failed: $errorCode - $message") } }) container.addView(adView) } }

En Jetpack Compose, envuélvela en un AndroidView:

import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import com.appaloo.AdDetails import com.appaloo.AppalooClient import com.appaloo.BannerCallbacks @Composable fun AppalooBannerAd(modifier: Modifier = Modifier) { val appaloo = remember { AppalooClient("{adID}") } var hasAd by remember { mutableStateOf(true) } var hasLoadedAd by remember { mutableStateOf(false) } if (hasAd) { AndroidView( modifier = modifier.fillMaxWidth().height(64.dp), factory = { ctx -> appaloo.loadBanner(ctx, object : BannerCallbacks { override fun onAdLoaded(adDetails: AdDetails) { hasLoadedAd = true } override fun onAdLoadFailed(errorCode: Int, message: String) { // Keep the current banner if an automatic refresh fails. if (!hasLoadedAd) hasAd = false } }) }, ) } } @Composable fun HomeScreen() { Column { // your app content Spacer(Modifier.weight(1f)) AppalooBannerAd() } }
Sin anuncio en Compose

AndroidView mide el anuncio a partir de las restricciones de Compose, así que la vista no puede contraerse a altura cero cuando no hay ningún anuncio disponible. En su lugar, controla el estado de relleno en tus callbacks y deja el composable fuera del árbol, como hace el ejemplo.

Anuncios de apertura

Los anuncios de apertura son anuncios breves a pantalla completa, adecuados para el arranque de la app o su regreso a primer plano.

import com.appaloo.AppalooClient import com.appaloo.AdDetails import com.appaloo.InterstitialCallbacks class MainActivity : AppCompatActivity() { private val appaloo = AppalooClient("{adID}") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) appaloo.loadAppOpen(this, object : InterstitialCallbacks { override fun onAdLoaded(adDetails: AdDetails) { Log.d("Appaloo", "App Open ad for ${adDetails.appName}") } override fun onAdLoadFailed(errorCode: Int, message: String) { Log.w("Appaloo", "App Open failed: $errorCode - $message") } }) } }

Seguridad de los datos

El SDK no recopila ningún identificador publicitario ni identificadores del dispositivo. Los únicos datos que informa son qué anuncios ve o toca un usuario, lo que mantiene breve tu formulario de Seguridad de los datos de Google Play.

Qué declarar

Declara los eventos de visualización y clic de anuncios en Actividad de la aplicación (Interacciones en la aplicación): se recopilan, se cifran en tránsito y no se vinculan a un identificador persistente. Elige Funcionalidad de la aplicación o Publicidad como finalidad, según cómo describas Appaloo.

Lo que el SDK no recopila

Sin ID de publicidad de Google (AAID), sin ANDROID_ID, sin información del dispositivo y sin ubicación. El SDK solicita únicamente el permiso INTERNET. No añadas el permiso AD_ID en su nombre.