Migration guide to version 8.0.0 (beta)

The new version of Yandex Mobile Ads SDK introduces a number of API changes aimed at improving the developer experience.

Main changes

1. Changes to AdRequest

The AdRequestConfiguration and NativeAdRequestConfiguration classes have been removed. Use AdRequest for all ad types.

Class Status
AdRequestConfiguration Removed. Use AdRequest
NativeAdRequestConfiguration Removed. Use AdRequest and NativeAdOptions

Examples

Kotlin
SDK 7 SDK 8
// Fullscreen & Native Ads, e.g. InterstitialAdLoader
val loader = InterstitialAdLoader(this)

val config = AdRequestConfiguration.Builder("R-M-XXXXX-YY").build()

loader.loadAd(config)

// Banner ads
val bannerView = findViewById(R.id.view_banner)

bannerView.setAdUnitId("R-M-XXXXX-YY")

val request = AdRequest.Builder().build()

bannerView.loadAd(request)
// Fullscreen & Native Ads, e.g. InterstitialAdLoader
val loader = InterstitialAdLoader(this)
val request = AdRequest.Builder("R-M-XXXXX-YY").build()
loader.loadAd(adRequest, listener)

// Banner ads
val bannerView = findViewById(R.id.view_banner)
val request = AdRequest.Builder("R-M-XXXXX-YY").build()
bannerView.loadAd(request)
Java
SDK 7 SDK 8
void loadAd() {
    // Fullscreen & Native Ads, e.g. InterstitialAdLoader
    InterstitialAdLoader loader = new InterstitialAdLoader(this);
    AdRequestConfiguration config = new AdRequestConfiguration.Builder("R-M-XXXXX-YY")
            .build();
    loader.loadAd(config);

    // Banner ads
    BannerAdView bannerView = findViewById(R.id.view_banner);
    bannerView.setAdUnitId("R-M-XXXXX-YY");
    AdRequest request = AdRequest.Builder().build();
    bannerView.loadAd(request);
}
void loadAd() {
    // Fullscreen & Native Ads, e.g. InterstitialAdLoader
    InterstitialAdLoader loader = new InterstitialAdLoader(this);
    AdRequest request = new AdRequest.Builder("R-M-XXXXX-YY")
            .build();
    loader.loadAd(request, listener);

    // Banner ads
    BannerAdView bannerView = findViewById(R.id.view_banner);
    AdRequest request = AdRequest.Builder("R-M-XXXXX-YY").build();
    bannerView.loadAd(request);
}

2. Changes to Targeting API

The age, gender, location, contextQuery, and contextTags fields have been removed from AdRequest.Builder. Use the new AdTargeting class to manage targeting parameters:

Class Method Status
AdRequest.Builder setAge(String) Removed, use
AdTargeting.Builder.setAge(String) and
AdRequest.Builder.setTargeting(AdTargeting)
AdRequest.Builder setGender(String) Removed, use
AdTargeting.Builder.setGender(String) and
AdRequest.Builder.setTargeting(AdTargeting)
AdRequest.Builder setLocation(Location) Removed, use
AdTargeting.Builder.setLocation(Location) and
AdRequest.Builder.setTargeting(AdTargeting)
AdRequest.Builder setContextQuery(String) Removed, use
AdTargeting.Builder.setContextQuery(String) and
AdRequest.Builder.setTargeting(AdTargeting)
AdRequest.Builder setContextTags(List<String>) Removed, use
AdTargeting.Builder.setContextTags(List<String>) and
AdRequest.Builder.setTargeting(AdTargeting)
AdRequest.Builder setTargeting(AdTargeting) Added
AdTargeting - Added
AdTargeting.Builder - Added
AdTargeting.Builder setAge(String) Added
AdTargeting.Builder setGender(String) Added
AdTargeting.Builder setLocation(Location) Added
AdTargeting.Builder setContextQuery(String) Added
AdTargeting.Builder setContextTags(List<String>) Added

Examples

Kotlin
SDK 7 SDK 8
val adRequest = AdRequest.Builder()
    .setAge("25")
    .setGender(Gender.MALE)
    .setContextTags(listOf("news"))
    .build()
val targeting = AdTargeting.Builder()
    .setAge("25")
    .setGender(Gender.MALE)
    .setContextTags(listOf("news"))
    .build()

val adRequest = AdRequest.Builder(adUnitId)
    .setTargeting(targeting)
    .build()
Java
SDK 7 SDK 8
void loadAd() {
    AdRequest adRequest = AdRequest.Builder()
            .setAge("25")
            .setGender(Gender.MALE)
            .setContextTags(listOf("news"))
            .build();
}
void loadAd() {
    AdTargeting targeting = new AdTargeting.Builder()
            .setAge("25")
            .setGender(Gender.MALE)
            .setContextTags(listOf("news"))
            .build();

    AdRequest adRequest = new AdRequest.Builder(adUnitId)
            .setTargeting(targeting)
            .build();
}

3. Changes to ad loading API

Methods for registering callback listeners and loading ads have been changed.

Class Method Status
InterstitialAdLoader setAdLoadListener(InterstitialAdLoadListener) Removed. Pass InterstitialAdLoadListener as a parameter to loadAd.
InterstitialAdLoader loadAd(AdRequestConfiguration) Removed. Use loadAd(AdRequest, InterstitialAdLoadListener).
InterstitialAdLoader loadAd(AdRequest, InterstitialAdLoadListener) Added
RewardedAdLoader setAdLoadListener(RewardedAdLoadListener) Removed. Pass RewardedAdLoadListener as a parameter to loadAd.
RewardedAdLoader loadAd(AdRequestConfiguration) Removed. Use loadAd(AdRequest, RewardedAdLoadListener).
RewardedAdLoader loadAd(AdRequest, RewardedAdLoadListener) Added
AppOpenAdLoader setAdLoadListener(AppOpenAdLoadListener) Removed. Pass AppOpenAdLoadListener as a parameter to loadAd.
AppOpenAdLoader loadAd(AdRequestConfiguration) Removed. Use loadAd(AdRequest, AppOpenAdLoadListener).
AppOpenAdLoader loadAd(AdRequest, AppOpenAdLoadListener) Added
NativeAdLoader setNativeAdLoadListener(NativeAdLoadListener) Removed. Pass NativeAdLoadListener as a parameter to loadAd.
NativeAdLoader loadAd(NativeAdRequestConfiguration) Removed. Use loadAd(AdRequest, NativeAdLoadListener).
NativeAdLoader loadAd(AdRequest, NativeAdOptions, NativeAdLoadListener) Added
NativeAdLoader loadAd(AdRequest, NativeAdLoadListener) Added
SliderAdLoader setSliderAdLoadListener(SliderAdLoadListener) Removed. Pass SliderAdLoadListener as a parameter to loadAd.
SliderAdLoader loadSlider(NativeAdRequestConfiguration) Removed. Use loadAd(AdRequest, SliderAdLoadListener).
SliderAdLoader loadSlider(AdRequest, NativeAdOptions, SliderAdLoadListener) Added
SliderAdLoader loadAd(AdRequest, NativeAdLoadListener) Added
NativeBulkAdLoader setNativeBulkAdLoadListener(NativeBulkAdLoadListener) Removed. Pass NativeBulkAdLoadListener as a parameter to loadAd.
NativeBulkAdLoader loadAds(NativeAdRequestConfiguration, Int) Removed. Use loadAd(AdRequest, NativeAdLoadListener).
NativeBulkAdLoader loadAds(AdRequest, NativeAdOptions, NativeBulkAdLoadListener) Added
NativeBulkAdLoader loadAds(AdRequest, NativeBulkAdLoadListener) Added

