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
)