Guide for migrating to version 8

Version 8 of the Yandex Mobile Ads SDK introduces multiple API changes aimed at improving the developer experience.

Key changes

1. Changes to AdRequest

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

Class

Status

AdRequestConfiguration

Removed. Use AdRequest

NativeAdRequestConfiguration

Removed. Use AdRequest and NativeAdOptions.

Examples

SDK 7

// 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>(BannerAdView)
bannerView.setAdUnitId("R-M-XXXXX-YY")
val request = AdRequest.Builder().build()
bannerView.loadAd(request)

SDK 8

// 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>(BannerAdView)
val request = AdRequest.Builder("R-M-XXXXX-YY").build()
bannerView.loadAd(request)

SDK 7

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);
}

SDK 8

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 = new AdRequest.Builder("R-M-XXXXX-YY").build();
    bannerView.loadAd(request);
}

2. Changes to the Targeting API

  • The fields age, gender, location, contextQuery, and contextTags have been removed from AdRequest.Builder.
  • To manage the targeting parameters, use the new AdTargeting class.

Class

Status

AdTargeting

Added

AdTargeting.Builder

Added

Class

Method

Status

AdRequest.Builder

setAge(String)

Removed. Use AdTargeting.Builder.setAge(String) and AdRequest.Builder.setTargeting(AdTargeting).

setGender(String)

Removed. Use AdTargeting.Builder.setGender(String) and AdRequest.Builder.setTargeting(AdTargeting).

setLocation(Location)

Removed. Use AdTargeting.Builder.setLocation(Location) and AdRequest.Builder.setTargeting(AdTargeting).

setContextQuery(String)

Removed. Use AdTargeting.Builder.setContextQuery(String) and AdRequest.Builder.setTargeting(AdTargeting).

setContextTags(List<String>)

Removed. Use AdTargeting.Builder.setContextTags(List<String>) and AdRequest.Builder.setTargeting(AdTargeting).

setTargeting(AdTargeting)

Added

AdTargeting.Builder

setAge(String)

Added

setGender(String)

Added

setLocation(Location)

Added

setContextQuery(String)

Added

setContextTags(List<String>)

Added

Examples

SDK 7

val adRequest = AdRequest.Builder()
    .setAge("25")
    .setGender(Gender.MALE)
    .setContextTags(listOf("news"))
    .build()

SDK 8

val targeting = AdTargeting.Builder()
    .setAge("25")
    .setGender(Gender.MALE)
    .setContextTags(listOf("news"))
    .build()

val adRequest = AdRequest.Builder(adUnitId)
    .setTargeting(targeting)
    .build()

SDK 7

void loadAd() {
    AdRequest adRequest = AdRequest.Builder()
            .setAge("25")
            .setGender(Gender.MALE)
            .setContextTags(listOf("news"))
            .build();
}

SDK 8

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 the ad loading API

The methods for registering callback and ad load listeners have been updated.

Class

Method

Status

InterstitialAdLoader

setAdLoadListener(InterstitialAdLoadListener)

Removed. Pass InterstitialAdLoadListener to the loadAd method.

loadAd(AdRequestConfiguration)

Removed. Use loadAd(AdRequest, InterstitialAdLoadListener).

loadAd(AdRequest, InterstitialAdLoadListener)

Added

RewardedAdLoader

setAdLoadListener(RewardedAdLoadListener)

Removed. Pass RewardedAdLoadListener to the loadAd method.

loadAd(AdRequestConfiguration)

Removed. Use loadAd(AdRequest, RewardedAdLoadListener).

loadAd(AdRequest, RewardedAdLoadListener)

Added

AppOpenAdLoader

setAdLoadListener(AppOpenAdLoadListener)

Removed. Pass the AppOpenAdLoadListener to the loadAd method.

loadAd(AdRequestConfiguration)

Removed. Use loadAd(AdRequest, AppOpenAdLoadListener).

loadAd(AdRequest, AppOpenAdLoadListener)

Added

NativeAdLoader

setNativeAdLoadListener(NativeAdLoadListener)