Examples

Kotlin
SDK 7 SDK 8
// Interstitial Ads
val interstitialAdLoader = InterstitialAdLoader(this)
interstitialAdLoader.setAdLoadListener(object : InterstitialAdLoadListener { /* ... */ })
interstitialAdLoader.loadAd(AdRequestConfiguration.Builder("R-M-XXXXX-YY").build())

// Rewarded Ads
val rewardedAdLoader = RewardedAdLoader(this)
rewardedAdLoader.setAdLoadListener(object : RewardedAdLoadListener { /* ... */ })
rewardedAdLoader.loadAd(AdRequestConfiguration.Builder("R-M-XXXXX-YY").build())

// AppOpen Ads
val appOpenAdLoader = AppOpenAdLoader(this)
appOpenAdLoader.setAdLoadListener(object : AppOpenAdLoadListener { /* ... */ })
appOpenAdLoader.loadAd(AdRequestConfiguration.Builder("R-M-XXXXX-YY").build())

// Native Ads
val nativeAdLoader = NativeAdLoader(this)
nativeAdLoader.setNativeAdLoadListener(object : NativeAdLoadListener { /* ... */ })
nativeAdLoader.loadAd(NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build())

// Slider Ads
val sliderAdLoader = SliderAdLoader(this)
sliderAdLoader.setSliderAdLoadListener(object : SliderAdLoadListener { /* ... */ })
sliderAdLoader.loadSlider(NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build())

// Native bulk ads
val nativeBulkAdLoader = NativeBulkAdLoader(this)
nativeBulkAdLoader.setNativeBulkAdLoadListener(object : NativeBulkAdLoadListener { /* ... */ })
nativeBulkAdLoader.loadAds(NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build(), 1)
// Interstitial Ads
val interstitialAdLoader = InterstitialAdLoader(this)
interstitialAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : InterstitialAdLoadListener { /* ... */ })

// Rewarded Ads
val rewardedAdLoader = RewardedAdLoader(this)
rewardedAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : RewardedAdLoadListener { /* ... */ })

// AppOpen Ads
val appOpenAdLoader = AppOpenAdLoader(this)
appOpenAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : AppOpenAdLoadListener { /* ... */ })

// Native Ads
val nativeAdLoader = NativeAdLoader(this)
nativeAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : NativeAdLoadListener { /* ... */ })
// Or with NativeAdOptions
nativeAdLoader.loadAd(
    AdRequest.Builder("R-M-XXXXX-YY").build(),
    NativeAdOptions.Builder().build(),
    object : NativeAdLoadListener { /* ... */ })

// Slider Ads
val sliderAdLoader = SliderAdLoader(this)
sliderAdLoader.loadSlider(AdRequest.Builder("R-M-XXXXX-YY").build(), object : SliderAdLoadListener { /* ... */ })
// Or with NativeAdOptions
sliderAdLoader.loadSlider(
    AdRequest.Builder("R-M-XXXXX-YY").build(),
    NativeAdOptions.Builder().build(),
    object : SliderAdLoadListener { /* ... */ })

// Native Bulk Ads
val nativeBulkAdLoader = NativeBulkAdLoader(this)
nativeBulkAdLoader.loadAds(
    AdRequest.Builder("R-M-XXXXX-YY").build(),
    1,
    object : NativeBulkAdLoadListener { /* ... */ }
)
// Or with NativeAdOptions
nativeBulkAdLoader.loadAds(
    AdRequest.Builder("R-M-XXXXX-YY").build(),
    1,
    NativeAdOptions.Builder().build(),
    object : NativeBulkAdLoadListener { /* ... */ }
)
Java
SDK 7 SDK 8
void loadAd() {
    // Interstitial Ads
    InterstitialAdLoader interstitialAdLoader = new InterstitialAdLoader(this);
    interstitialAdLoader.setAdLoadListener(new InterstitialAdLoadListener() { /* ... */ });
    interstitialAdLoader.loadAd(new AdRequestConfiguration.Builder("R-M-XXXXX-YY").build());

    // Rewarded Ads
    RewardedAdLoader rewardedAdLoader = new RewardedAdLoader(this);
    rewardedAdLoader.setAdLoadListener(new RewardedAdLoadListener() { /* ... */ });
    rewardedAdLoader.loadAd(new AdRequestConfiguration.Builder("R-M-XXXXX-YY").build());

    // AppOpen Ads
    AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(this);
    appOpenAdLoader.setAdLoadListener(new AppOpenAdLoadListener() { /* ... */ });
    appOpenAdLoader.loadAd(new AdRequestConfiguration.Builder("R-M-XXXXX-YY").build());

    // Native Ads
    NativeAdLoader nativeAdLoader = new NativeAdLoader(this);
    nativeAdLoader.setNativeAdLoadListener(new NativeAdLoadListener() { /* ... */ });
    nativeAdLoader.loadAd(new NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build());

    // Slider Ads
    SliderAdLoader sliderAdLoader = new SliderAdLoader(this);
    sliderAdLoader.setSliderAdLoadListener(new SliderAdLoadListener() { /* ... */ });
    sliderAdLoader.loadSlider(new NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build());

    // Native Bulk Ads
    NativeBulkAdLoader nativeBulkAdLoader = new NativeBulkAdLoader(this);
    nativeBulkAdLoader.setNativeBulkAdLoadListener(new NativeBulkAdLoadListener() { /* ... */ });
    nativeBulkAdLoader.loadAds(new NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build(), 1);
}
void loadAd() {
    // Interstitial Ads
    InterstitialAdLoader interstitialAdLoader = new InterstitialAdLoader(this);
    interstitialAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            new InterstitialAdLoadListener() { /* ... */ }
    );

    // Rewarded Ads
    RewardedAdLoader rewardedAdLoader = new RewardedAdLoader(this);
    rewardedAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            new RewardedAdLoadListener() { /* ... */ }
    );

    // AppOpen Ads
    AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(this);
    appOpenAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            new AppOpenAdLoadListener() { /* ... */ }
    );

    // Native Ads
    NativeAdLoader nativeAdLoader = new NativeAdLoader(this);
    nativeAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            new NativeAdLoadListener() { /* ... */ }
    );
    // Or with NativeAdOptions
    nativeAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            new NativeAdOptions.Builder().build(),
            new NativeAdLoadListener() { /* ... */ }
    );

    // Slider Ads
    SliderAdLoader sliderAdLoader = new SliderAdLoader(this);
    sliderAdLoader.loadSlider(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            new SliderAdLoadListener() { /* ... */ }
    );
    // Or with NativeAdOptions
    sliderAdLoader.loadSlider(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            new NativeAdOptions.Builder().build(),
            new SliderAdLoadListener() { /* ... */ }
    );

    // Native Bulk Ads
    NativeBulkAdLoader nativeBulkAdLoader = new NativeBulkAdLoader(this);
    nativeBulkAdLoader.loadAds(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            1,
            new NativeBulkAdLoadListener() { /* ... */ }
    );
    // Or with NativeAdOptions
    nativeBulkAdLoader.loadAds(new AdRequest.Builder("R-M-XXXXX-YY").build(),
            1,
            new NativeAdOptions.Builder().build(),
            new NativeBulkAdLoadListener() { /* ... */ }
    );
}

