Skip to main content

Placement Events Listener

info

Event-Driven System: The Teads SDK uses a comprehensive event system through TeadsAdPlacementEventsDelegate to manage video playback, audio sessions, and user interactions.

Overview

The Teads SDK provides an event-driven system for managing placement events through the TeadsAdPlacementEventsDelegate. This delegate allows you to:

  • Track video playback states (play, pause, complete)
  • Manage audio sessions during ad playback
  • Handle user interactions and engagement
  • Monitor ad performance and viewability

Implementing TeadsAdPlacementEventsDelegate

Basic Implementation

import UIKit
import TeadsSDK

class YourViewController: UIViewController, TeadsAdPlacementEventsDelegate {

var mediaPlacement: TeadsAdPlacementMedia?
var adView: UIView?

override func viewDidLoad() {
super.viewDidLoad()
setupMediaPlacement()
}

private func setupMediaPlacement() {
mediaPlacement = TeadsAdPlacementMedia(
pid: 84242,
articleUrl: URL(string: "https://example.com/article"),
delegate: self
)

do {
adView = try mediaPlacement?.loadAd()

// Add adView to your view hierarchy
} catch {
print("Failed to load ad: \(error)")
}
}

// MARK: - TeadsAdPlacementEventsDelegate

func adPlacement(_ placement: TeadsAdPlacementIdentifiable?,
didEmitEvent event: TeadsAdPlacementEventName,
data: [String : Any]?) {

switch event {
case .ready:
handleAdReady()

case .rendered:
handleAdRendered()

case .play:
handleVideoPlay()

case .pause:
handleVideoPause()

case .complete:
handleVideoComplete()

case .startPlayAudio:
handleAudioStart()

case .stopPlayAudio:
handleAudioStop()

case .clicked:
handleAdClick()

case .viewed:
handleAdViewed()

case .failed:
handleAdFailed(data)

case .heightUpdated:
handleAdHeightUpdate(data)

default:
print("Other event: \(event)")
}
}
}

User Interaction Events

Click Event

case .clicked:
print("Ad clicked")
Do not open the URL manually

The SDK automatically handles opening the click URL. Do not implement URL navigation in this event handler — doing so will result in the browser opening twice. Use this event only for tracking/analytics purposes.

There is also a .clickedOrganic case, emitted when a user clicks on organic (non-paid) content in placements that support it, such as Feed or Recommendations.

Viewed Event

case .viewed:
print("Ad viewability threshold reached")

Error Handling

Failed Event

case .failed:
print("Ad failed to load, data: \(data)")