SDK-Doku

Integriere das Appaloo-Android-SDK in deine App und liefere deine Anzeigen mit wenigen Zeilen Code aus.

Installation

Füge das Appaloo-SDK aus unserem Maven-Repository zu deinem Android-Projekt hinzu. Das SDK zielt auf Android API 30+ ab.

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") }
Berechtigungen

Das SDK benötigt Internetzugriff, um Anzeigenmedien zu laden.

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

Initialisierung

Erstelle einen AppalooClient mit der UUID deiner Anzeige. Wenn du mehrere Anzeigen einbindest, kannst du für jede einen eigenen Client erstellen: das Objekt ist leichtgewichtig.

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

Interstitial-Anzeigen

Interstitial-Anzeigen sind Vollbildanzeigen, die als natürliche Pause zwischen zwei Bildschirmen dienen können oder als eigenständige Anzeige, die durch eine Nutzeraktion ausgelöst wird.

Nutzer können diese Anzeigen nach einem 15-Sekunden-Countdown schließen oder, bei Videoanzeigen, sobald das Video endet.

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") } }) } }

Belohnte Anzeigen

Rewarded-Anzeigen sind Videoanzeigen, die Nutzer dafür belohnen, dass sie die Anzeige vollständig ansehen. Sie werden typischerweise eingesetzt, um Nutzer zu einer Aktion oder zu mehr Interaktion mit der App zu motivieren.

Gleicher Ablauf wie bei loadInterstitial, aber das SDK ruft onAdFinished erst auf, wenn der Nutzer die Anzeige vollständig gesehen hat. Vergib deine Belohnung in diesem 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)") } }) } }

Wichtig: vergib die Belohnung ausschließlich innerhalb von onAdFinished. onAdLoaded wird ausgelöst, sobald die Anzeige gerendert ist, bevor der Nutzer sie angesehen hat.

Inline-Anzeigen

Inline-Anzeigen sind kleine Anzeigen, die sich in dein eigenes Layout einfügen. Du kannst sie in einem News-Feed, einem Verzeichnis, einer Fotogalerie und vielem mehr einsetzen.

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) } }

Wrappe sie in Jetpack Compose in ein 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") } } }
Keine Anzeige unter Compose

AndroidView misst die Anzeige anhand der Compose-Constraints, daher kann sich die View nicht selbst auf null Höhe zusammenklappen, wenn keine Anzeige verfügbar ist. Verfolge stattdessen den Füllstatus in deinen Callbacks und lass das Composable aus dem Baum, wie im Beispiel.

Banner-Anzeigen

Banner-Anzeigen sind ein kompakter, verankerter Streifen über die volle Breite. loadBanner gibt eine View zurück, die du platzierst, wo du möchtest, typischerweise unten am Bildschirmrand verankert. Sie füllt sich, sobald eine Anzeige ausgeliefert wird, und schrumpft auf null Höhe, wenn keine verfügbar ist.

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) } }

Wrappe sie in Jetpack Compose in ein 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() } }
Keine Anzeige unter Compose

AndroidView misst die Anzeige anhand der Compose-Constraints, daher kann sich die View nicht selbst auf null Höhe zusammenklappen, wenn keine Anzeige verfügbar ist. Verfolge stattdessen den Füllstatus in deinen Callbacks und lass das Composable aus dem Baum, wie im Beispiel.

App-Open-Anzeigen

App-Open-Anzeigen sind kurze Vollbildanzeigen, die sich für den App-Start oder die Rückkehr in den Vordergrund eignen.

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") } }) } }

Datensicherheit

Das SDK erfasst keine Werbe-ID und keine Gerätekennungen. Die einzigen Daten, die es meldet, sind, welche Anzeigen ein Nutzer ansieht oder anklickt, wodurch dein Google-Play-Formular zur Datensicherheit kurz bleibt.

Was du angeben musst

Gib Anzeige- und Klick-Ereignisse unter App-Aktivität (App-Interaktionen) an: erfasst, bei der Übertragung verschlüsselt und nicht mit einer dauerhaften Kennung verknüpft. Wähle App-Funktionalität und/oder Werbung als Zweck, passend dazu, wie du Appaloo beschreibst.

Was das SDK nicht erfasst

Keine Google-Werbe-ID (AAID), keine ANDROID_ID, keine Geräteinformationen und kein Standort. Das SDK fordert nur die INTERNET-Berechtigung an. Füge nicht in seinem Namen die AD_ID-Berechtigung hinzu.