3.1 Kotlin Coroutines support

suspend overloads of ad loading methods have been added to the API:

Class Method Status
InterstitialAdLoader suspend fun loadAd(AdRequest): InterstitialAdLoadResult Added
RewardedAdLoader suspend fun loadAd(AdRequest): RewardedAdLoadResult Added
AppOpenAdLoader suspend fun loadAd(AdRequest): AppOpenAdLoadResult Added
NativeAdLoader suspend fun loadAd(AdRequest, NativeAdOptions): NativeAdLoadResult Added
NativeAdLoader suspend fun loadAd(AdRequest): NativeAdLoadResult Added
SliderAdLoader suspend fun loadAd(AdRequest): SliderAdLoadResult Added
SliderAdLoader suspend fun loadAd(AdRequest, NativeAdOptions): SliderAdLoadResult Added
NativeBulkAdLoader suspend fun loadAds(AdRequest, Int): NativeBulkAdLoadResult Added
NativeBulkAdLoader suspend fun loadAds(AdRequest, Int, NativeAdOptions): NativeBulkAdLoadResult Added

Examples

Kotlin
lifecycleScope.launch {
    // Interstitial Ads
    val interstitialAdLoader = InterstitialAdLoader(applicationContext)
    when(val result = interstitialAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build())) {
        is InterstitialAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is InterstitialAdLoadResult.Success -> TODO("Show interstitial ad: ${result.ad}")
    }

    // Rewarded Ads
    val rewardedAdLoader = RewardedAdLoader(applicationContext)
    when(val result = rewardedAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build())) {
        is RewardedAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is RewardedAdLoadResult.Success -> TODO("Show rewarded ad: ${result.ad}")
    }

    // AppOpen Ads
    val appOpenAdLoader = AppOpenAdLoader(applicationContext)
    when(val result = appOpenAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build())) {
        is AppOpenAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is AppOpenAdLoadResult.Success -> TODO("Show appOpen ad: ${result.ad}")
    }

    // Native Ads
    val nativeAdLoader = NativeAdLoader(applicationContext)
    val nativeAdRequest = AdRequest.Builder("R-M-XXXXX-YY").build()
    when(val result = nativeAdLoader.loadAd(nativeAdRequest)) {
        is NativeAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is NativeAdLoadResult.Success -> TODO("Show native ad: ${result.ad}")
    }

    // Or with NativeAdOptions
    when(val result = nativeAdLoader.loadAd(nativeAdRequest, NativeAdOptions.Builder().build())) {
        is NativeAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is NativeAdLoadResult.Success -> TODO("Show native ad: ${result.ad}")
    }

    // Slider Ads
    val sliderAdLoader = SliderAdLoader(applicationContext)
    val sliderAdRequest = AdRequest.Builder("R-M-XXXXX-YY").build()
    when(val result = sliderAdLoader.loadAd(sliderAdRequest)) {
        is SliderAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is SliderAdLoadResult.Success -> TODO("Show slider ad: ${result.ad}")
    }

    // Or with NativeAdOptions
    when(val result = sliderAdLoader.loadAd(sliderAdRequest, NativeAdOptions.Builder().build())) {
        is SliderAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is SliderAdLoadResult.Success -> TODO("Show slider ad: ${result.ad}")
    }

    // Native Bulk Ads
    val nativeBulkAdLoader = NativeBulkAdLoader(applicationContext)
    val builkAdRequest = AdRequest.Builder("R-M-XXXXX-YY").build()
    when(val result = nativeBulkAdLoader.loadAds(builkAdRequest, 1)) {
        is NativeBulkAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is NativeBulkAdLoadResult.Success -> TODO("Show bulk ad: ${result.ads}")
    }

    // Or with NativeAdOptions
    when(val result = nativeBulkAdLoader.loadAds(builkAdRequest, 1, NativeAdOptions.Builder().build())) {
        is NativeBulkAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is NativeBulkAdLoadResult.Success -> TODO("Show bulk ad: ${result.ads}")
    }
}

4. Changes to Banner API

The setAdUnitId method has been removed from BannerAdView. Now adUnitId is set for each ad load. The factory methods for creating BannerAdSize have been renamed.

Class Method Status
BannerAdView setAdUnitId(String) Removed. Pass adUnitId to the AdRequest constructor before loading the ad.
BannerAdSize stickySize Removed. Use BannerAdSize.sticky.
BannerAdSize inlineSize Removed. Use BannerAdSize.inline.

Examples

Kotlin
SDK 7 SDK 8
val banner = findViewById<BannerAdView>(R.id.banner)
val stickySize = BannerAdSize.stickySize(this, screenWidth)
val inlineSizeSize = BannerAdSize.inlineSize(this, screenWidth, 300)
banner.setAdUnitId("R-M-XXXXX-YY")
banner.setAdSize(stickySize)
banner.loadAd(AdRequest.Builder().build())
val banner = findViewById<BannerAdView>(R.id.banner)
val stickySize = BannerAdSize.sticky(this, screenWidth)
val inlineSizeSize = BannerAdSize.inline(this, screenWidth, 300)
banner.setAdSize(stickySize)
banner.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build())
Java
SDK 7 SDK 8
void loadAd() {
    BannerAdView banner = findViewById(R.id.banner);
    BannerAdSize stickySize = BannerAdSize.stickySize(this, screenWidth);
    BannerAdSize inlineSizeSize = BannerAdSize.inlineSize(this, screenWidth, 300);
    banner.setAdUnitId("R-M-XXXXX-YY");
    banner.setAdSize(stickySize);
    banner.loadAd(new AdRequest.Builder().build());
}
void loadAd() {
    BannerAdView banner = findViewById(R.id.banner);
    BannerAdSize stickySize = BannerAdSize.sticky(this, screenWidth);
    BannerAdSize inlineSizeSize = BannerAdSize.inline(this, screenWidth, 300);
    banner.setAdSize(stickySize);
    banner.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build());
}

5. Changes to AdInfo API

Methods for retrieving ad creative information have been changed from methods to properties; additional information has been removed:

Class Method/Field Status
BannerAdView,
InterstitialAd,
RewardedAd,
AppOpenAd,
NativeAd
info Removed. Use adInfo
BannerAdView,
InterstitialAd,
RewardedAd,
AppOpenAd,
NativeAd
adAttributes Removed. Use adInfo
NativeAd creativeId Removed. Use Creative.creativeId
NativeAd campaignId Removed. Use Creative.campaignId
AdInfo data Removed
AdInfo adSize Removed
AdInfo creatives Added
AdInfo extraData Added
AdInfo partnerText Added
Creative placeId Added
Creative offerId Added

Examples

