Placement Events Listener
Handle placement events through TeadsAdPlacementEventsDelegate: playback, clicks, and viewability.
Event Reference
| Event | Meaning |
|---|---|
LOADED | Ad data was returned by the server |
READY | Ad is ready to be displayed |
RENDERED | Ad has been rendered on screen |
PLAY | Video creative started playing |
PAUSE | Video creative paused |
COMPLETE | Video creative finished playing |
START_PLAY_AUDIO | Video creative unmuted / started playing audio |
STOP_PLAY_AUDIO | Video creative muted / stopped playing audio |
HEIGHT_UPDATED | Engine reports a new height — read it from data["height"] |
VIEWED | Ad met viewability criteria |
CLICKED | User tapped the ad (the SDK opens the landing URL automatically) |
CLICKED_ORGANIC | User tapped organic (non-paid) content; landing URL is in data["url"] |
FAILED | No ad to display — fall back to other content |
WILL_PRESENT / PRESENTED / WILL_DISMISS / DISMISSED | Fullscreen 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")
}