Media Placement
Media Placement (Video Ads)
Media placements display premium video advertisements within your content.
- Kotlin
- Java
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 ContentActivity : AppCompatActivity(), TeadsAdPlacementEventsDelegate {
private var mediaPlacement: TeadsAdPlacementMedia? = null
private lateinit var binding: ActivityArticleBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityArticleBinding.inflate(layoutInflater)
setContentView(binding.root)
setupMediaPlacement()
}
private fun setupMediaPlacement() {
// Create configuration
val config = TeadsAdPlacementMediaConfig(
pid = 84242, // Your unique Placement ID
articleUrl = Uri.parse("https://yoursite.com/article")
)
// Create placement with delegate
mediaPlacement = TeadsAdPlacementMedia(
this, // Context
config, // Placement config
this // Event delegate
)
// Load the ad
val mediaAdView = mediaPlacement?.loadAd()
// Add to your view hierarchy
binding.myContainerAdView.addView(mediaAdView)
}
override fun onPlacementEvent(
placement: TeadsAdPlacement<*, *>,
event: TeadsAdPlacementEventName,
data: Map<String, Any>?
) {
// Listen the ad lifecycle events
}
override fun onDestroy() {
super.onDestroy()
teadsAdPlacementMedia?.clean()
}
}
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;
import android.widget.FrameLayout;
import java.util.Map;
public class ContentActivity extends AppCompatActivity implements TeadsAdPlacementEventsDelegate {
private TeadsAdPlacementMedia mediaPlacement;
private ActivityArticleBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityArticleBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setupMediaPlacement();
}
private void setupMediaPlacement() {
// Create configuration — Kotlin's `enableValidationTool` default doesn't
// bridge to Java, it must be passed explicitly
TeadsAdPlacementMediaConfig config = new TeadsAdPlacementMediaConfig(
84242, // Your unique Placement ID
Uri.parse("https://yoursite.com/article"),
false // enableValidationTool
);
// Create placement with delegate
mediaPlacement = new TeadsAdPlacementMedia(
this, // Context
config, // Placement config
this // Event delegate
);
// Load the ad
FrameLayout mediaAdView = mediaPlacement.loadAd();
// Add to your view hierarchy
binding.myContainerAdView.addView(mediaAdView);
}
@Override
public void onPlacementEvent(TeadsAdPlacement<?, ?> placement, TeadsAdPlacementEventName event, Map<String, ?> data) {
// Listen the ad lifecycle events
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlacement != null) {
mediaPlacement.clean();
}
}
}
Important: When using Media Placement, it's mandatory to set your ad container to dynamic sizing instead of fixed dimensions.
This is because ad creatives served for Media Placement have not a fixed size. The VPAID standard allows them to have dynamic dimensions and aspect ratios, meaning they can change size and shape on the fly.
By using dynamic sizing, you ensure the ad container can automatically resize to perfectly fit the creative's content, preventing issues like cropping or blank spaces. This dynamic resizing is crucial for delivering a great user experience and accurately measuring ad performance throughout the entire ad lifecycle, not just at initialization.
XML Implementation: Use android:layout_height="wrap_content" for your ad container.
Compose Implementation: Use Modifier.wrapContentHeight() or Modifier.height(IntrinsicSize.Min) for your ad container.