Kotlin
SDK 7 SDK 8
// BannerAdView
val extraData = banner.info
val adUnitId = banner.adInfo.adUnitId
val extraData2 = banner.adInfo.data
val width = banner.adInfo.adSize?.width
val height = banner.adInfo.adSize?.height
val creativeId = banner.adInfo.creatives.first().creativeId
val campaignId = banner.adInfo.creatives.first().campaignId
val creativeId2 = banner.adAttributes.first().bannerId
val campaignId2 = banner.adAttributes.first().campaignId
val placeId = banner.adAttributes.first().placeId

// InterstitialAd, RewardedAd, AppOpenAd
val extraData = fullscreenAd.info.data
val adUnitId = fullscreenAd.info.adUnitId
val width = fullscreenAd.info.adSize?.width
val height = fullscreenAd.info.adSize?.height
val creativeId = fullscreenAd.info.creatives.first().creativeId
val campaignId = fullscreenAd.info.creatives.first().campaignId
val creativeId2 = fullscreenAd.adAttributes.first().bannerId
val campaignId2 = fullscreenAd.adAttributes.first().campaignId
val placeId = fullscreenAd.adAttributes.first().placeId

// NativeAd
val extraData = nativeAd.info
val creativeId = nativeAd.creativeId
val campaignId = nativeAd.campaignId
val creativeId2 = nativeAd.adAttributes?.bannerId
val campaignId2 = nativeAd.adAttributes?.campaignId
val placeId = nativeAd.adAttributes?.placeId
// BannerAdView
val extraData = banner.adInfo.extraData
val partnerText = banner.adInfo.partnerText
val creativeId = banner.adInfo.creatives.first().creativeId
val campaignId = banner.adInfo.creatives.first().campaignId
val placeId = banner.adInfo.creatives.first().placeId
val adUnitId = banner.adInfo.adUnitId
val width = banner.adSize?.width
val height = banner.adSize?.height

// InterstitialAd, RewardedAd, AppOpenAd
val extraData = fullscreenAd.adInfo.extraData
val partnerText = fullscreenAd.adInfo.partnerText
val adUnitId = fullscreenAd.adInfo.adUnitId
val creativeId = fullscreenAd.adInfo.creatives.first().creativeId
val campaignId = fullscreenAd.adInfo.creatives.first().campaignId
val placeId = fullscreenAd.adInfo.creatives.first().placeId

// NativeAd
val extraData = nativeAd.adInfo.extraData
val partnerText = nativeAd.adInfo.partnerText
val adUnitId = nativeAd.adInfo.adUnitId
val creativeId = nativeAd.adInfo.creatives.first().creativeId
val campaignId = nativeAd.adInfo.creatives.first().campaignId
val placeId = nativeAd.adInfo.creatives.first().placeId
Java
SDK 7 SDK 8
// BannerAdView
String extraData = banner.getInfo();
String adUnitId = banner.getAdInfo().getAdUnitId();
String extraData2 = banner.getAdInfo().getData();
int width = banner.getAdInfo().getAdSize().getWidth();
int height = banner.getAdInfo().getAdSize().getHeight();
String creativeId = banner.getAdInfo().getCreatives().get(0).getCreativeId();
String campaignId = banner.getAdInfo().getCreatives().get(0).getCampaignId();
String creativeId2 = banner.getAdAttributes().get(0).getBannerId();
String campaignId2 = banner.getAdAttributes().get(0).getCampaignId();
String placeId = banner.getAdAttributes().get(0).getPlaceId();

// InterstitialAd, RewardedAD, AppOpenAd
String extraData = fullscreenAd.getInfo().getData();
String adUnitId = fullscreenAd.getInfo().getAdUnitId();
int width = fullscreenAd.getInfo().getAdSize().getWidth();
int height = fullscreenAd.getInfo().getAdSize().getHeight();
String creativeId = fullscreenAd.getInfo().getCreatives().get(0).getCreativeId();
String campaignId = fullscreenAd.getInfo().getCreatives().get(0).getCampaignId();
String creativeId2 = fullscreenAd.getAdAttributes().get(0).getBannerId();
String campaignId2 = fullscreenAd.getAdAttributes().get(0).getCampaignId();
String placeId = fullscreenAd.getAdAttributes().get(0).getPlaceId();

// NativeAd
String extraData = nativeAd.getInfo();
String creativeId = nativeAd.getCreativeId();
String campaignId = nativeAd.getCampaignId();
String creativeId2 = nativeAd.getAdAttributes().getBannerId();
String campaignId2 = nativeAd.getAdAttributes().getCampaignId();
String placeId = nativeAd.getAdAttributes().getPlaceId();
// BannerAdView
String extraData = banner.getAdInfo().getExtraData();
String partnerText = banner.getAdInfo().getPartnerText();
String creativeId = banner.getAdInfo().getCreatives().get(0).getCreativeId();
String campaignId = banner.getAdInfo().getCreatives().get(0).getCampaignId();
String placeId = banner.getAdInfo().getCreatives().get(0).getPlaceId();
String adUnitId = banner.getAdInfo().getAdUnitId();
int width = banner.getAdSize().getWidth();
int height = banner.getAdSize().getHeight();

// InterstitialAd, RewardedAd, AppOpenAd
String extraData = fullscreenAd.getAdInfo().getExtraData();
String partnerText = fullscreenAd.getAdInfo().getPartnerText();
String adUnitId = fullscreenAd.getAdInfo().getAdUnitId();
String creativeId = fullscreenAd.getAdInfo().getCreatives().get(0).getCreativeId();
String campaignId = fullscreenAd.getAdInfo().getCreatives().get(0).getCampaignId();
String placeId = fullscreenAd.getAdInfo().getCreatives().get(0).getPlaceId();

// NativeAd
String extraData = nativeAd.getAdInfo().getExtraData();
String partnerText = nativeAd.getAdInfo().getPartnerText();
String adUnitId = nativeAd.getAdInfo().getAdUnitId();
String creativeId = nativeAd.getAdInfo().getCreatives().get(0).getCreativeId();
String campaignId = nativeAd.getAdInfo().getCreatives().get(0).getCampaignId();
String placeId = nativeAd.getAdInfo().getCreatives().get(0).getPlaceId();

6. Changes to Native Ads API

The NativeAd.bindNativeAd and SliderAd.bindSliderAd() methods now return an AdBindingResult binding result and no longer throw exceptions. The type of the warning field has changed from String? to NativeAdWarning?. To comply with the Advertising Law, the new class contains, in addition to the warning asset content, the minimum required size of the warning asset as a percentage of the total ad area. A hasVideo field indicating the presence of a video creative in the selected ad has been added to the NativeAdMedia class.

Class Method/Field Status
NativeAd bindNativeAd Added return value AdBindingResult. Method no longer throws exceptions.
SliderAd bindSliderAd Added return value AdBindingResult. Method no longer throws exceptions.
AdBindingResult - Added
NativeAdAssets warning Type changed: String -> NativeAdWarning
NativeAdWarning - Added
NativeAdWarning value Added
NativeAdWarning minimumRequiredArea Added
NativeAdMedia hasVideo Added

Examples

