Callbacki reklam - reaguj na sukces i błędy
System callbacków pozwala reagować na zdarzenia reklamowe - sukces załadowania, błędy, kliknięcia itp. Możesz zarejestrować wiele callbacków z różnymi nazwami i przypisywać je do konkretnych slotów reklamowych.
interface AdCallback {
fun onSuccess(
type: String, // "banner", "native", "interstitial", "rewarded"
provider: String, // "admob", "homeads", etc.
zone: String?, // nazwa strefy
adUnit: String // ID jednostki reklamowej
)
fun onFail(
type: String,
provider: String,
zone: String?,
adUnit: String,
error: String? // opis błędu
)
}
// Rejestracja callbacka z nazwą "default"
ADict.ADS.Callbacks.register("default", object : AdCallback {
override fun onSuccess(type: String, provider: String, zone: String?, adUnit: String) {
Log.d("Ad", "✅ Success: $type from $provider (zone=$zone)")
// Możesz wysłać event do analityki
ADict.Analytics.log("ad_loaded", mapOf(
"type" to type,
"provider" to provider,
"zone" to zone
))
}
override fun onFail(type: String, provider: String, zone: String?, adUnit: String, error: String?) {
Log.e("Ad", "❌ Fail: $type from $provider - $error")
// Logowanie błędów
ADict.Analytics.logError("ad_failed", error ?: "Unknown error")
}
})
<rip.nerd.adictlibrary.ui.AdViewContainer
android:id="@+id/bannerAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:providerName="admob"
app:zoneName="default"
app:callbackName="default"
app:adSizeEnum="adaptive" />
nativeRotator = NativeAdRotator(
context = requireContext(),
zoneName = "feed",
callbackName = "default" // ← nazwa zarejestrowanego callbacka
)
nativeRotator.attach(binding.nativeContainer)
nativeRotator.start()
lifecycleScope.launch {
FullscreenRotator.showInterstitial(
activity = this@MainActivity,
zone = "default",
callbackName = "default" // ← callback
)
}
Możesz zarejestrować różne callbacki dla różnych celów:
// Callback dla analityki
ADict.ADS.Callbacks.register("analytics", object : AdCallback {
override fun onSuccess(type: String, provider: String, zone: String?, adUnit: String) {
Firebase.analytics.logEvent("ad_impression") {
param("ad_type", type)
param("ad_provider", provider)
}
}
override fun onFail(type: String, provider: String, zone: String?, adUnit: String, error: String?) {
Crashlytics.log("Ad failed: $type, $error")
}
})
// Callback dla UI (np. pokazanie placeholdera przy błędzie)
ADict.ADS.Callbacks.register("ui_handler", object : AdCallback {
override fun onSuccess(type: String, provider: String, zone: String?, adUnit: String) {
// Ukryj placeholder
binding.adPlaceholder.visibility = View.GONE
}
override fun onFail(type: String, provider: String, zone: String?, adUnit: String, error: String?) {
// Pokaż placeholder lub ukryj kontener
binding.adContainer.visibility = View.GONE
}
})
// Callback dla debugowania (tylko w debug build)
if (BuildConfig.DEBUG) {
ADict.ADS.Callbacks.register("debug", object : AdCallback {
override fun onSuccess(type: String, provider: String, zone: String?, adUnit: String) {
Toast.makeText(context, "Ad loaded: $type", Toast.LENGTH_SHORT).show()
}
override fun onFail(type: String, provider: String, zone: String?, adUnit: String, error: String?) {
Toast.makeText(context, "Ad failed: $error", Toast.LENGTH_LONG).show()
}
})
}
Zarejestruj callback pod podaną nazwą.
Wyrejestruj callback o podanej nazwie.
Usuń wszystkie zarejestrowane callbacki.
// Wyrejestruj konkretny callback
ADict.ADS.Callbacks.unregister("debug")
// Wyczyść wszystkie (np. przy logout)
ADict.ADS.Callbacks.clear()
Application.onCreate() - przed użyciem reklam