Руководство по миграции на версию 8.0.0 (beta)

Новая 8-я версия Yandex Mobile Ads SDK вносит в API ряд изменений, направленных на улучшение пользовательского опыта разработчиков.

Основные изменения

1. Изменения в AdRequest

Классы AdRequestConfiguration и NativeAdRequestConfiguration удалены. Используйте AdRequest для всех типов рекламы.

Класс

Статус

AdRequestConfiguration

Удален. Используйте AdRequest

NativeAdRequestConfiguration

Удален. Используйте AdRequest и NativeAdOptions

Примеры

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. Изменения в Targeting API

  • Поля age, gender, location, contextQuery и contextTags удалены из AdRequest.Builder.
  • Для управления параметрами таргетинга используйте новый класс AdTargeting.

Класс

Статус

AdTargeting

Добавлен

AdTargeting.Builder

Добавлен

Класс

Метод

Статус

AdRequest.Builder

setAge(String)

Удален, используйте AdTargeting.Builder.setAge(String) и AdRequest.Builder.setTargeting(AdTargeting)

setGender(String)

Удален, используйте AdTargeting.Builder.setGender(String) и AdRequest.Builder.setTargeting(AdTargeting)

setLocation(Location)

Удален, используйте AdTargeting.Builder.setLocation(Location) и AdRequest.Builder.setTargeting(AdTargeting)

setContextQuery(String)

Удален, используйте AdTargeting.Builder.setContextQuery(String) и AdRequest.Builder.setTargeting(AdTargeting)

setContextTags(List<String>)

Удален, используйте AdTargeting.Builder.setContextTags(List<String>) и AdRequest.Builder.setTargeting(AdTargeting)

setTargeting(AdTargeting)

Добавлен

AdTargeting.Builder

setAge(String)

Добавлен

setGender(String)

Добавлен

setLocation(Location)

Добавлен

setContextQuery(String)

Добавлен

setContextTags(List<String>)

Добавлен

Примеры

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. Изменения в API загрузки рекламы

Изменены методы для регистрации слушателей обратного вызова и загрузки рекламы.

Класс

Метод

Статус

InterstitialAdLoader

setAdLoadListener(InterstitialAdLoadListener)

Удален. Передавайте InterstitialAdLoadListener в параметрах метода loadAd.

loadAd(AdRequestConfiguration)

Удален. Используйте loadAd(AdRequest, InterstitialAdLoadListener).

loadAd(AdRequest, InterstitialAdLoadListener)

Добавлен

RewardedAdLoader

setAdLoadListener(RewardedAdLoadListener)

Удален. Передавайте RewardedAdLoadListener в параметрах метода loadAd.

loadAd(AdRequestConfiguration)

Удален. Используйте loadAd(AdRequest, RewardedAdLoadListener)

loadAd(AdRequest, RewardedAdLoadListener)

Добавлен

AppOpenAdLoader

setAdLoadListener(AppOpenAdLoadListener)

Удален. Передавайте AppOpenAdLoadListener в параметрах метода loadAd.

loadAd(AdRequestConfiguration)

Удален. Используйте loadAd(AdRequest, AppOpenAdLoadListener)

loadAd(AdRequest, AppOpenAdLoadListener)

Добавлен

NativeAdLoader

setNativeAdLoadListener(NativeAdLoadListener)

Удален. Передавайте NativeAdLoadListener в параметрах метода loadAd.

loadAd(NativeAdRequestConfiguration)

Удален. Используйте loadAd(AdRequest, NativeAdLoadListener).

loadAd(AdRequest, NativeAdOptions, NativeAdLoadListener)

Добавлен

loadAd(AdRequest, NativeAdLoadListener)

Добавлен

SliderAdLoader

setSliderAdLoadListener(SliderAdLoadListener)

Удален. Передавайте SliderAdLoadListener в параметрах метода loadAd.

loadSlider(NativeAdRequestConfiguration)

Удален. Используйте loadAd(AdRequest, SliderAdLoadListener).

loadSlider(AdRequest, NativeAdOptions, SliderAdLoadListener)

Добавлен

loadAd(AdRequest, NativeAdLoadListener)

Добавлен

NativeBulkAdLoader

setNativeBulkAdLoadListener(NativeBulkAdLoadListener)

Удален. Передавайте NativeBulkAdLoadListener в параметрах метода loadAd.

loadAds(NativeAdRequestConfiguration, Int)