Kotlin
SDK 7 SDK 8
val warning = nativeAd.adAssets.warning
try {
    nativeAd.bindNativeAd(binder)
} catch (e: NativeAdException) {
    val message = e.message
}
val warningAsset = nativeAd.adAssets.warning
val warning = warningAsset?.value
val warningMinArea = warningAsset?.minimumRequiredArea
val hasVideo = nativeAd.adAssets.media?.hasVideo
when (val result = nativeAd.bindNativeAd(binder)) {
    is AdBindingResult.Failure -> {
        val missingAssetName = result.missingAssetName
        val message = result.exception.message
    }
    AdBindingResult.Success -> Unit
}
Java
SDK 7 SDK 8
void bindAd(NativeAd nativeAd) {
    String warning = nativeAd.getAdAssets().getWarning();
    try {
        nativeAd.bindNativeAd(binder);
    } catch (NativeAdException e) {
        String message = e.getMessage();
    }
}
void bindNativeAd(NativeAd nativeAd) {
    NativeAdWarning warningAsset = nativeAd.getAdAssets().getWarning();
    String warning = warningAsset.getValue();
    float minWarningArea = warningAsset.getMinimumRequiredArea();
    boolean hasVideo = nativeAd.getAdAssets().getMedia().getHasVideo();
    AdBindingResult result = nativeAd.bindNativeAd(binder);
    if (result instanceof AdBindingResult.Failure) {
        String missingAssetName = ((AdBindingResult.Failure) result).getMissingAssetName();
        String message = ((AdBindingResult.Failure) result).getException().getMessage();
    }
}

6.1 Native ad template API

Native ad template integration tools have been removed. Use standard native ad components for integration.

Class Status
NativeBannerView Removed
SizeConstraint Removed
HorizontalOffset Removed
NativeTemplateAppearance Removed
TextAppearance Removed
BannerAppearance Removed
ButtonAppearance Removed
RatingAppearance Removed

7. Removal of certain ad object callbacks

The ClosableBannerAdEventListener and ClosableNativeAdEventListener interfaces have been removed. The onLeftApplication and onReturnToApplication methods have also been removed:

Class Method Status
ClosableBannerAdEventListener - Removed
ClosableNativeAdEventListener - Removed
BannerAdEventListener
NativeAdEventListener
onLeftApplication Removed
BannerAdEventListener
NativeAdEventListener
onReturnToApplication Removed

Examples

Kotlin
SDK 7 SDK 8
bannerAd?.setBannerAdEventListener(object : ClosableBannerAdEventListener {
    override fun closeBannerAd() { /* ... */ }
    override fun onAdClicked() { /* ... */ }
    override fun onAdFailedToLoad(error: AdRequestError) { /* ... */ }
    override fun onAdLoaded() { /* ... */ }
    override fun onImpression(impressionData: ImpressionData?) { /* ... */ }
    override fun onLeftApplication() { /* ... */ }
    override fun onReturnedToApplication() { /* ... */ }
})
// ClosableAdEventListener as well as
// onAdClosed callback are not available anymore
bannerAdView?.setBannerAdEventListener(object : BannerAdEventListener {
    override fun onAdClicked() { /* ... */ }
    override fun onAdFailedToLoad(error: AdRequestError) { /* ... */ }
    override fun onAdLoaded() { /* ... */ }
    override fun onImpression(impressionData: ImpressionData?) { /* ... */ }
})
Java
SDK 7 SDK 8
void setEventListener(BannerAdView bannerView) {
    bannerView.setBannerAdEventListener(
    new ClosableBannerAdEventListener() {
            @Override
            public void closeBannerAd() { /* ... */ }
            @Override
            public void onAdLoaded() { /* ... */ }
            @Override
            public void onAdFailedToLoad(@NotNull AdRequestError adRequestError) { /* ... */ }
            @Override
            public void onAdClicked() { /* ... */ }
            @Override
            public void onLeftApplication() { /* ... */ }
            @Override
            public void onReturnedToApplication() { /* ... */ }
            @Override
            public void onImpression(@Nullable ImpressionData impressionData) { /* ... */ }
        }
    );
}
void setEventListener(BannerAdView bannerView) {
// ClosableAdEventListener as well as
// onAdClosed callback are not available anymore
    bannerView.setBannerAdEventListener(
        new BannerAdEventListener() {
            @Override
            public void onAdLoaded() { /* ... */ }
            @Override
            public void onAdFailedToLoad(@NotNull AdRequestError adRequestError) { /* ... */ }
            @Override
            public void onAdClicked() { /* ... */ }
            @Override
            public void onImpression(@Nullable ImpressionData impressionData) { /* ... */ }
        }
    );
}

8. Changes to the main SDK class

The main SDK class has been renamed to YandexAds, and some methods for setting privacy settings have also been renamed.

Class Method Status
MobileAds - Removed. Use YandexAds
MobileAds setAgeRestrictedUser(Boolean) Removed. Use YandexAds.setAgeRestricted(Boolean).
MobileAds setLocationConsent(Boolean) Removed. Use YandexAds.setLocationTracking(Boolean).
YandexAds - Added
YandexAds setAgeRestricted(Boolean) Added
YandexAds setLocationTracking(Boolean) Added

Examples

Kotlin
SDK 7 SDK 8
import com.yandex.mobile.ads.common.MobileAds

MobileAds.setUserConsent(true)
MobileAds.setAgeRestrictedUser(false)
MobileAds.setLocationConsent(true)
MobileAds.initialize(context) { /* ... */ }
MobileAds.enableDebugErrorIndicator(true)
MobileAds.enableLogging(true)
MobileAds.setAppAdAnalyticsReporting(true)
MobileAds.showDebugPanel(this)
MobileAds.libraryVersion
import com.yandex.mobile.ads.common.YandexAds

YandexAds.setUserConsent(true)
YandexAds.setAgeRestricted(false)
YandexAds.setLocationTracking(true)
YandexAds.initialize(context) { /* ... */ }
YandexAds.enableDebugErrorIndicator(true)
YandexAds.enableLogging(true)
YandexAds.setAppAdAnalyticsReporting(true)
YandexAds.showDebugPanel(this)
YandexAds.libraryVersion
Java
SDK 7 SDK 8
import com.yandex.mobile.ads.common.MobileAds;

void initSdk() {
    MobileAds.setUserConsent(true);
    MobileAds.setAgeRestrictedUser(false);
    MobileAds.setLocationConsent(true);
    MobileAds.initialize(this, () -> { /* ... */ });
    MobileAds.getLibraryVersion();
    MobileAds.enableDebugErrorIndicator(true);
    MobileAds.enableLogging(true);
    MobileAds.setAppAdAnalyticsReporting(true);
    MobileAds.showDebugPanel(this);
}
import com.yandex.mobile.ads.common.YandexAds;

void initSdk() {
    YandexAds.setUserConsent(true);
    YandexAds.setAgeRestricted(false);
    YandexAds.setLocationTracking(true);
    YandexAds.initialize(this, () -> { /* ... */ });
    YandexAds.getLibraryVersion();
    YandexAds.enableDebugErrorIndicator(true);
    YandexAds.enableLogging(true);
    YandexAds.setAppAdAnalyticsReporting(true);
    YandexAds.showDebugPanel(this);
}


