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.
Integra el SDK de iOS de Appaloo en tu app y publica tus anuncios con unas pocas líneas de código.
1. Instalación
Añade el SDK de Appaloo a tu proyecto Android desde nuestro repositorio Maven. Se distribuye como un AAR precompilado y es compatible con la API de Android 30+.
settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url = uri("https://static.appaloo.io/appaloo/sdk/android") }
}
}
app/build.gradle.kts
dependencies {
implementation("io.appaloo:sdk:0.0.1")
}
settings.gradle
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url 'https://static.appaloo.io/appaloo/sdk/android' }
}
}
app/build.gradle
dependencies {
implementation 'io.appaloo:sdk:0.0.1'
}
2. Inicialización
Crea un AppalooClient con el UUID de tu anuncio. El cliente es barato de crear. Instancia uno por punto de llamada, o guarda uno como campo de tu actividad.
import com.appaloo.AppalooClient
private val appaloo = AppalooClient(
adId = "{adID}",
)
import com.appaloo.AppalooClient;
private final AppalooClient appaloo = new AppalooClient("{adID}");
3. Cargar un anuncio
Usa loadInterstitial para los anuncios intersticiales y loadRewarded para los anuncios recompensados. Llamar al método equivocado para el tipo de un anuncio falla con ERROR_NOT_INTERSTITIAL o ERROR_NOT_REWARDED.
Anuncios intersticiales
Obtiene el manifiesto, elige un candidato y presenta un diálogo intersticial a pantalla completa. El usuario puede cerrarlo tras una cuenta atrás de 15 segundos (o cuando termina el vídeo incrustado).
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")
}
})
}
}
import com.appaloo.AppalooClient;
import com.appaloo.AdDetails;
import com.appaloo.InterstitialCallbacks;
public class MainActivity extends AppCompatActivity {
private final AppalooClient appaloo =
new AppalooClient("{adID}", "https://appaloo.io");
private void showAd() {
appaloo.loadInterstitial(this, new InterstitialCallbacks() {
@Override
public void onAdLoaded(AdDetails adDetails) {
Log.d("Appaloo", "Showing ad for " + adDetails.getAppName());
}
@Override
public void onAdLoadFailed(int errorCode, String message) {
Log.w("Appaloo", "Ad failed: " + errorCode + " - " + message);
}
});
}
}
Anuncios recompensados
El mismo flujo que loadInterstitial, pero el SDK invoca onAdFinished solo después de que el usuario haya visto el anuncio por completo. Condiciona tu recompensa a 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)")
}
})
}
}
import com.appaloo.AppalooClient;
import com.appaloo.AdDetails;
import com.appaloo.RewardedCallbacks;
public class GameActivity extends AppCompatActivity {
private final AppalooClient appaloo =
new AppalooClient("{adID}", "https://appaloo.io");
private void grantBonusLife() {
appaloo.loadRewarded(this, new RewardedCallbacks() {
@Override
public void onAdLoaded(AdDetails adDetails) {
// Ad is on screen; do not credit yet.
}
@Override
public void onAdFinished(AdDetails adDetails) {
// User finished watching: credit the reward here.
player.lives += 1;
}
@Override
public void onAdLoadFailed(int errorCode, String message) {
Log.w("Appaloo", "Reward unavailable (" + errorCode + ")");
}
});
}
}
4. Callbacks
Todos los callbacks se ejecutan en el hilo principal, así que puedes actualizar la interfaz directamente desde ellos.
InterstitialCallbacks
interface InterstitialCallbacks {
fun onAdLoaded(adDetails: AdDetails)
fun onAdLoadFailed(errorCode: Int, message: String)
}
public interface InterstitialCallbacks {
void onAdLoaded(AdDetails adDetails);
void onAdLoadFailed(int errorCode, String message);
}
RewardedCallbacks
interface RewardedCallbacks {
fun onAdLoaded(adDetails: AdDetails)
fun onAdFinished(adDetails: AdDetails)
fun onAdLoadFailed(errorCode: Int, message: String)
}
public interface RewardedCallbacks {
void onAdLoaded(AdDetails adDetails);
void onAdFinished(AdDetails adDetails);
void onAdLoadFailed(int errorCode, String message);
}
Importante: otorga la recompensa solo dentro de onAdFinished. onAdLoaded se dispara en cuanto se renderiza el anuncio, antes de que el usuario lo haya visto.
5. 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.
1. Instalación
El SDK de Appaloo se distribuye como un XCFramework precompilado, con checksum fijado, servido directamente desde nuestra CDN. Nada que compilar, sin cuenta, sin token, sin host de git. Es compatible con iOS 15+ y solo depende de frameworks del sistema (UIKit, WebKit).
Xcode (Añadir paquete local)
Coloca este paquete Swift de un solo archivo en tu proyecto y, en Xcode, elige File → Add Package Dependencies → Add Local… y selecciona la carpeta. Xcode descarga y verifica el binario desde la CDN.
mkdir AppalooSDK && curl -fsSL \
https://static.appaloo.io/appaloo/sdk/ios/AppalooSDK/Package.swift \
-o AppalooSDK/Package.swift
Package.swift
O, si tu app es en sí un paquete Swift, declara el target binario directamente:
targets: [
.binaryTarget(
name: "AppalooSDK",
url: "https://appaloo.nyc3.digitaloceanspaces.com/appaloo/sdk/ios/AppalooSDK-0.1.1.xcframework.zip",
checksum: "e0dc8f262263d079b6cb21bd8d4e958407fc9e749fcb6cb0e8ec192afb334a84"
),
.target(name: "MyApp", dependencies: ["AppalooSDK"]),
]
2. Inicialización
Crea un AppalooClient con el UUID de tu anuncio. Aunque el cliente consume pocos recursos, es mejor práctica mantener una referencia duradera como propiedad de tu view controller.
import AppalooSDK
private let appaloo = AppalooClient(adId: "{adID}")
3. Cargar un anuncio
Usa loadInterstitial para los anuncios intersticiales y loadRewarded para los anuncios recompensados. Llamar al método equivocado para el tipo de un anuncio falla con errorNotInterstitial o errorNotRewarded.
Ambos métodos de carga reciben un UIViewController de presentación, y el SDK muestra el anuncio a pantalla completa encima (modalPresentationStyle = .fullScreen, isModalInPresentation = true).
Anuncios intersticiales
Presenta un anuncio al usuario. Puede cerrarlo tras una cuenta atrás de 15 segundos (o cuando termina un vídeo incrustado).
import UIKit
import AppalooSDK
final class MainViewController: UIViewController, InterstitialCallbacks {
private let appaloo = AppalooClient(adId: "{adID}")
private func showAd() {
appaloo.loadInterstitial(from: self, callbacks: self)
}
func onAdLoaded(adDetails: AdDetails) {
print("Showing ad for \(adDetails.appName)")
}
func onAdLoadFailed(errorCode: Int, message: String) {
print("Ad failed: \(errorCode) - \(message)")
}
}
Anuncios recompensados
El mismo flujo que loadInterstitial, pero onAdFinished solo se dispara después de que el usuario haya visto el anuncio por completo. Entonces debes otorgar la recompensa al usuario.
import UIKit
import AppalooSDK
final class GameViewController: UIViewController, RewardedCallbacks {
private let appaloo = AppalooClient(adId: "{adID}")
private func grantBonusLife() {
appaloo.loadRewarded(from: self, callbacks: self)
}
func onAdLoaded(adDetails: AdDetails) {
// Ad is on screen; do not credit yet.
}
func onAdFinished(adDetails: AdDetails) {
// User finished watching: credit the reward here.
player.lives += 1
}
func onAdLoadFailed(errorCode: Int, message: String) {
print("Reward unavailable (\(errorCode))")
}
}
4. Callbacks
Los callbacks son protocolos solo para clases (AnyObject). El SDK retiene tu objeto de callbacks solo durante la carga. Mantén tu propia referencia fuerte (por ejemplo, como propiedad almacenada) al menos hasta que onAdFinished o onAdLoadFailed se dispare. Todos los callbacks se invocan en el hilo principal.
InterstitialCallbacks
public protocol InterstitialCallbacks: AnyObject {
func onAdLoaded(adDetails: AdDetails)
func onAdLoadFailed(errorCode: Int, message: String)
}
RewardedCallbacks
public protocol RewardedCallbacks: AnyObject {
func onAdLoaded(adDetails: AdDetails)
func onAdFinished(adDetails: AdDetails)
func onAdLoadFailed(errorCode: Int, message: String)
}
Importante: otorga la recompensa solo dentro de onAdFinished. onAdLoaded se dispara en cuanto se renderiza el anuncio, antes de que el usuario lo haya visto.
5. Seguridad de los datos
El SDK no recopila IDFA ni identificadores del dispositivo. Los únicos datos que informa son qué anuncios ve o toca un usuario y, como no lleva ningún identificador entre apps, no requiere el aviso de App Tracking Transparency.
Etiqueta de privacidad de la app
Declara los Datos publicitarios en Datos no vinculados contigo, marcados como No usados para rastrearte. Eso es todo lo que informa el SDK.
English
Français
Deutsch