Удален. Используйте loadAd(AdRequest, NativeAdLoadListener).

loadAds(AdRequest, NativeAdOptions, NativeBulkAdLoadListener)

Добавлен

loadAds(AdRequest, NativeBulkAdLoadListener)

Добавлен

Примеры

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 Поддержка Kotlin Coroutines

В API добавлены suspend перегрузки методов для загрузки рекламы:

Класс

Метод

Статус

InterstitialAdLoader

suspend fun loadAd(AdRequest): InterstitialAdLoadResult

Добавлен

RewardedAdLoader

suspend fun loadAd(AdRequest): RewardedAdLoadResult

Добавлен

AppOpenAdLoader

suspend fun loadAd(AdRequest): AppOpenAdLoadResult

Добавлен

NativeAdLoader

suspend fun loadAd(AdRequest, NativeAdOptions): NativeAdLoadResult

Добавлен

suspend fun loadAd(AdRequest): NativeAdLoadResult

Добавлен

SliderAdLoader

suspend fun loadAd(AdRequest): SliderAdLoadResult

Добавлен

suspend fun loadAd(AdRequest, NativeAdOptions): SliderAdLoadResult

Добавлен

NativeBulkAdLoader

suspend fun loadAds(AdRequest, Int): NativeBulkAdLoadResult

Добавлен

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

Добавлен

Примеры

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. Изменения в Banner API

Из BannerAdView был удален метод setAdUnitId, теперь adUnitId устанавливается для каждой загрузки объявления. Фабричные методы для создания BannerAdSize были переименованы.

Класс

Метод

Статус

BannerAdView

setAdUnitId(String)

Удален. Передавайте adUnitId в конструктор AdRequest перед загрузкой объявления.

BannerAdSize

stickySize

Удален. Используйте BannerAdSize.sticky.

inlineSize

Удален. Используйте BannerAdSize.inline.

Примеры

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. Изменения в AdInfo API

Методы получения информации о рекламных креативах изменены. с методов на свойства, удалена дополнительная информация:

Класс

Метод/Поле

Статус

BannerAdView, InsterstitialAd, RewardedAd, AppOpenAd, NativeAd

info

Удален. Используйте adInfo

adAttributes

Удален. Используйте adInfo

NativeAd

creativeId

Удален. используйте Creative.creativeId

campaignId

Удален. используйте Creative.campaignId

AdInfo

data

Удален

adSize

Удален

creatives

Добавлен

extraData

Добавлен

partnerText

Добавлен

Creative

placeId

Добавлен

offerId

Добавлен

Примеры

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. Изменения в Native Ads API

  • Методы NativeAd.bindNativeAd и SliderAd.bindSliderAd() теперь возвращают результат связывания AdBindingResult и больше не выбрасывают исключений.
  • Тип поля warning изменен с String? на NativeAdWarning?. Для соблюдения Закона о рекламе, в новом классе помимо содержимого ассета warning содержится также требуемый минимальный размер ассета warning в процентах от площади всего объявления.
  • В класс NativeAdMedia добавлено поле hasVideo указывающее наличие видео креатива в подобранной рекламе.

Класс

Статус

AdBindingResult

Добавлен

NativeAdWarning

Добавлен

Класс

Метод/Поле

Статус

NativeAd

bindNativeAd

Добавлено возвращаемое значение AdBindingResult. Метод больше не выбрасывает исключений.

SliderAd

bindSliderAd

Добавлено возвращаемое значение AdBindingResult. Метод больше не выбрасывает исключений.

NativeAdAssets

warning

Изменен тип: String -> NativeAdWarning

NativeAdWarning

value

Добавлен

minimumRequiredArea

Добавлен

NativeAdMedia

hasVideo

Добавлен

Примеры

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 Шаблонов нативной рекламы

Инструменты для интеграции нативной рекламы с помощью шаблонов были удалены. Используйте стандартные компоненты нативной рекламы для интеграции.

Класс

Статус

NativeBannerView

Удален

SizeConstraint

HorizontalOffset

NativeTemplateAppearance

TextAppearance

BannerAppearance

ButtonAppearance

RatingAppearance

7. Удаление некоторых методов обратного вызова рекламных объектах

  • Интерфейсы ClosableBannerAdEventListener и ClosableNativeAdEventListener удалены.
  • Методы onLeftApplication и onReturnToApplication удалены.

Класс

Статус

ClosableBannerAdEventListener

Удален

ClosableNativeAdEventListener