Changes to Instream API

1. Changes to packages and dependency structure

Main classes have been renamed to match the new SDK structure.

Class Status
com.yandex.mobile.ads.instream.InstreamAdBinder Moved to com.yandex.mobile.ads.instream.binder.InstreamAdBinder
com.yandex.mobile.ads.instream.InstreamAdRequestConfiguration Renamed to com.yandex.mobile.ads.instream.InstreamAdRequest
com.yandex.mobile.ads.instream.InstreamAdBreak Renamed to com.yandex.mobile.ads.instream.adbreak.AdBreakData
com.yandex.mobile.ads.instream.inroll.Inroll
com.yandex.mobile.ads.instream.pauseroll.Pauseroll
Replaced by com.yandex.mobile.ads.instream.adbreak.InstreamAdBreak

Examples

Kotlin
SDK 7 SDK 8
import com.yandex.mobile.ads.instream.InstreamAdBinder
import com.yandex.mobile.ads.instream.InstreamAdRequestConfiguration
import com.yandex.mobile.ads.instream.InstreamAdBreak
import com.yandex.mobile.ads.instream.inroll.Inroll
import com.yandex.mobile.ads.instream.pauseroll.Pauseroll
import com.yandex.mobile.ads.instream.binder.InstreamAdBinder
import com.yandex.mobile.ads.instream.InstreamAdRequest
import com.yandex.mobile.ads.instream.adbreak.AdBreakData
import com.yandex.mobile.ads.instream.adbreak.InstreamAdBreak
Java
SDK 7 SDK 8
import com.yandex.mobile.ads.instream.InstreamAdBinder;
import com.yandex.mobile.ads.instream.InstreamAdRequestConfiguration;
import com.yandex.mobile.ads.instream.InstreamAdBreak;
import com.yandex.mobile.ads.instream.inroll.Inroll;
import com.yandex.mobile.ads.instream.pauseroll.Pauseroll;
import com.yandex.mobile.ads.instream.binder.InstreamAdBinder;
import com.yandex.mobile.ads.instream.InstreamAdRequest;
import com.yandex.mobile.ads.instream.adbreak.AdBreakData;
import com.yandex.mobile.ads.instream.adbreak.InstreamAdBreak;

2. Changes to AdRequest

The InstreamAdRequestConfiguration class has been renamed to InstreamAdRequest.

Class Status
InstreamAdRequestConfiguration Removed. Use InstreamAdRequest
InstreamAdRequest Added
InstreamAdBreakRequest Added

Examples

Kotlin
SDK 7 SDK 8
val loader = InstreamAdLoader(this)
val config = InstreamAdRequestConfiguration.Builder("XXXXXX").build()
loader.loadInstreamAd(this, config)
val loader = InstreamAdLoader(this)
val config = InstreamAdRequest.Builder("XXXXXX").build()
loader.loadInstreamAd(this, config)
Java
SDK 7 SDK 8
void loadAd() {
    InstreamAdLoader loader = new InstreamAdLoader(this);
    InstreamAdRequestConfiguration config = new InstreamAdRequestConfiguration.Builder("XXXXXX").build();
    loader.loadInstreamAd(this, config);
}
void loadAd() {
    InstreamAdLoader loader = new InstreamAdLoader(this);
    InstreamAdRequest config = new InstreamAdRequest.Builder("XXXXXX").build();
    loader.loadInstreamAd(this, config);
}

3. Changes to ad loading API

Methods for registering callback listeners and loading ads have been changed. The InstreamAdBreakLoader class for loading ad breaks has been added. The signature of the onInstreamAdFailedToLoad method has also been changed: instead of the reason string, an InstreamAdRequestError object is now passed.

Class Method Status
InstreamAdLoader setInstreamAdLoadListener(InstreamAdLoadListener) Removed. Pass InstreamAdLoadListener as a parameter to loadAd.
InstreamAdLoader loadAd(InstreamAdRequestConfiguration) Removed. Pass InstreamAdLoadListener as a parameter to loadAd.
InstreamAdLoader loadAd(InstreamAdRequest, InstreamAdLoadListener) Removed. Pass InstreamAdLoadListener as a parameter to loadAd.
InstreamAdLoadListener onInstreamAdFailedToLoad(String) Removed. Use onInstreamAdFailedToLoad(InstreamAdRequestError).
InstreamAdLoadListener onInstreamAdFailedToLoad(InstreamAdRequestError) Added
InstreamAdBreakLoader - Added
InstreamAdBreakLoader loadAd(InstreamAdBreakRequest, InstreamAdBreakLoadListener) Added
InstreamAdBreakLoadListener - Added

Examples

Kotlin
SDK 7 SDK 8
val instreamAdLoader = InstreamAdLoader(this)
instreamAdLoader.setInstreamAdLoadListener(object : InstreamAdLoadListener {
    override fun onInstreamAdLoaded(instreamAd: InstreamAd) {
        // ...
    }

    override fun onInstreamAdFailedToLoad(reason: String) {
        println("Instream ad failed to load: $reason")
    }
})
val config = InstreamAdRequestConfiguration.Builder("XXXXXX").build()
instreamAdLoader.loadInstreamAd(this, config)
val instreamAdLoader = InstreamAdLoader(this)
val config = InstreamAdRequest.Builder("XXXXXX").build()
instreamAdLoader.loadAd(config, object : InstreamAdLoadListener {
    override fun onInstreamAdLoaded(instreamAd: InstreamAd) {
        // ...
    }

    override fun onInstreamAdFailedToLoad(error: InstreamAdRequestError) {
        println("Instream ad failed to load: ${error.reason}")
    }
})
Java
SDK 7 SDK 8
void loadInstreamAd() {
    InstreamAdLoader instreamAdLoader = new InstreamAdLoader(this);
    instreamAdLoader.setInstreamAdLoadListener(new InstreamAdLoadListener() {
        @Override
        public void onInstreamAdLoaded(InstreamAd instreamAd) {
            // ...
        }

        @Override
        public void onInstreamAdFailedToLoad(String reason) {
            System.out.println("Instream ad failed to load: " + reason);
        }
    });
    InstreamAdRequestConfiguration config = new InstreamAdRequestConfiguration.Builder("XXXXXX").build();
    instreamAdLoader.loadInstreamAd(this, config);
}
void loadInstreamAd() {
    InstreamAdLoader instreamAdLoader = new InstreamAdLoader(this);
    InstreamAdRequest config = new InstreamAdRequest.Builder("XXXXXX").build();
    instreamAdLoader.loadAd(config, new InstreamAdLoadListener() {
        @Override
        public void onInstreamAdLoaded(InstreamAd instreamAd) {
            // ...
        }

        @Override
        public void onInstreamAdFailedToLoad(InstreamAdRequestError error) {
            System.out.println("Instream ad failed to load: " + error.getReason());
        }
    });
}

3.1 Kotlin coroutines support

suspend overloads of ad loading methods have been added to InstreamAdLoader and InstreamAdBreakAdLoader:

Class Method Status
InstreamAdLoader suspend fun loadAd(InstreamAdRequest): InstreamAdLoadResult Added
InstreamAdBreakLoader suspend fun loadAd(InstreamAdBreakRequest): InstreamAdBreakLoadResult Added

