SDK-Doku
Integriere das Appaloo-Android-SDK in deine App und liefere deine Anzeigen mit wenigen Zeilen Code aus.
Integriere das Appaloo-iOS-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")
}
settings.gradle
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url 'https://download.appaloo.io/appaloo-sdk/android' }
}
}
app/build.gradle
dependencies {
implementation 'io.appaloo:sdk:1.0.3'
}
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}",
)
import com.appaloo.AppalooClient;
private final AppalooClient appaloo = new AppalooClient("{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")
}
})
}
}
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);
}
});
}
}
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)")
}
})
}
}
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 + ")");
}
});
}
}
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)
}
}
import com.appaloo.AppalooClient;
import android.view.View;
import android.view.ViewGroup;
public class FeedActivity extends AppCompatActivity {
private final AppalooClient appaloo = new AppalooClient("{adID}");
private void addInlineAd(ViewGroup container) {
View 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") }
}
}
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)
}
}
import com.appaloo.AppalooClient;
import com.appaloo.AdDetails;
import com.appaloo.BannerCallbacks;
import android.view.View;
import android.view.ViewGroup;
public class MainActivity extends AppCompatActivity {
private final AppalooClient appaloo = new AppalooClient("{adID}");
private void addBanner(ViewGroup container) {
View adView = appaloo.loadBanner(this, new BannerCallbacks() {
@Override
public void onAdLoaded(AdDetails adDetails) {
Log.d("Appaloo", "Banner for " + adDetails.getAppName());
}
@Override
public void onAdLoadFailed(int errorCode, String message) {
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()
}
}
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")
}
})
}
}
import com.appaloo.AppalooClient;
import com.appaloo.AdDetails;
import com.appaloo.InterstitialCallbacks;
public class MainActivity extends AppCompatActivity {
private final AppalooClient appaloo = new AppalooClient("{adID}");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// A brief full-screen ad for launch / return-to-foreground that
// auto-dismisses after ~5 seconds. Reuses InterstitialCallbacks.
appaloo.loadAppOpen(this, new InterstitialCallbacks() {
@Override
public void onAdLoaded(AdDetails adDetails) {
Log.d("Appaloo", "App Open ad for " + adDetails.getAppName());
}
@Override
public void onAdLoadFailed(int errorCode, String message) {
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.
Installation
Das Appaloo-SDK wird als vorgefertigtes XCFramework direkt über unser CDN ausgeliefert. Es zielt auf iOS 15+ ab und bringt keine zusätzlichen Abhängigkeiten mit.
Xcode (Lokales Package hinzufügen)
Lege dieses Swift-Package aus einer Datei in dein Projekt und wähle dann in Xcode File → Add Package Dependencies → Add Local… und wähle den Ordner aus. Xcode lädt das Binary vom CDN herunter und verifiziert es.
mkdir AppalooSDK && curl -fsSL \
https://download.appaloo.io/appaloo-sdk/ios/AppalooSDK/Package.swift \
-o AppalooSDK/Package.swift
Package.swift
Oder, wenn deine App selbst ein Swift-Package ist, deklariere das Binary-Target direkt:
targets: [
.binaryTarget(
name: "AppalooSDK",
url: "https://download.appaloo.io/appaloo-sdk/ios/AppalooSDK-1.0.4.xcframework.zip",
checksum: "3aae03b7fb81068b71c4d45d3c302d32d6668308adb38060ac0498d4c2613ae0"
),
.target(name: "MyApp", dependencies: ["AppalooSDK"]),
]
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 AppalooSDK
private let 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 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)")
}
}
InterstitialCallbacks
public protocol InterstitialCallbacks: AnyObject {
func onAdLoaded(adDetails: AdDetails)
func onAdLoadFailed(errorCode: Int, message: String)
}
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 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))")
}
}
RewardedCallbacks
public protocol RewardedCallbacks: AnyObject {
func onAdLoaded(adDetails: AdDetails)
func onAdFinished(adDetails: AdDetails)
func onAdLoadFailed(errorCode: Int, message: String)
}
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 UIKit
import AppalooSDK
final class FeedViewController: UIViewController {
private let appaloo = AppalooClient(adId: "{adID}")
private func addInlineAd(to stack: UIStackView) {
// Returns a 100%-wide, ~275pt-tall card that fills itself in once an ad is
// served (and collapses if none is available). Tapping it expands the ad.
let adView = appaloo.loadInline()
stack.addArrangedSubview(adView)
}
}
Wrappe sie in SwiftUI in ein UIViewRepresentable:
import SwiftUI
import AppalooSDK
// Wrap the inline view for SwiftUI.
struct AppalooInlineAd: UIViewRepresentable {
let client: AppalooClient
func makeUIView(context: Context) -> AppalooInlineAdView { client.loadInline() }
func updateUIView(_ view: AppalooInlineAdView, context: Context) {}
}
struct FeedView: View {
let appaloo = AppalooClient(adId: "{adID}")
var body: some View {
List {
Text("A post")
AppalooInlineAd(client: appaloo).frame(height: 275)
Text("Another post")
}
}
}
Banner-Anzeigen
Banner-Anzeigen sind ein kompakter, verankerter Streifen über die volle Breite. loadBanner gibt eine AppalooBannerAdView 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 UIKit
import AppalooSDK
final class MainViewController: UIViewController, BannerCallbacks {
private let appaloo = AppalooClient(adId: "{adID}")
private func addBanner(to container: UIView) {
let adView = appaloo.loadBanner(callbacks: self)
adView.translatesAutoresizingMaskIntoConstraints = false
container.addSubview(adView)
NSLayoutConstraint.activate([
adView.leadingAnchor.constraint(equalTo: container.leadingAnchor),
adView.trailingAnchor.constraint(equalTo: container.trailingAnchor),
adView.bottomAnchor.constraint(equalTo: container.safeAreaLayoutGuide.bottomAnchor),
])
}
func onAdLoaded(adDetails: AdDetails) {
print("Banner for \(adDetails.appName)")
}
func onAdLoadFailed(errorCode: Int, message: String) {
print("Banner failed: \(errorCode) - \(message)")
}
}
Wrappe sie in SwiftUI in ein UIViewRepresentable:
import SwiftUI
import AppalooSDK
// Wrap the banner view for SwiftUI.
struct AppalooBannerAd: UIViewRepresentable {
let client: AppalooClient
func makeUIView(context: Context) -> AppalooBannerAdView { client.loadBanner() }
func updateUIView(_ view: AppalooBannerAdView, context: Context) {}
}
struct ContentView: View {
let appaloo = AppalooClient(adId: "{adID}")
var body: some View {
VStack {
Text("My app content")
Spacer()
AppalooBannerAd(client: appaloo).frame(height: 64)
}
}
}
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 UIKit
import AppalooSDK
final class AppCoordinator: InterstitialCallbacks {
private let appaloo = AppalooClient(adId: "{adID}")
func showAppOpenAd(from presenter: UIViewController) {
appaloo.loadAppOpen(from: presenter, callbacks: self)
}
func onAdLoaded(adDetails: AdDetails) {
print("App Open ad for \(adDetails.appName)")
}
func onAdLoadFailed(errorCode: Int, message: String) {
print("App Open failed: \(errorCode) - \(message)")
}
}
Datensicherheit
Das SDK erfasst keine IDFA und keine Gerätekennungen. Die einzigen Daten, die es meldet, sind, welche Anzeigen ein Nutzer ansieht oder anklickt, und da es keine app-übergreifende Kennung trägt, erfordert es keine App-Tracking-Transparency-Abfrage.
App-Datenschutzlabel
Gib Werbedaten unter „Nicht mit dir verknüpfte Daten“ an, markiert als „Nicht für Tracking verwendet“. Das ist der gesamte Umfang dessen, was das SDK meldet.
English
Français
Español