Removed. Pass NativeAdLoadListener to the loadAd method.

loadAd(NativeAdRequestConfiguration)

Removed. Use loadAd(AdRequest, NativeAdLoadListener).

loadAd(AdRequest, NativeAdOptions, NativeAdLoadListener)

Added

loadAd(AdRequest, NativeAdLoadListener)

Added

SliderAdLoader

setSliderAdLoadListener(SliderAdLoadListener)

Removed. Pass SliderAdLoadListener to the loadAd method.

loadSlider(NativeAdRequestConfiguration)

Removed. Use loadAd(AdRequest, SliderAdLoadListener).

loadSlider(AdRequest, NativeAdOptions, SliderAdLoadListener)

Added

loadAd(AdRequest, NativeAdLoadListener)

Added

NativeBulkAdLoader

setNativeBulkAdLoadListener(NativeBulkAdLoadListener)

Removed. Pass NativeBulkAdLoadListener to the loadAd method.

loadAds(NativeAdRequestConfiguration, Int)

Removed. Use loadAd(AdRequest, NativeAdLoadListener).

loadAds(AdRequest, NativeAdOptions, NativeBulkAdLoadListener)

Added

loadAds(AdRequest, NativeBulkAdLoadListener)

Added

Examples

SDK 7

// 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)

SDK 8

// 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 { /* ... */ }
)

SDK 7

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);
}

SDK 8

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 Support for Kotlin Coroutines

The API now includes suspend overloads for ad loading methods:

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

suspend fun loadAd(AdRequest): NativeAdLoadResult

Added

SliderAdLoader

suspend fun loadAd(AdRequest): SliderAdLoadResult

Added

suspend fun loadAd(AdRequest, NativeAdOptions): SliderAdLoadResult

Added

NativeBulkAdLoader

suspend fun loadAds(AdRequest, Int): NativeBulkAdLoadResult

Added

suspend fun loadAds(AdRequest, Int, NativeAdOptions): NativeBulkAdLoadResult

Added

Examples

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 the Banner API

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

Class

Method

Status

BannerAdView

setAdUnitId(String)

Removed. Pass the adUnitId property to the AdRequest builder before loading an ad.

BannerAdSize

stickySize

Removed. Use BannerAdSize.sticky.

inlineSize

Removed. Use BannerAdSize.inline.

Examples

SDK 7

val banner = findViewById<R.id.banner>(BannerAdView)
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())

SDK 8

val banner = findViewById<R.id.banner>(BannerAdView)
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())

SDK 7

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());
}

SDK 8

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 the AdInfo API

We've changed the methods for retrieving data on ad creatives to properties and removed additional information:

Class

Method/Field

Status

BannerAdView, InsterstitialAd, RewardedAd, AppOpenAd, NativeAd

info

Removed. Use adInfo

adAttributes

Removed. Use adInfo

NativeAd

creativeId

Removed. Use Creative.creativeId.

campaignId

Removed. Use Creative.campaignId.

AdInfo

data

Removed

adSize

Removed

creatives

Added

extraData

Added

partnerText

Added

Creative

placeId

Added

offerId

Added

Examples

SDK 7

// 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

SDK 8

// 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

SDK 7

// 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();

SDK 8

// 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 the Native Ads API

  • The NativeAd.bindNativeAd and SliderAd.bindSliderAd() methods now return AdBindingResult and no longer throw exceptions.
  • The warning field type has been changed from String? to NativeAdWarning?. To comply with the Federal Law "On Advertising", apart from the warning asset's content, the new class also contains the warning asset's minimum required size as a percentage of the total ad area.
  • The NativeAdMedia class now contains the hasVideo field to indicate whether the selected ad includes a video creative.

Class

Status

AdBindingResult

Added

NativeAdWarning

Added

Class

Method/Field

Status

NativeAd

bindNativeAd

The method now returns an AdBindingResult value. It no longer throws exceptions.

SliderAd

bindSliderAd

The method now returns an AdBindingResult value. It no longer throws exceptions.

NativeAdAssets

warning

Type changed: String -> NativeAdWarning

