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.
1. Installation
Füge das Appaloo-SDK aus unserem Maven-Repository zu deinem Android-Projekt hinzu. Es wird als vorgefertigte AAR ausgeliefert und unterstützt Android API 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. Initialisierung
Erstelle einen AppalooClient mit der UUID deiner Anzeige. Der Client ist günstig zu erstellen. Instanziiere einen pro Aufrufstelle oder halte einen als Feld in deiner Activity.
import com.appaloo.AppalooClient
private val appaloo = AppalooClient(
adId = "{adID}",
)
import com.appaloo.AppalooClient;
private final AppalooClient appaloo = new AppalooClient("{adID}");
3. Eine Anzeige laden
Verwende loadInterstitial für Interstitial-Anzeigen und loadRewarded für belohnte Anzeigen. Der Aufruf der falschen Methode für den Typ einer Anzeige schlägt mit ERROR_NOT_INTERSTITIAL oder ERROR_NOT_REWARDED fehl.
Interstitial-Anzeigen
Ruft das Manifest ab, wählt einen Kandidaten aus und zeigt einen Vollbild-Interstitial-Dialog. Der Nutzer kann ihn nach einem 15-sekündigen Countdown schließen (oder nachdem das eingebettete 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
Derselbe Ablauf wie loadInterstitial, aber das SDK ruft onAdFinished erst auf, nachdem der Nutzer die Anzeige vollständig angesehen hat. Knüpfe deine Belohnung an diesen 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
Alle Callbacks werden im Haupt-Thread ausgeführt, sodass du die UI direkt aus ihnen heraus aktualisieren kannst.
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);
}
Wichtig: Gewähre die Belohnung nur innerhalb von onAdFinished. onAdLoaded wird ausgelöst, sobald die Anzeige gerendert ist, bevor der Nutzer sie angesehen hat.
5. 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.
1. Installation
Das Appaloo-SDK wird als vorgefertigtes, mit Prüfsumme fixiertes XCFramework ausgeliefert, direkt von unserem CDN. Nichts zu kompilieren, kein Konto, kein Token, kein Git-Host. Es unterstützt iOS 15+ und hängt nur von System-Frameworks ab (UIKit, WebKit).
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://static.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://appaloo.nyc3.digitaloceanspaces.com/appaloo/sdk/ios/AppalooSDK-0.1.1.xcframework.zip",
checksum: "e0dc8f262263d079b6cb21bd8d4e958407fc9e749fcb6cb0e8ec192afb334a84"
),
.target(name: "MyApp", dependencies: ["AppalooSDK"]),
]
2. Initialisierung
Erstelle einen AppalooClient mit der UUID deiner Anzeige. Der Client ist zwar ressourcenschonend, dennoch ist es bessere Praxis, eine langlebige Referenz darauf als Property deines View Controllers zu behalten.
import AppalooSDK
private let appaloo = AppalooClient(adId: "{adID}")
3. Eine Anzeige laden
Verwende loadInterstitial für Interstitial-Anzeigen und loadRewarded für belohnte Anzeigen. Der Aufruf der falschen Methode für den Typ einer Anzeige schlägt mit errorNotInterstitial oder errorNotRewarded fehl.
Beide Lade-Methoden erwarten einen präsentierenden UIViewController und das SDK zeigt die Anzeige im Vollbild darüber an (modalPresentationStyle = .fullScreen, isModalInPresentation = true).
Interstitial-Anzeigen
Zeigt dem Nutzer eine Anzeige. Der Nutzer kann sie nach einem 15-sekündigen Countdown schließen (oder nachdem ein eingebettetes 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)")
}
}
Belohnte Anzeigen
Derselbe Ablauf wie loadInterstitial, aber onAdFinished wird erst ausgelöst, nachdem der Nutzer die Anzeige vollständig angesehen hat. Anschließend solltest du dem Nutzer die Belohnung gutschreiben.
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
Callbacks sind reine Klassen-Protokolle (AnyObject). Das SDK behält dein Callbacks-Objekt nur für die Dauer des Ladevorgangs. Halte eine eigene starke Referenz (z. B. als gespeicherte Property), mindestens bis onAdFinished oder onAdLoadFailed ausgelöst wird. Alle Callbacks werden im Haupt-Thread aufgerufen.
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)
}
Wichtig: Gewähre die Belohnung nur innerhalb von onAdFinished. onAdLoaded wird ausgelöst, sobald die Anzeige gerendert ist, bevor der Nutzer sie angesehen hat.
5. 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