Skip to main content

Placement Events Listener

Handle placement events through TeadsAdPlacementEventsDelegate: playback, clicks, and viewability.

Event Reference​

EventMeaning
LOADEDAd data was returned by the server
READYAd is ready to be displayed
RENDEREDAd has been rendered on screen
PLAYVideo creative started playing
PAUSEVideo creative paused
COMPLETEVideo creative finished playing
START_PLAY_AUDIOVideo creative unmuted / started playing audio
STOP_PLAY_AUDIOVideo creative muted / stopped playing audio
HEIGHT_UPDATEDEngine reports a new height — read it from data["height"]
VIEWEDAd met viewability criteria
CLICKEDUser tapped the ad (the SDK opens the landing URL automatically)
CLICKED_ORGANICUser tapped organic (non-paid) content; landing URL is in data["url"]
FAILEDNo ad to display — fall back to other content
WILL_PRESENT / PRESENTED / WILL_DISMISS / DISMISSEDFullscreen presentation lifecycle

Not every placement emits every event — the set your delegate receives depends on the format you integrated.

Implementing TeadsAdPlacementEventsDelegate​

Basic Implementation​

import tv.teads.sdk.combinedsdk.adplacement.TeadsAdPlacementMedia
import tv.teads.sdk.combinedsdk.adplacement.config.TeadsAdPlacementMediaConfig
import tv.teads.sdk.combinedsdk.adplacement.interfaces.TeadsAdPlacementEventsDelegate
import tv.teads.sdk.combinedsdk.adplacement.interfaces.core.TeadsAdPlacement
import tv.teads.sdk.combinedsdk.TeadsAdPlacementEventName
import android.net.Uri

class YourActivity : AppCompatActivity(), TeadsAdPlacementEventsDelegate {

private var mediaPlacement: TeadsAdPlacementMedia? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupMediaPlacement()
}

private fun setupMediaPlacement() {
val config = TeadsAdPlacementMediaConfig(
pid = 84242, // Your unique Placement ID
articleUrl = Uri.parse("https://example.com/article")
)

mediaPlacement = TeadsAdPlacementMedia(
this, // Context
config, // Placement config
this // Event delegate
)

val mediaAdView = mediaPlacement?.loadAd()

// Add mediaAdView to your view hierarchy
}

// MARK: - TeadsAdPlacementEventsDelegate

override fun onPlacementEvent(
placement: TeadsAdPlacement<*, *>,
event: TeadsAdPlacementEventName,
data: Map<String, Any>?
) {
when (event) {
TeadsAdPlacementEventName.READY -> {
handleAdReady()
}

TeadsAdPlacementEventName.RENDERED -> {
handleAdRendered()
}

TeadsAdPlacementEventName.PLAY -> {
handleVideoPlay()
}

TeadsAdPlacementEventName.PAUSE -> {
handleVideoPause()
}

TeadsAdPlacementEventName.COMPLETE -> {
handleVideoComplete()
}

TeadsAdPlacementEventName.START_PLAY_AUDIO -> {
handleAudioStart()
}

TeadsAdPlacementEventName.STOP_PLAY_AUDIO -> {
handleAudioStop()
}

TeadsAdPlacementEventName.CLICKED -> {
handleAdClick()
}

TeadsAdPlacementEventName.VIEWED -> {
handleAdViewed()
}

TeadsAdPlacementEventName.FAILED -> {
handleAdFailed(data)
}

TeadsAdPlacementEventName.HEIGHT_UPDATED -> {
handleAdHeightUpdate(data)
}

else -> {
Log.d("TeadsSDK", "Other event: $event")
}
}
}

override fun onDestroy() {
super.onDestroy()
mediaPlacement?.clean()
}
}

User Interaction Events​

Click Event​

TeadsAdPlacementEventName.CLICKED -> {
Log.d("TeadsSDK", "Ad clicked")
}
Do not open the click URL

The SDK opens the click URL. Do not navigate in this handler or the browser will open twice. Use the event for tracking only.

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

Viewed Event​

TeadsAdPlacementEventName.VIEWED -> {
Log.d("TeadsSDK", "Ad viewability threshold reached")
}

Error Handling​

Failed Event​

TeadsAdPlacementEventName.FAILED -> {
Log.e("TeadsSDK", "Ad failed to load, data: $data")
}