Examples

Kotlin
lifecycleScope.launch {
    val instreamAdLoader = InstreamAdLoader(applicationContext)
    when(val result = instreamAdLoader.loadAd(InstreamAdRequest.Builder("XXXXXX").build())) {
        is InstreamAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is InstreamAdLoadResult.Success -> TODO("Show instream ad: ${result.ad}")
    }

    val adBreakLoader = InstreamAdBreakLoader(applicationContext)
    when (val result = adBreakLoader.loadAd(InstreamAdBreakRequest.Builder("XXXXXX", "YY").build())) {
        is InstreamAdBreakLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
        is InstreamAdBreakLoadResult.Success -> TODO("Show adBreak : ${result.adBreak}")
    }
}

4. Working with In-roll and Pause-roll

Ad break management logic has become more flexible. The specialized queue providers InrollQueueProvider and PauserollQueueProvider have been removed — all breaks are available directly from the InstreamAd object and are filtered by type.

If you use automatic rendering via InstreamAdBinder, select only breaks of types INROLL and PAUSEROLL from the instreamAdBreaks collection.

Class Status
InrollQueueProvider Removed. Use instreamAd.instreamAdBreaks filtered by InstreamAdBreakType.INROLL
PauserollQueueProvider Removed. Use instreamAd.instreamAdBreaks filtered by InstreamAdBreakType.PAUSEROLL

Examples

Kotlin
SDK 7 SDK 8
// 1. Get the In-roll queue from the loaded ad
val inrollQueueProvider = InrollQueueProvider(context, instreamAd)
val instreamAdBreakQueue = inrollQueueProvider.queue

// 2. Prepare a specific break
val currentInroll = instreamAdBreakQueue.poll()
currentInroll?.setListener(object : InstreamAdBreakEventListener {
    override fun onInstreamAdBreakPrepared() {
        // 3. Show the prepared break
        currentInroll.play(instreamAdView)
    }
    // ... other listener methods
})
currentInroll?.prepare(instreamAdPlayer)
// 1. Get the list of all breaks directly from InstreamAd
val inrolls = instreamAd.instreamAdBreaks.filter {
    it.adBreakData.type == InstreamAdBreakType.INROLL
}

// 2. Prepare and show
val inrollIndex = 0 // Manage the index yourself
val currentInroll = inrolls.getOrNull(inrollIndex)

currentInroll?.setListener(object : InstreamAdBreakEventListener {
    override fun onInstreamAdBreakPrepared() {
        // 3. Show the prepared break
        currentInroll.play(instreamAdView)
    }
})
currentInroll?.prepare(instreamAdPlayer)
Java
SDK 7 SDK 8
void loadAdBreak() {
// 1. Get the In-roll queue from the loaded ad
    InrollQueueProvider inrollQueueProvider = new InrollQueueProvider(context, instreamAd);
    Queue<Inroll> instreamAdBreakQueue = inrollQueueProvider.getQueue();

// 2. Prepare a specific break
    Inroll currentInroll = instreamAdBreakQueue.poll();
    if (currentInroll != null) {
        currentInroll.setListener(new InstreamAdBreakEventListener() {
            @Override
            public void onInstreamAdBreakPrepared() {
                // 3. Show the prepared break
                currentInroll.play(instreamAdView);
            }
            // ... other listener methods
        });
        currentInroll.prepare(instreamAdPlayer);
    }
}
void loadAdBreak() {
    // 1. Get the list of all breaks directly from InstreamAd
    List<InstreamAdBreak> inrolls = new ArrayList<>();
    for (InstreamAdBreak adBreak : instreamAd.getInstreamAdBreaks()) {
        if (adBreak.getAdBreakData().getType() == InstreamAdBreakType.INROLL) {
            inrolls.add(adBreak);
        }
    }

    // 2. Prepare and show
    int inrollIndex = 0; // Manage the index yourself
    InstreamAdBreak currentInroll = inrollIndex < inrolls.size() ? inrolls.get(inrollIndex) : null;

    if (currentInroll != null) {
        currentInroll.setListener(new InstreamAdBreakEventListener() {
            @Override
            public void onInstreamAdBreakPrepared() {
                // 3. Show the prepared break
                currentInroll.play(instreamAdView);
            }
        });
        currentInroll.prepare(instreamAdPlayer);
    }
}

5. Default player

Passing a player for video rendering is now optional. When passing null, the SDK takes full control of video rendering.

Class Method Status
InstreamAdBinder constructor The instreamAdPlayer parameter is now optional. It is acceptable to pass null.
InstreamAdBreak prepare(instreamAdPlayer) Removed. Use prepare() without a parameter.
InstreamAdBreak prepare() Added

Examples

Kotlin
SDK 7 SDK 8
// Automatic start (InstreamAdBinder)
val instreamAdBinder = InstreamAdBinder(
    context,
    instreamAd,
    instreamAdPlayer, // Player was required
    contentPlayer
)

// Manual start (InstreamAdBreak)
val adBreak: InstreamAdBreak
adBreak.prepare(instreamAdPlayer)
// Automatic start (InstreamAdBinder)
val instreamAdBinder = InstreamAdBinder(
    context,
    instreamAd,
    null, // Pass null to use the default player
    contentPlayer
)

// Manual start (InstreamAdBreak)
val adBreak: InstreamAdBreak
adBreak.prepare()
Java
SDK 7 SDK 8
void showAd() {
    // Automatic start (InstreamAdBinder)
    InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
            context,
            instreamAd,
            instreamAdPlayer, // Player was required
            contentPlayer
    );

    // Manual start (InstreamAdBreak)
    InstreamAdBreak adBreak;
    adBreak.prepare(instreamAdPlayer);
}
void showAd() {
    // Automatic start (InstreamAdBinder)
    InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
            context,
            instreamAd,
            null, // Pass null to use the default player
            contentPlayer
    );

    // Manual start (InstreamAdBreak)
    InstreamAdBreak adBreak;
    adBreak.prepare();
}

6. Changes to InstreamAdPlayer interface

The InstreamAdPlayer interface has been updated: the supportedMimeTypes property has been added for optimizing video format selection, and the bindPlayerView method has been added for correct positioning of ad elements above the video.

Class Method Status
InstreamAdPlayer supportedMimeTypes: List<String> Added. Allows the SDK to select the most suitable video format (e.g., DASH instead of MP4).
InstreamAdPlayer bindPlayerView(container: FrameLayout) Added. You must place videoPlayerView inside the provided container filling the full space.

Examples

Kotlin
SDK 7 SDK 8
class InstreamAdPlayerImpl : InstreamAdPlayer {
    // ... methods (prepareAd, playAd, pauseAd, etc.)
}
class InstreamAdPlayerImpl : InstreamAdPlayer {

    // 1. List of MIME types supported by the player
    override val supportedMimeTypes: List<String>
        get() = listOf(InstreamAdMimeTypes.MP4, InstreamAdMimeTypes.WEBM)

    // 2. Place videoPlayerView inside container filling the full space
    override fun bindPlayerView(container: FrameLayout) {
        container.addView(playerView)
    }