NativeAdWarning

value

Added

minimumRequiredArea

Added

NativeAdMedia

hasVideo

Added

Examples

SDK 7

val warning = nativeAd.adAssets.warning
try {
    nativeAd.bindNativeAd(binder)
} catch (e: NativeAdException) {
    val message = e.message
}

SDK 8

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
}

SDK 7

void bindAd(NativeAd nativeAd) {
    String warning = nativeAd.getAdAssets().getWarning();
    try {
        nativeAd.bindNativeAd(binder);
    } catch (NativeAdException e) {
        String message = e.getMessage();
    }
}

SDK 8

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 API for native ad templates

Tools for native ad integration via templates have been removed. Use standard native ad assets for integration.

Class

Status

NativeBannerView

Removed

SizeConstraint

HorizontalOffset

NativeTemplateAppearance

TextAppearance

BannerAppearance

ButtonAppearance

RatingAppearance

7. Some callback methods for ad objects were removed

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

Class

Status

ClosableBannerAdEventListener

Removed

ClosableNativeAdEventListener

Removed

Class

Method

Status

BannerAdEventListener, NativeAdEventListener

onLeftApplication

Removed

onReturnToApplication

Removed

Examples

SDK 7

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() { /* ... */ }
})

SDK 8

// 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?) { /* ... */ }
})

SDK 7

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) { /* ... */ }
        }
    );
}

SDK 8

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.
  • We've also renamed some methods for configuring privacy settings.

Class

Status

YandexAds

Added

MobileAds

Removed. Use YandexAds.

Class

Method

Status

MobileAds

setAgeRestrictedUser(Boolean)

Removed. Use YandexAds.setAgeRestricted(Boolean).

setLocationConsent(Boolean)

Removed. Use YandexAds.setLocationTracking(Boolean).

YandexAds

setAgeRestricted(Boolean)

Added

setLocationTracking(Boolean)

Added

Examples

SDK 7

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

SDK 8

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

SDK 7

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);
}

SDK 8

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 the InStream API

1. Changes to the packages and dependency structure

Core 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 with com.yandex.mobile.ads.instream.adbreak.InstreamAdBreak

Examples

SDK 7

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

SDK 8

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

SDK 7

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;

SDK 8

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

SDK 7

val loader = InstreamAdLoader(this)
val config = InstreamAdRequestConfiguration.Builder("XXXXXX").build()
loader.loadInstreamAd(this, config)

SDK 8

val loader = InstreamAdLoader(this)
val config = InstreamAdRequest.Builder("XXXXXX").build()
loader.loadInstreamAd(this, config)

SDK 7

void loadAd() {
    InstreamAdLoader loader = new InstreamAdLoader(this);
    InstreamAdRequestConfiguration config = new InstreamAdRequestConfiguration.Builder("XXXXXX").build();
    loader.loadInstreamAd(this, config);
}

SDK 8

void loadAd() {
    InstreamAdLoader loader = new InstreamAdLoader(this);
    InstreamAdRequest config = new InstreamAdRequest.Builder("XXXXXX").build();
    loader.loadInstreamAd(this, config);
}

3. Changes to the ad loading API

  • The methods for registering callback and ad load listeners have been updated.
  • The API now includes the InstreamAdBreakLoader class for loading ad breaks.
  • The onInstreamAdFailedToLoad method signature has changed: an InstreamAdRequestError object is now passed instead of a reason string.

Class

Status

InstreamAdBreakLoadListener

Added

InstreamAdBreakLoader

Added

Class

Method

Status

InstreamAdLoader

setInstreamAdLoadListener(InstreamAdLoadListener)

Removed. Pass InstreamAdLoadListener to the loadAd method.

loadAd(InstreamAdRequestConfiguration)

Removed. Pass InstreamAdLoadListener to the loadAd method.

loadAd(InstreamAdRequest, InstreamAdLoadListener)

Removed. Pass InstreamAdLoadListener to the loadAd method.

InstreamAdLoadListener

onInstreamAdFailedToLoad(String)

Removed. Use onInstreamAdFailedToLoad(InstreamAdRequestError).