Удален

Класс

Метод

Статус

BannerAdEventListener, NativeAdEventListener

onLeftApplication

Удален

onReturnToApplication

Удален

Примеры

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. Изменения в основном классе SDK

  • Основной класс SDK переименован в YandexAds.
  • Переименованы некоторые методы для установки privacy настроек.

Класс

Статус

YandexAds

Добавлен

MobileAds

Удален. Используйте YandexAds

Класс

Метод

Статус

MobileAds

setAgeRestrictedUser(Boolean)

Удален. Используйте YandexAds.setAgeRestricted(Boolean).

setLocationConsent(Boolean)

Удален. Используйте YandexAds.setLocationTracking(Boolean).

YandexAds

setAgeRestricted(Boolean)

Добавлен

setLocationTracking(Boolean)

Добавлен

Примеры

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

Изменения в Instream API

1. Изменения в пакетах и структуре зависимостей

Основные классы переименованы для соответствия новой структуре SDK.

Класс

Статус

com.yandex.mobile.ads.instream.InstreamAdBinder

Перемещен в com.yandex.mobile.ads.instream.binder.InstreamAdBinder

com.yandex.mobile.ads.instream.InstreamAdRequestConfiguration

Переименован в com.yandex.mobile.ads.instream.InstreamAdRequest

com.yandex.mobile.ads.instream.InstreamAdBreak

Переименован в com.yandex.mobile.ads.instream.adbreak.AdBreakData

com.yandex.mobile.ads.instream.inroll.Inroll, com.yandex.mobile.ads.instream.pauseroll.Pauseroll

Заменены на 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

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. Изменения в AdRequest

Класс InstreamAdRequestConfiguration переименован в InstreamAdRequest.

Класс

Статус

InstreamAdRequestConfiguration

Удален. Используйте InstreamAdRequest

InstreamAdRequest

Добавлен

InstreamAdBreakRequest

Добавлен

Примеры

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. Изменения в API загрузки рекламы

  • Изменены методы для регистрации слушателей обратного вызова и загрузки рекламы.
  • Добавлен класс InstreamAdBreakLoader для загрузки рекламных вставок.
  • Изменена сигнатура метода onInstreamAdFailedToLoad: вместо строки reason теперь передается объект InstreamAdRequestError.

Класс

Статус

InstreamAdBreakLoadListener

Добавлен

InstreamAdBreakLoader

Добавлен

Класс

Метод

Статус

InstreamAdLoader

setInstreamAdLoadListener(InstreamAdLoadListener)

Удален. Передавайте InstreamAdLoadListener в параметрах метода loadAd.

loadAd(InstreamAdRequestConfiguration)

Удален. Передавайте InstreamAdLoadListener в параметрах метода loadAd.

loadAd(InstreamAdRequest, InstreamAdLoadListener)

Удален. Передавайте InstreamAdLoadListener в параметрах метода loadAd.

InstreamAdLoadListener

onInstreamAdFailedToLoad(String)

Удален. Используйте onInstreamAdFailedToLoad(InstreamAdRequestError).

onInstreamAdFailedToLoad(InstreamAdRequestError)

Добавлен

InstreamAdBreakLoader

loadAd(InstreamAdBreakRequest, InstreamAdBreakLoadListener)

Добавлен

Примеры

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. Поддержка Kotlin coroutines

В InstreamAdLoader и InstreamAdBreakAdLoader добавлены suspend перегрузки методов для загрузки рекламы.

Класс

Метод

Статус

InstreamAdLoader

suspend fun loadAd(InstreamAdRequest): InstreamAdLoadResult

Добавлен

InstreamAdBreakLoader

suspend fun loadAd(InstreamAdBreakRequest): InstreamAdBreakLoadResult

Добавлен

Пример

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. Работа с In-roll и Pause-roll

  • Логика управления рекламными вставками стала более гибкой.
  • Специализированные провайдеры очередей InrollQueueProvider и PauserollQueueProvider удалены — все вставки доступны напрямую из объекта InstreamAd и фильтруются по типу.

Если вы используете автоматическую отрисовку через InstreamAdBinder, выбирайте из коллекции instreamAdBreaks только вставки типов INROLL и PAUSEROLL.

Класс

Статус

InrollQueueProvider

Удален. Используйте instreamAd.instreamAdBreaks с фильтром по InstreamAdBreakType.INROLL

PauserollQueueProvider

