Руководство по миграции на версию 8.0.0 (beta)
Новая 8-я версия Yandex Mobile Ads SDK вносит в API ряд изменений, направленных на улучшение пользовательского опыта разработчиков.
Основные изменения
1. Изменения в AdRequest
Классы AdRequestConfiguration и NativeAdRequestConfiguration удалены. Используйте AdRequest для всех типов рекламы.
|
Класс
|
Статус
|
|
AdRequestConfiguration
|
Удален. Используйте AdRequest
|
|
NativeAdRequestConfiguration
|
Удален. Используйте AdRequest и NativeAdOptions
|
Примеры
|
SDK 7
|
val loader = InterstitialAdLoader(this)
val config = AdRequestConfiguration.Builder("R-M-XXXXX-YY").build()
loader.loadAd(config)
val bannerView = findViewById<R.id.view_banner>(BannerAdView)
bannerView.setAdUnitId("R-M-XXXXX-YY")
val request = AdRequest.Builder().build()
bannerView.loadAd(request)
|
|
SDK 8
|
val loader = InterstitialAdLoader(this)
val request = AdRequest.Builder("R-M-XXXXX-YY").build()
loader.loadAd(adRequest, listener)
val bannerView = findViewById<R.id.view_banner>(BannerAdView)
val request = AdRequest.Builder("R-M-XXXXX-YY").build()
bannerView.loadAd(request)
|
|
SDK 7
|
void loadAd() {
InterstitialAdLoader loader = new InterstitialAdLoader(this);
AdRequestConfiguration config = new AdRequestConfiguration.Builder("R-M-XXXXX-YY")
.build();
loader.loadAd(config);
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() {
InterstitialAdLoader loader = new InterstitialAdLoader(this);
AdRequest request = new AdRequest.Builder("R-M-XXXXX-YY")
.build();
loader.loadAd(request, listener);
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
|
val interstitialAdLoader = InterstitialAdLoader(this)
interstitialAdLoader.setAdLoadListener(object : InterstitialAdLoadListener { })
interstitialAdLoader.loadAd(AdRequestConfiguration.Builder("R-M-XXXXX-YY").build())
val rewardedAdLoader = RewardedAdLoader(this)
rewardedAdLoader.setAdLoadListener(object : RewardedAdLoadListener { })
rewardedAdLoader.loadAd(AdRequestConfiguration.Builder("R-M-XXXXX-YY").build())
val appOpenAdLoader = AppOpenAdLoader(this)
appOpenAdLoader.setAdLoadListener(object : AppOpenAdLoadListener { })
appOpenAdLoader.loadAd(AdRequestConfiguration.Builder("R-M-XXXXX-YY").build())
val nativeAdLoader = NativeAdLoader(this)
nativeAdLoader.setNativeAdLoadListener(object : NativeAdLoadListener { })
nativeAdLoader.loadAd(NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build())
val sliderAdLoader = SliderAdLoader(this)
sliderAdLoader.setSliderAdLoadListener(object : SliderAdLoadListener { })
sliderAdLoader.loadSlider(NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build())
val nativeBulkAdLoader = NativeBulkAdLoader(this)
nativeBulkAdLoader.setNativeBulkAdLoadListener(object : NativeBulkAdLoadListener { })
nativeBulkAdLoader.loadAds(NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build(), 1)
|
|
SDK 8
|
val interstitialAdLoader = InterstitialAdLoader(this)
interstitialAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : InterstitialAdLoadListener { })
val rewardedAdLoader = RewardedAdLoader(this)
rewardedAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : RewardedAdLoadListener { })
val appOpenAdLoader = AppOpenAdLoader(this)
appOpenAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : AppOpenAdLoadListener { })
val nativeAdLoader = NativeAdLoader(this)
nativeAdLoader.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build(), object : NativeAdLoadListener { })
nativeAdLoader.loadAd(
AdRequest.Builder("R-M-XXXXX-YY").build(),
NativeAdOptions.Builder().build(),
object : NativeAdLoadListener { })
val sliderAdLoader = SliderAdLoader(this)
sliderAdLoader.loadSlider(AdRequest.Builder("R-M-XXXXX-YY").build(), object : SliderAdLoadListener { })
sliderAdLoader.loadSlider(
AdRequest.Builder("R-M-XXXXX-YY").build(),
NativeAdOptions.Builder().build(),
object : SliderAdLoadListener { })
val nativeBulkAdLoader = NativeBulkAdLoader(this)
nativeBulkAdLoader.loadAds(
AdRequest.Builder("R-M-XXXXX-YY").build(),
1,
object : NativeBulkAdLoadListener { }
)
nativeBulkAdLoader.loadAds(
AdRequest.Builder("R-M-XXXXX-YY").build(),
1,
NativeAdOptions.Builder().build(),
object : NativeBulkAdLoadListener { }
)
|
|
SDK 7
|
void loadAd() {
InterstitialAdLoader interstitialAdLoader = new InterstitialAdLoader(this);
interstitialAdLoader.setAdLoadListener(new InterstitialAdLoadListener() { });
interstitialAdLoader.loadAd(new AdRequestConfiguration.Builder("R-M-XXXXX-YY").build());
RewardedAdLoader rewardedAdLoader = new RewardedAdLoader(this);
rewardedAdLoader.setAdLoadListener(new RewardedAdLoadListener() { });
rewardedAdLoader.loadAd(new AdRequestConfiguration.Builder("R-M-XXXXX-YY").build());
AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(this);
appOpenAdLoader.setAdLoadListener(new AppOpenAdLoadListener() { });
appOpenAdLoader.loadAd(new AdRequestConfiguration.Builder("R-M-XXXXX-YY").build());
NativeAdLoader nativeAdLoader = new NativeAdLoader(this);
nativeAdLoader.setNativeAdLoadListener(new NativeAdLoadListener() { });
nativeAdLoader.loadAd(new NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build());
SliderAdLoader sliderAdLoader = new SliderAdLoader(this);
sliderAdLoader.setSliderAdLoadListener(new SliderAdLoadListener() { });
sliderAdLoader.loadSlider(new NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build());
NativeBulkAdLoader nativeBulkAdLoader = new NativeBulkAdLoader(this);
nativeBulkAdLoader.setNativeBulkAdLoadListener(new NativeBulkAdLoadListener() { });
nativeBulkAdLoader.loadAds(new NativeAdRequestConfiguration.Builder("R-M-XXXXX-YY").build(), 1);
}
|
|
SDK 8
|
void loadAd() {
InterstitialAdLoader interstitialAdLoader = new InterstitialAdLoader(this);
interstitialAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
new InterstitialAdLoadListener() { }
);
RewardedAdLoader rewardedAdLoader = new RewardedAdLoader(this);
rewardedAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
new RewardedAdLoadListener() { }
);
AppOpenAdLoader appOpenAdLoader = new AppOpenAdLoader(this);
appOpenAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
new AppOpenAdLoadListener() { }
);
NativeAdLoader nativeAdLoader = new NativeAdLoader(this);
nativeAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
new NativeAdLoadListener() { }
);
nativeAdLoader.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build(),
new NativeAdOptions.Builder().build(),
new NativeAdLoadListener() { }
);
SliderAdLoader sliderAdLoader = new SliderAdLoader(this);
sliderAdLoader.loadSlider(new AdRequest.Builder("R-M-XXXXX-YY").build(),
new SliderAdLoadListener() { }
);
sliderAdLoader.loadSlider(new AdRequest.Builder("R-M-XXXXX-YY").build(),
new NativeAdOptions.Builder().build(),
new SliderAdLoadListener() { }
);
NativeBulkAdLoader nativeBulkAdLoader = new NativeBulkAdLoader(this);
nativeBulkAdLoader.loadAds(new AdRequest.Builder("R-M-XXXXX-YY").build(),
1,
new NativeBulkAdLoadListener() { }
);
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 {
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}")
}
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}")
}
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}")
}
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}")
}
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}")
}
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}")
}
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}")
}
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}")
}
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
|
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
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
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
|
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
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
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
|
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();
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();
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
|
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();
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();
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
|
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) {
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
|
val inrollQueueProvider = InrollQueueProvider(context, instreamAd)
val instreamAdBreakQueue = inrollQueueProvider.queue
val currentInroll = instreamAdBreakQueue.poll()
currentInroll?.setListener(object : InstreamAdBreakEventListener {
override fun onInstreamAdBreakPrepared() {
currentInroll.play(instreamAdView)
}
})
currentInroll?.prepare(instreamAdPlayer)
|
|
SDK 8
|
val inrolls = instreamAd.instreamAdBreaks.filter {
it.adBreakData.type == InstreamAdBreakType.INROLL
}
val inrollIndex = 0
val currentInroll = inrolls.getOrNull(inrollIndex)
currentInroll?.setListener(object : InstreamAdBreakEventListener {
override fun onInstreamAdBreakPrepared() {
currentInroll.play(instreamAdView)
}
})
currentInroll?.prepare(instreamAdPlayer)
|
|
SDK 7
|
void loadAdBreak() {
InrollQueueProvider inrollQueueProvider = new InrollQueueProvider(context, instreamAd);
Queue<Inroll> instreamAdBreakQueue = inrollQueueProvider.getQueue();
Inroll currentInroll = instreamAdBreakQueue.poll();
if (currentInroll != null) {
currentInroll.setListener(new InstreamAdBreakEventListener() {
@Override
public void onInstreamAdBreakPrepared() {
currentInroll.play(instreamAdView);
}
});
currentInroll.prepare(instreamAdPlayer);
}
}
|
|
SDK 8
|
void loadAdBreak() {
List<InstreamAdBreak> inrolls = new ArrayList<>();
for (InstreamAdBreak adBreak : instreamAd.getInstreamAdBreaks()) {
if (adBreak.getAdBreakData().getType() == InstreamAdBreakType.INROLL) {
inrolls.add(adBreak);
}
}
int inrollIndex = 0;
InstreamAdBreak currentInroll = inrollIndex < inrolls.size() ? inrolls.get(inrollIndex) : null;
if (currentInroll != null) {
currentInroll.setListener(new InstreamAdBreakEventListener() {
@Override
public void onInstreamAdBreakPrepared() {
currentInroll.play(instreamAdView);
}
});
currentInroll.prepare(instreamAdPlayer);
}
}
|
5. Дефолтный плеер
Передача плеера для отрисовки видео теперь опциональна. При передаче null SDK берет на себя полный контроль за отрисовкой видео.
|
Класс
|
Метод
|
Статус
|
|
InstreamAdBinder
|
конструктор
|
Параметр instreamAdPlayer стал опциональным. Допустимо передать null
|
|
InstreamAdBreak
|
prepare(instreamAdPlayer)
|
Удален. Используйте prepare() без параметра
|
|
prepare()
|
Добавлен
|
Примеры
|
SDK 7
|
val instreamAdBinder = InstreamAdBinder(
context,
instreamAd,
instreamAdPlayer,
contentPlayer
)
val adBreak: InstreamAdBreak
adBreak.prepare(instreamAdPlayer)
|
|
SDK 8
|
val instreamAdBinder = InstreamAdBinder(
context,
instreamAd,
null,
contentPlayer
)
val adBreak: InstreamAdBreak
adBreak.prepare()
|
|
SDK 7
|
void showAd() {
InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
context,
instreamAd,
instreamAdPlayer,
contentPlayer
);
InstreamAdBreak adBreak;
adBreak.prepare(instreamAdPlayer);
}
|
|
SDK 8
|
void showAd() {
InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
context,
instreamAd,
null,
contentPlayer
);
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 {
}
|
|
SDK 8
|
class InstreamAdPlayerImpl : InstreamAdPlayer {
override val supportedMimeTypes: List<String>
get() = listOf(InstreamAdMimeTypes.MP4, InstreamAdMimeTypes.WEBM)
override fun bindPlayerView(container: FrameLayout) {
container.addView(playerView)
}
}
|
|
SDK 7
|
public class InstreamAdPlayerImpl implements InstreamAdPlayer {
}
|
|
SDK 8
|
public class InstreamAdPlayerImpl implements InstreamAdPlayer {
@Override
public List<String> getSupportedMimeTypes() {
return Arrays.asList(InstreamAdMimeTypes.MP4, InstreamAdMimeTypes.WEBM);
}
@Override
public void bindPlayerView(FrameLayout container) {
container.addView(playerView);
}
}
|
Для медиационных адаптеров идентификация адаптера вынесена в отдельный метод.
|
Класс
|
Статус
|
|
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)
YandexAds.initialize(context, listener)
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);
YandexAds.initialize(this, () -> { });
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 и выше