Events
You can observe the lifecycle of a FuseAdView
by listening to its emitted events.
Currently, the following events are available:
- An ad has started loading
- An ad has finished loading successfully
- An error occurred while loading an ad
- An ad impression was recorded
Android
To listen for events on Android, implement the FuseAdViewListener
interface and add it to your FuseAdView
instance:
class EventListener : FuseAdViewListener {
override fun onEvent(adView: FuseAdView, event: FuseAdViewEvent) {
val eventName = when (event) {
is FuseAdViewEvent.Loading -> "Loading"
is FuseAdViewEvent.Loaded -> "Loaded"
is FuseAdViewEvent.Impression -> "Impression recorded"
is FuseAdViewEvent.Error -> "Error(${event.error.message})"
}
println(eventName)
}
}
val adView = FuseAdView(context, code = "<zone_code>")
adView.addListener(EventListener())
Jetpack Compose
In Jetpack Compose, pass an event handler lambda to ComposeFuseAdView
:
fun onEvent(adView: FuseAdView, event: FuseAdViewEvent) {
val eventName = when (event) {
is FuseAdViewEvent.Loading -> "Loading"
is FuseAdViewEvent.Loaded -> "Loaded"
is FuseAdViewEvent.Impression -> "Impression recorded"
is FuseAdViewEvent.Error -> "Error(${event.error.message})"
}
println(eventName)
}
ComposeFuseAdView(
code = "<zone_code>",
onEvent = ::onEvent,
)
iOS
On iOS, set the delegate
property of FuseAdView
to an object that implements the FuseAdViewDelegate
protocol:
class EventDelegate: NSObject, FuseAdViewDelegate {
func onEvent(adView: FuseAdView, event: FuseAdViewEvent) {
let eventName: String
switch event {
case .loading: eventName = "Loading"
case .loaded: eventName = "Loaded"
case .impression: eventName = "Impression"
case .error(let error): eventName = "Error(\(error))"
@unknown default: eventName = "Unknown event"
}
print(eventName)
}
}
let adView = FuseAdView(code: "<zone_code>")
adView.delegate = EventDelegate()
SwiftUI
In SwiftUI, provide an event handler when creating a FuseAdViewRepresentable
instance:
func onEvent(adView: FuseAdView, event: FuseAdViewEvent) {
let eventName: String
switch event {
case .loading: eventName = "Loading"
case .loaded: eventName = "Loaded"
case .impression: eventName = "Impression"
case .error(let error): eventName = "Error(\(error))"
@unknown default: eventName = "Unknown event"
}
print(eventName)
}
FuseAdViewRepresentable(
code: "<zone_code>",
onEvent: onEvent
)