    // ... other methods (prepareAd, playAd, pauseAd, etc.)
}
Java
SDK 7 SDK 8
public class InstreamAdPlayerImpl implements InstreamAdPlayer {
    // ... methods (prepareAd, playAd, pauseAd, etc.)
}
public class InstreamAdPlayerImpl implements InstreamAdPlayer {

    // 1. List of MIME types supported by the player
    @Override
    public List<String> getSupportedMimeTypes() {
        return Arrays.asList(InstreamAdMimeTypes.MP4, InstreamAdMimeTypes.WEBM);
    }

    // 2. Place videoPlayerView inside container filling the full space
    @Override
    public void bindPlayerView(FrameLayout container) {
        container.addView(playerView);
    }

    // ... other methods (prepareAd, playAd, pauseAd, etc.)
}


Changes to mediation network APIs

1. New API for passing mediation network data

For mediation adapters, the adapter identity has been moved to a separate method:

Class Method Status
AdapterIdentity - Added
YandexAds setAdapterIdentity(AdapterIdentity) Added. Call this method before YandexAds.initialize instead of passing adapter data as additional parameters to ad requests.

Examples

Kotlin
SDK 7 SDK 8
YandexAds.initialize(context, listener)

val parameters = mapOf(
    "adapter_network_name" to "AdNetwork",
    "adapter_network_version" to "1.2.3",
    "adapter_version" to "1.0.0"
)

val adRequest = AdRequest.Builder()
    .setParameters(parameters)
    .build()

bannerAd.loadAd(adRequest)
val identity = AdapterIdentity("AdNetwork", "1.0.0", "1.2.3")
YandexAds.setAdapterIdentity(identity) // Call before initialize()
YandexAds.initialize(context, listener)

// No need to pass additional parameters
val adRequest = AdRequest.Builder("R-M-XXXXX-YY").build()
bannerAd.loadAd(adRequest)
Java
SDK 7 SDK 8
void loadAd() {
    Map<String, String> parameters = new HashMap<>();
    parameters.put("adapter_network_name", "AdNetwork");
    parameters.put("adapter_network_version", "1.2.3");
    parameters.put("adapter_version", "1.0.0");

    AdRequest adRequest = new AdRequest.Builder()
            .setParameters(parameters)
            .build();

    bannerView.loadAd(adRequest);
}
void loadAd() {
    AdapterIdentity adapterIdentity = new AdapterIdentity("AdNetwork", "1.0.0", "1.2.3");
    YandexAds.setAdapterIdentity(adapterIdentity); // Call before initialize()
    YandexAds.initialize(this, () -> { /* ... */ });

    // No need to pass additional parameters
    AdRequest adRequest = new AdRequest.Builder("R-M-XXXXX-YY").build();

    bannerView.loadAd(adRequest);
}

2. BidderTokenRequest rework

The BidderTokenLoader class has received a constructor, and the loadBidderToken method has changed from static to an instance method. The BidderTokenRequestConfiguration class has been renamed to BidderTokenRequest and changed. Instead of Builder(AdType), factory methods banner, interstitial, rewarded, appOpenAd, and native must now be used to create an instance.

Class Constructor/Method Status
BidderTokenLoader BidderTokenLoader(Context) Constructor added
BidderTokenLoader loadBidderToken Changed. From static, the method became an instance method of the BidderTokenLoader class.
BidderTokenRequestConfiguration - Removed. Use BidderTokenRequest
BidderTokenRequestConfiguration.Builder - Removed. Use factory methods in BidderTokenRequest.
BidderTokenRequestConfiguration.Builder setBannerAdSize(BannerAdSize) Removed. Pass BannerAdSize in the arguments of BidderTokenRequest.banner(BannerAdSize)
BidderTokenRequestConfiguration.Builder setParameters(Map<String, String>) Removed. Pass parameters as factory method arguments.
BidderTokenRequest - Added
BidderTokenRequest banner(BannerAdSize) Added
BidderTokenRequest banner(BannerAdSize, AdTargeting) Added
BidderTokenRequest banner(BannerAdSize, AdTargeting, Map<String, String>) Added
BidderTokenRequest interstitial() Added
BidderTokenRequest interstitial(AdTargeting) Added
BidderTokenRequest interstitial(AdTargeting, Map<String, String>) Added
BidderTokenRequest rewarded() Added
BidderTokenRequest rewarded(AdTargeting) Added
BidderTokenRequest rewarded(AdTargeting, Map<String, String>) Added
BidderTokenRequest appOpenAd() Added
BidderTokenRequest appOpenAd(AdTargeting) Added
BidderTokenRequest appOpenAd(AdTargeting, Map<String, String>) Added
BidderTokenRequest native() Added
BidderTokenRequest native(AdTargeting) Added
BidderTokenRequest native(AdTargeting, Map<String, String>) Added

Examples

Kotlin
SDK 7 SDK 8
val bidderTokenRequest = BidderTokenRequestConfiguration.Builder(AdType.INTERSTITIAL)
    .setBannerAdSize(BannerAdSize.stickySize(this, screenWidth))
    .setParameters(mapOf("a" to "b"))
    .build()

BidderTokenLoader.loadBidderToken(
    this,
    bidderTokenRequest,
    object : BidderTokenLoadListener { /* ... */ }
)
val bidderTokenLoader = BidderTokenLoader(this);
bidderTokenLoader.loadBidderToken(
    BidderTokenRequest.banner(BannerAdSize.sticky(this, screenWidth), parameters = mapOf("a" to "b")),
    object : BidderTokenLoadListener { /* ... */ }
)

bidderTokenLoader.loadBidderToken(
    BidderTokenRequest.interstitial(),
    object : BidderTokenLoadListener { /* ... */ }
)
Java
SDK 7 SDK 8
void loadToken() {
    Map<String, String> parameters = new HashMap<>();
    parameters.put("a", "b");

    BidderTokenRequestConfiguration bidderTokenRequest =
            new BidderTokenRequestConfiguration.Builder(AdType.INTERSTITIAL)
                    .setBannerAdSize(BannerAdSize.stickySize(this, screenWidth))
                    .setParameters(parameters)
                    .build();

    BidderTokenLoader.loadBidderToken(
            this,
            bidderTokenRequest,
            new BidderTokenLoadListener() { /* ... */ }
    );
}
void loadToken() {
    Map<String, String> parameters = new HashMap<>();
    parameters.put("a", "b");

    BidderTokenLoader bidderTokenLoader = new BidderTokenLoader(this);
    bidderTokenLoader.loadBidderToken(
            BidderTokenRequest.banner(BannerAdSize.inline(this, screenWidth), null, parameters),
            new BidderTokenLoadListener() { /* ... */ }
    );

    bidderTokenLoader.loadBidderToken(BidderTokenRequest.interstitial(),
            new BidderTokenLoadListener() { /* ... */ }
    );
}

Jetpack Compose integration

Jetpack Compose integration is now supported. See the Jetpack Compose section at the end of the Android documentation menu:

Integration examples:


Requirements

  • Gradle: 7.0 and above
  • Android gradle plugin: 8.3.2 and above
  • Android SDK: 21 (Android 5.0) and above
  • Kotlin: 1.9.0 and above
  • Java: 8 and above