onInstreamAdFailedToLoad(InstreamAdRequestError)

Added

InstreamAdBreakLoader

loadAd(InstreamAdBreakRequest, InstreamAdBreakLoadListener)

Added

Examples

SDK 7

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)

SDK 8

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}")
    }
})

SDK 7

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);
}

SDK 8

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 Support for Kotlin Coroutines

We've added suspend overloads for ad loading methods to InstreamAdLoader and InstreamAdBreakAdLoader.

Class

Method

Status

InstreamAdLoader

suspend fun loadAd(InstreamAdRequest): InstreamAdLoadResult

Added

InstreamAdBreakLoader

suspend fun loadAd(InstreamAdBreakRequest): InstreamAdBreakLoadResult

Added

For example:

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. Using in-roll and pause-roll

  • The logic for managing ad breaks has become more flexible.
  • The specialized queue providers, InrollQueueProvider and PauserollQueueProvider, have been removed. Ad breaks are now accessible directly from the InstreamAd object and can be filtered by type.

If you're using automatic rendering via InstreamAdBinder, select only INROLL and PAUSEROLL ad breaks 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

SDK 7

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

// 2. Prepare specific ad break
val currentInroll = instreamAdBreakQueue.poll()
currentInroll?.setListener(object : InstreamAdBreakEventListener {
    override fun onInstreamAdBreakPrepared() {
        // 3. Show prepared ad break
        currentInroll.play(instreamAdView)
    }
    // ... other listener methods
})
currentInroll?.prepare(instreamAdPlayer)

SDK 8

// 1. Get list of all ad 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 prepared ad break
        currentInroll.play(instreamAdView)
    }
})
currentInroll?.prepare(instreamAdPlayer)

SDK 7

void loadAdBreak() {
// 1. Get In-roll queue from loaded ad
    InrollQueueProvider inrollQueueProvider = new InrollQueueProvider(context, instreamAd);
    Queue<Inroll> instreamAdBreakQueue = inrollQueueProvider.getQueue();

// 2. Prepare specific ad break
    Inroll currentInroll = instreamAdBreakQueue.poll();
    if (currentInroll != null) {
        currentInroll.setListener(new InstreamAdBreakEventListener() {
            @Override
            public void onInstreamAdBreakPrepared() {
                // 3. Show prepared ad break
                currentInroll.play(instreamAdView);
            }
            // ... other listener methods
        });
        currentInroll.prepare(instreamAdPlayer);
    }
}

SDK 8

void loadAdBreak() {
    // 1. Get list of all ad 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 prepared ad break
                currentInroll.play(instreamAdView);
            }
        });
        currentInroll.prepare(instreamAdPlayer);
    }
}

5. Default player

Passing player info for video rendering is now optional. If null is passed, the SDK takes full control over video rendering.

Class

Method

Status

InstreamAdBinder

Builder

The instreamAdPlayer parameter is now optional and can be set to null.

InstreamAdBreak

prepare(instreamAdPlayer)

Removed. Use prepare() with no parameter.

prepare()

Added

Examples

SDK 7

// Automatic launch (InstreamAdBinder)
val instreamAdBinder = InstreamAdBinder(
    context,
    instreamAd,
    instreamAdPlayer, // Player was required
    contentPlayer
)

// Manual launch (InstreamAdBreak)
val adBreak: InstreamAdBreak
adBreak.prepare(instreamAdPlayer)

SDK 8

// Automatic launch (InstreamAdBinder)
// Default ad player is used when the parameter is omitted
val instreamAdBinder = InstreamAdBinder(
    context,
    instreamAd,
    contentPlayer
)

// Manual launch (InstreamAdBreak)
val adBreak: InstreamAdBreak
adBreak.prepare()

SDK 7

void showAd() {
    // Automatic launch (InstreamAdBinder)
    InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
            context,
            instreamAd,
            instreamAdPlayer, // Player was required
            contentPlayer
    );

    // Manual launch (InstreamAdBreak)
    InstreamAdBreak adBreak;
    adBreak.prepare(instreamAdPlayer);
}