Удален. Используйте instreamAd.instreamAdBreaks с фильтром по InstreamAdBreakType.PAUSEROLL

Примеры

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. Дефолтный плеер

Передача плеера для отрисовки видео теперь опциональна. При передаче null SDK берет на себя полный контроль за отрисовкой видео.

Класс

Метод

Статус

InstreamAdBinder

конструктор

Параметр instreamAdPlayer стал опциональным. Допустимо передать null

InstreamAdBreak

prepare(instreamAdPlayer)

Удален. Используйте prepare() без параметра

prepare()

Добавлен

Примеры

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)
val instreamAdBinder = InstreamAdBinder(
    context,
    instreamAd,
    null, // Pass null to use default player
    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)
    InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
            context,
            instreamAd,
            null, // Pass null to use default player
            contentPlayer
    );

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

6. Изменения в интерфейсе InstreamAdPlayer

Интерфейс InstreamAdPlayer обновлен: добавлено свойство supportedMimeTypes для оптимизации выбора видеоформата и метод bindPlayerView для корректного позиционирования рекламных элементов поверх видео.

Класс

Метод

Статус

InstreamAdPlayer

supportedMimeTypes: List<String>

Добавлен. Позволяет SDK выбрать наиболее подходящий видеоформат (например, DASH вместо MP4).

bindPlayerView(container: FrameLayout)

Добавлен. Необходимо разместить videoPlayerView внутри переданного контейнера на всё пространство.

Примеры

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. Place videoPlayerView inside container on 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. Place videoPlayerView inside container on the entire space
    @Override
    public void bindPlayerView(FrameLayout container) {
        container.addView(playerView);
    }

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

Изменения в API медиационных сетей.

1. Новое API для передачи данных о медиационной сети

Для медиационных адаптеров идентификация адаптера вынесена в отдельный метод.

Класс

Статус

AdapterIdentity

Добавлен

Класс

Метод

Статус

YandexAds

setAdapterIdentity(AdapterIdentity)

Добавлен. Вызывайте этот метод до YandexAds.initialize вместо передачи данных об адаптере в качестве дополнительных параметров к запросам за рекламой.

Примеры

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. Переименование и упрощение BidderTokenRequest

  • Класс BidderTokenLoader получил конструктор, метод loadBidderToken из статического стал методом экземпляра.
  • Класс BidderTokenRequestConfiguration переименован в BidderTokenRequest и изменен.
  • Для создания экземпляра вместо Builder(AdType) необходимо использовать фабричные методы banner, interstitial, rewarded, appOpenAd и native.

Класс

Статус

BidderTokenRequestConfiguration

Удален. Используйте BidderTokenRequest

BidderTokenRequestConfiguration.Builder

Удален. Используйте фабричные методы в BidderTokenRequest

BidderTokenRequest

Добавлен

Класс

Конструктор/Метод

Статус

BidderTokenLoader

BidderTokenLoader(Context)

Добавлен конструктор

loadBidderToken

Изменен. Из статического метод стал методом экземпляра класса BidderTokenLoader

BidderTokenRequestConfiguration.Builder

setBannerAdSize(BannerAdSize)

Удален. Передавайте BannerAdSize в аргументах метода BidderTokenRequest.banner(BannerAdSize)

setParameters(Map<String, String>)

Удален. Передавайте параметры в аргументы фабричных методов

BidderTokenRequest

banner(BannerAdSize)

Добавлен

banner(BannerAdSize, AdTargeting)

Добавлен

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

Добавлен

interstitial()

Добавлен

interstitial(AdTargeting)

Добавлен

interstitial(AdTargeting, Map<String, String>)

Добавлен

rewarded()

Добавлен

rewarded(AdTargeting)

Добавлен

rewarded(AdTargeting, Map<String, String>)

Добавлен

appOpenAd()

Добавлен

appOpenAd(AdTargeting)

Добавлен

appOpenAd(AdTargeting, Map<String, String>)

Добавлен

native()

Добавлен

native(AdTargeting)

Добавлен

native(AdTargeting, Map<String, String>)

Добавлен

Примеры

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 интеграция

Поддержана интеграция через Jetpack Compose. См. раздел Jetpack Compose в конце меню документации Android:

Примеры интеграции:

Требования

  • Gradle: 7.0 и выше
  • Android gradle plugin: 8.3.2 и выше
  • Android SDK: 21 (Android 5.0) и выше
  • Kotlin: 1.9.0 и выше
  • Java: 8 и выше