SDK 8

void showAd() {
    // Automatic launch (InstreamAdBinder)
    // Default ad player is used when the parameter is omitted
    InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
            context,
            instreamAd,
            contentPlayer
    );

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

6. Changes to the InstreamAdPlayer interface

The InstreamAdPlayer interface has been updated to include the supportedMimeTypes property for optimized video format selection and the bindPlayerView method for correct positioning of ad elements on top of a video.

Class

Method

Status

InstreamAdPlayer

supportedMimeTypes: List<String>

Added. Allows the SDK to select the most suitable video format, such as DASH instead of MP4.

bindPlayerView(container: FrameLayout)

Added. The videoPlayerView must be placed inside the provided container and set to fill the entire space.

Examples

SDK 7

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

SDK 8

class InstreamAdPlayerImpl : InstreamAdPlayer {

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

    // 2. The videoPlayerView must be placed inside the container and set to fill the entire space
    override fun bindPlayerView(container: FrameLayout) {
        container.addView(playerView)
    }

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

SDK 7

public class InstreamAdPlayerImpl implements InstreamAdPlayer {
    // ... methods (prepareAd, playAd, pauseAd, etc.)
}

SDK 8

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. The videoPlayerView must be placed inside the container and set to fill the entire space
    @Override
    public void bindPlayerView(FrameLayout container) {
        container.addView(playerView);
    }

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

Changes to the mediation networks API.

1. New API for passing mediation network data

Identification of mediation adapters is now part of a separate method.

Class

Status

AdapterIdentity

Added

Class

Method

Status

YandexAds

setAdapterIdentity(AdapterIdentity)

Added. Call this method before calling YandexAds.initialize instead of passing adapter data as additional parameters in ad requests.

Examples

SDK 7

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)

SDK 8

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)

SDK 7

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);
}

SDK 8

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. Renaming and simplifying the BidderTokenRequest class

  • The BidderTokenLoader class now has a builder, and the loadBidderToken static method is now an instance method.
  • The BidderTokenRequestConfiguration class has been renamed to BidderTokenRequest and updated.
  • To create an instance, use the banner, interstitial, rewarded, appOpenAd, and native factory methods instead of Builder(AdType).

Class

Status

BidderTokenRequestConfiguration

Removed. Use BidderTokenRequest.

BidderTokenRequestConfiguration.Builder

Removed. Use factory methods in BidderTokenRequest.

BidderTokenRequest

Added

Class

Builder/Method

Status

BidderTokenLoader

BidderTokenLoader(Context)

Now has a builder

loadBidderToken

Updated. The static method is now an instance method of the BidderTokenLoader class.

BidderTokenRequestConfiguration.Builder

setBannerAdSize(BannerAdSize)

Removed. Pass BannerAdSize to the BidderTokenRequest.banner(BannerAdSize) method parameters.

setParameters(Map<String, String>)

Removed. Pass parameters to the arguments of factory methods.

BidderTokenRequest

banner(BannerAdSize)

Added

banner(BannerAdSize, AdTargeting)

Added

banner(BannerAdSize, AdTargeting, Map<String, String>)

Added

interstitial()

Added

interstitial(AdTargeting)

Added

interstitial(AdTargeting, Map<String, String>)

Added

rewarded()

Added

rewarded(AdTargeting)

Added

rewarded(AdTargeting, Map<String, String>)

Added

appOpenAd()

Added

appOpenAd(AdTargeting)

Added

appOpenAd(AdTargeting, Map<String, String>)

Added

native()

Added

native(AdTargeting)

Added

native(AdTargeting, Map<String, String>)

Added

Examples

SDK 7

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() { /* ... */ }
    );
}

SDK 8

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

We've added support for integration via Jetpack Compose. See the Jetpack Compose section at the end of the Android documentation menu:

Integration examples:

Requirements

  • Gradle: 7.0 or later
  • Android Gradle plugin: 8.3.2 or later
  • Android SDK: 21 (Android 5.0) or later
  • Kotlin: 1.9.0 or later
  • Java: 8 or later