8.0.0 버전으로 마이그레이션 가이드
Yandex Mobile Ads SDK의 새 버전에서는 개발자 경험을 개선하기 위한 여러 API 변경이 도입되었습니다.
주요 변경 사항
1. AdRequest 변경
AdRequestConfiguration과 NativeAdRequestConfiguration 클래스가 제거되었습니다. 모든 광고 유형에 AdRequest를 사용합니다.
| 클래스 |
상태 |
AdRequestConfiguration |
제거됨. AdRequest 사용 |
NativeAdRequestConfiguration |
제거됨. AdRequest와 NativeAdOptions 사용 |
예시
Kotlin
| SDK 7 | SDK 8 |
val loader = InterstitialAdLoader(this)
val config = AdRequestConfiguration.Builder("R-M-XXXXX-YY").build()
loader.loadAd(config)
val bannerView = findViewById(R.id.view_banner)
bannerView.setAdUnitId("R-M-XXXXX-YY")
val request = AdRequest.Builder().build()
bannerView.loadAd(request)
|
val loader = InterstitialAdLoader(this)
val request = AdRequest.Builder("R-M-XXXXX-YY").build()
loader.loadAd(adRequest, listener)
val bannerView = findViewById(R.id.view_banner)
val request = AdRequest.Builder("R-M-XXXXX-YY").build()
bannerView.loadAd(request)
|
Java
| SDK 7 | SDK 8 |
void loadAd() {
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);
}
|
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 = AdRequest.Builder("R-M-XXXXX-YY").build();
bannerView.loadAd(request);
}
|
2. 타게팅 API 변경
AdRequest.Builder에서 age, gender, location, contextQuery, contextTags 필드가 제거되었습니다. 타게팅 매개변수는 새 AdTargeting 클래스로 관리합니다.
| 클래스 |
메서드 |
상태 |
AdRequest.Builder |
setAge(String) |
제거됨. 대신
AdTargeting.Builder.setAge(String)와
AdRequest.Builder.setTargeting(AdTargeting) 사용 |
AdRequest.Builder |
setGender(String) |
제거됨. 대신
AdTargeting.Builder.setGender(String)와
AdRequest.Builder.setTargeting(AdTargeting) 사용 |
AdRequest.Builder |
setLocation(Location) |
제거됨. 대신
AdTargeting.Builder.setLocation(Location)와
AdRequest.Builder.setTargeting(AdTargeting) 사용 |
AdRequest.Builder |
setContextQuery(String) |
제거됨. 대신
AdTargeting.Builder.setContextQuery(String)와
AdRequest.Builder.setTargeting(AdTargeting) 사용 |
AdRequest.Builder |
setContextTags(List<String>) |
제거됨. 대신
AdTargeting.Builder.setContextTags(List<String>)와
AdRequest.Builder.setTargeting(AdTargeting) 사용 |
AdRequest.Builder |
setTargeting(AdTargeting) |
추가됨 |
AdTargeting |
- |
추가됨 |
AdTargeting.Builder |
- |
추가됨 |
AdTargeting.Builder |
setAge(String) |
추가됨 |
AdTargeting.Builder |
setGender(String) |
추가됨 |
AdTargeting.Builder |
setLocation(Location) |
추가됨 |
AdTargeting.Builder |
setContextQuery(String) |
추가됨 |
AdTargeting.Builder |
setContextTags(List<String>) |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
val adRequest = AdRequest.Builder()
.setAge("25")
.setGender(Gender.MALE)
.setContextTags(listOf("news"))
.build()
|
val targeting = AdTargeting.Builder()
.setAge("25")
.setGender(Gender.MALE)
.setContextTags(listOf("news"))
.build()
val adRequest = AdRequest.Builder(adUnitId)
.setTargeting(targeting)
.build()
|
Java
| SDK 7 | SDK 8 |
void loadAd() {
AdRequest adRequest = AdRequest.Builder()
.setAge("25")
.setGender(Gender.MALE)
.setContextTags(listOf("news"))
.build();
}
|
void loadAd() {
AdTargeting targeting = new AdTargeting.Builder()
.setAge("25")
.setGender(Gender.MALE)
.setContextTags(listOf("news"))
.build();
AdRequest adRequest = new AdRequest.Builder(adUnitId)
.setTargeting(targeting)
.build();
}
|
3. 광고 로딩 API 변경
콜백 리스너 등록 방식과 광고 로딩 방식이 변경되었습니다.
| 클래스 |
메서드 |
상태 |
| InterstitialAdLoader |
setAdLoadListener(InterstitialAdLoadListener) |
제거됨. loadAd 호출 시 InterstitialAdLoadListener를 인자로 넘깁니다. |
| InterstitialAdLoader |
loadAd(AdRequestConfiguration) |
제거됨. 대신 loadAd(AdRequest, InterstitialAdLoadListener) 사용. |
| InterstitialAdLoader |
loadAd(AdRequest, InterstitialAdLoadListener) |
추가됨 |
| RewardedAdLoader |
setAdLoadListener(RewardedAdLoadListener) |
제거됨. loadAd 호출 시 RewardedAdLoadListener를 인자로 넘깁니다. |
| RewardedAdLoader |
loadAd(AdRequestConfiguration) |
제거됨. 대신 loadAd(AdRequest, RewardedAdLoadListener) 사용. |
| RewardedAdLoader |
loadAd(AdRequest, RewardedAdLoadListener) |
추가됨 |
| AppOpenAdLoader |
setAdLoadListener(AppOpenAdLoadListener) |
제거됨. loadAd 호출 시 AppOpenAdLoadListener를 인자로 넘깁니다. |
| AppOpenAdLoader |
loadAd(AdRequestConfiguration) |
제거됨. 대신 loadAd(AdRequest, AppOpenAdLoadListener) 사용. |
| AppOpenAdLoader |
loadAd(AdRequest, AppOpenAdLoadListener) |
추가됨 |
| NativeAdLoader |
setNativeAdLoadListener(NativeAdLoadListener) |
제거됨. loadAd 호출 시 NativeAdLoadListener를 인자로 넘깁니다. |
| NativeAdLoader |
loadAd(NativeAdRequestConfiguration) |
제거됨. 대신 loadAd(AdRequest, NativeAdLoadListener) 사용. |
| NativeAdLoader |
loadAd(AdRequest, NativeAdOptions, NativeAdLoadListener) |
추가됨 |
| NativeAdLoader |
loadAd(AdRequest, NativeAdLoadListener) |
추가됨 |
| SliderAdLoader |
setSliderAdLoadListener(SliderAdLoadListener) |
제거됨. loadAd 호출 시 SliderAdLoadListener를 인자로 넘깁니다. |
| SliderAdLoader |
loadSlider(NativeAdRequestConfiguration) |
제거됨. 대신 loadAd(AdRequest, SliderAdLoadListener) 사용. |
| SliderAdLoader |
loadSlider(AdRequest, NativeAdOptions, SliderAdLoadListener) |
추가됨 |
| SliderAdLoader |
loadAd(AdRequest, NativeAdLoadListener) |
추가됨 |
| NativeBulkAdLoader |
setNativeBulkAdLoadListener(NativeBulkAdLoadListener) |
제거됨. loadAd 호출 시 NativeBulkAdLoadListener를 인자로 넘깁니다. |
| NativeBulkAdLoader |
loadAds(NativeAdRequestConfiguration, Int) |
제거됨. 대신 loadAd(AdRequest, NativeAdLoadListener) 사용. |
| NativeBulkAdLoader |
loadAds(AdRequest, NativeAdOptions, NativeBulkAdLoadListener) |
추가됨 |
| NativeBulkAdLoader |
loadAds(AdRequest, NativeBulkAdLoadListener) |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
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)
|
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 { }
)
|
Java
| SDK 7 | SDK 8 |
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);
}
|
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 지원
광고 로딩 메서드에 suspend 오버로드가 API에 추가되었습니다.
| 클래스 |
메서드 |
상태 |
| 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 |
추가됨 |
| NativeAdLoader |
suspend fun loadAd(AdRequest): NativeAdLoadResult |
추가됨 |
| SliderAdLoader |
suspend fun loadAd(AdRequest): SliderAdLoadResult |
추가됨 |
| SliderAdLoader |
suspend fun loadAd(AdRequest, NativeAdOptions): SliderAdLoadResult |
추가됨 |
| NativeBulkAdLoader |
suspend fun loadAds(AdRequest, Int): NativeBulkAdLoadResult |
추가됨 |
| NativeBulkAdLoader |
suspend fun loadAds(AdRequest, Int, NativeAdOptions): NativeBulkAdLoadResult |
추가됨 |
예시
Kotlin
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. 배너 API 변경
BannerAdView에서 setAdUnitId 메서드가 제거되었습니다. 이제 adUnitId는 광고를 로드할 때마다 설정합니다.
BannerAdSize를 만드는 팩토리 메서드 이름이 바뀌었습니다.
| 클래스 |
메서드 |
상태 |
BannerAdView |
setAdUnitId(String) |
제거됨. 광고 로딩 전 AdRequest 생성자에 adUnitId를 넘깁니다. |
BannerAdSize |
stickySize |
제거됨. 대신 BannerAdSize.sticky 사용. |
BannerAdSize |
inlineSize |
제거됨. 대신 BannerAdSize.inline 사용. |
예시
Kotlin
| SDK 7 | SDK 8 |
val banner = findViewById<BannerAdView>(R.id.banner)
val stickySize = BannerAdSize.stickySize(this, screenWidth)
val inlineSizeSize = BannerAdSize.inlineSize(this, screenWidth, 300)
banner.setAdUnitId("R-M-XXXXX-YY")
banner.setAdSize(stickySize)
banner.loadAd(AdRequest.Builder().build())
|
val banner = findViewById<BannerAdView>(R.id.banner)
val stickySize = BannerAdSize.sticky(this, screenWidth)
val inlineSizeSize = BannerAdSize.inline(this, screenWidth, 300)
banner.setAdSize(stickySize)
banner.loadAd(AdRequest.Builder("R-M-XXXXX-YY").build())
|
Java
| SDK 7 | SDK 8 |
void loadAd() {
BannerAdView banner = findViewById(R.id.banner);
BannerAdSize stickySize = BannerAdSize.stickySize(this, screenWidth);
BannerAdSize inlineSizeSize = BannerAdSize.inlineSize(this, screenWidth, 300);
banner.setAdUnitId("R-M-XXXXX-YY");
banner.setAdSize(stickySize);
banner.loadAd(new AdRequest.Builder().build());
}
|
void loadAd() {
BannerAdView banner = findViewById(R.id.banner);
BannerAdSize stickySize = BannerAdSize.sticky(this, screenWidth);
BannerAdSize inlineSizeSize = BannerAdSize.inline(this, screenWidth, 300);
banner.setAdSize(stickySize);
banner.loadAd(new AdRequest.Builder("R-M-XXXXX-YY").build());
}
|
5. AdInfo API 변경
광고 소재 정보를 가져오는 방식이 메서드에서 프로퍼티로 바뀌었고, 일부 추가 정보는 제거되었습니다.
| 클래스 |
메서드/필드 |
상태 |
BannerAdView,
InterstitialAd,
RewardedAd,
AppOpenAd,
NativeAd |
info |
제거됨. 대신 adInfo 사용 |
BannerAdView,
InterstitialAd,
RewardedAd,
AppOpenAd,
NativeAd |
adAttributes |
제거됨. 대신 adInfo 사용 |
NativeAd |
creativeId |
제거됨. 대신 Creative.creativeId 사용 |
NativeAd |
campaignId |
제거됨. 대신 Creative.campaignId 사용 |
AdInfo |
data |
제거됨 |
AdInfo |
adSize |
제거됨 |
AdInfo |
creatives |
추가됨 |
AdInfo |
extraData |
추가됨 |
AdInfo |
partnerText |
추가됨 |
Creative |
placeId |
추가됨 |
Creative |
offerId |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
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
|
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
|
Java
| SDK 7 | SDK 8 |
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();
|
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. 네이티브 광고 API 변경
NativeAd.bindNativeAd와 SliderAd.bindSliderAd() 메서드는 이제 AdBindingResult 바인딩 결과를 반환하며 예외를 던지지 않습니다.
warning 필드 타입이 String?에서 NativeAdWarning?로 바뀌었습니다. 광고법 준수를 위해 새 클래스에는 warning 에셋 내용뿐 아니라, 전체 광고 영역 대비 warning 에셋의 최소 필요 크기(비율)도 포함됩니다.
선택한 광고에 동영상 소재가 있는지 나타내는 hasVideo 필드가 NativeAdMedia 클래스에 추가되었습니다.
| 클래스 |
메서드/필드 |
상태 |
NativeAd |
bindNativeAd |
반환값 AdBindingResult 추가. 메서드는 더 이상 예외를 던지지 않음 |
SliderAd |
bindSliderAd |
반환값 AdBindingResult 추가. 메서드는 더 이상 예외를 던지지 않음 |
AdBindingResult |
- |
추가됨 |
NativeAdAssets |
warning |
타입 변경: String → NativeAdWarning |
NativeAdWarning |
- |
추가됨 |
NativeAdWarning |
value |
추가됨 |
NativeAdWarning |
minimumRequiredArea |
추가됨 |
NativeAdMedia |
hasVideo |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
val warning = nativeAd.adAssets.warning
try {
nativeAd.bindNativeAd(binder)
} catch (e: NativeAdException) {
val message = e.message
}
|
val warningAsset = nativeAd.adAssets.warning
val warning = warningAsset?.value
val warningMinArea = warningAsset?.minimumRequiredArea
val hasVideo = nativeAd.adAssets.media?.hasVideo
when (val result = nativeAd.bindNativeAd(binder)) {
is AdBindingResult.Failure -> {
val missingAssetName = result.missingAssetName
val message = result.exception.message
}
AdBindingResult.Success -> Unit
}
|
Java
| SDK 7 | SDK 8 |
void bindAd(NativeAd nativeAd) {
String warning = nativeAd.getAdAssets().getWarning();
try {
nativeAd.bindNativeAd(binder);
} catch (NativeAdException e) {
String message = e.getMessage();
}
}
|
void bindNativeAd(NativeAd nativeAd) {
NativeAdWarning warningAsset = nativeAd.getAdAssets().getWarning();
String warning = warningAsset.getValue();
float minWarningArea = warningAsset.getMinimumRequiredArea();
boolean hasVideo = nativeAd.getAdAssets().getMedia().getHasVideo();
AdBindingResult result = nativeAd.bindNativeAd(binder);
if (result instanceof AdBindingResult.Failure) {
String missingAssetName = ((AdBindingResult.Failure) result).getMissingAssetName();
String message = ((AdBindingResult.Failure) result).getException().getMessage();
}
}
|
6.1 네이티브 광고 템플릿 API
네이티브 광고 템플릿 연동 도구가 제거되었습니다. 표준 네이티브 광고 컴포넌트로 연동하세요.
| 클래스 |
상태 |
NativeBannerView |
제거됨 |
SizeConstraint |
제거됨 |
HorizontalOffset |
제거됨 |
NativeTemplateAppearance |
제거됨 |
TextAppearance |
제거됨 |
BannerAppearance |
제거됨 |
ButtonAppearance |
제거됨 |
RatingAppearance |
제거됨 |
7. 일부 광고 객체 콜백 제거
ClosableBannerAdEventListener와 ClosableNativeAdEventListener 인터페이스가 제거되었습니다. onLeftApplication과 onReturnToApplication 메서드도 제거되었습니다.
| 클래스 |
메서드 |
상태 |
ClosableBannerAdEventListener |
- |
제거됨 |
ClosableNativeAdEventListener |
- |
제거됨 |
BannerAdEventListener
NativeAdEventListener |
onLeftApplication |
제거됨 |
BannerAdEventListener
NativeAdEventListener |
onReturnToApplication |
제거됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
bannerAd?.setBannerAdEventListener(object : ClosableBannerAdEventListener {
override fun closeBannerAd() { }
override fun onAdClicked() { }
override fun onAdFailedToLoad(error: AdRequestError) { }
override fun onAdLoaded() { }
override fun onImpression(impressionData: ImpressionData?) { }
override fun onLeftApplication() { }
override fun onReturnedToApplication() { }
})
|
bannerAdView?.setBannerAdEventListener(object : BannerAdEventListener {
override fun onAdClicked() { }
override fun onAdFailedToLoad(error: AdRequestError) { }
override fun onAdLoaded() { }
override fun onImpression(impressionData: ImpressionData?) { }
})
|
Java
| SDK 7 | SDK 8 |
void setEventListener(BannerAdView bannerView) {
bannerView.setBannerAdEventListener(
new ClosableBannerAdEventListener() {
@Override
public void closeBannerAd() { }
@Override
public void onAdLoaded() { }
@Override
public void onAdFailedToLoad(@NotNull AdRequestError adRequestError) { }
@Override
public void onAdClicked() { }
@Override
public void onLeftApplication() { }
@Override
public void onReturnedToApplication() { }
@Override
public void onImpression(@Nullable ImpressionData impressionData) { }
}
);
}
|
void setEventListener(BannerAdView bannerView) {
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로 바뀌었으며, 일부 개인정보 설정용 메서드 이름도 변경되었습니다.
| 클래스 |
메서드 |
상태 |
MobileAds |
- |
제거됨. 대신 YandexAds 사용 |
MobileAds |
setAgeRestrictedUser(Boolean) |
제거됨. 대신 YandexAds.setAgeRestricted(Boolean) 사용. |
MobileAds |
setLocationConsent(Boolean) |
제거됨. 대신 YandexAds.setLocationTracking(Boolean) 사용. |
YandexAds |
- |
추가됨 |
YandexAds |
setAgeRestricted(Boolean) |
추가됨 |
YandexAds |
setLocationTracking(Boolean) |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
import com.yandex.mobile.ads.common.MobileAds
MobileAds.setUserConsent(true)
MobileAds.setAgeRestrictedUser(false)
MobileAds.setLocationConsent(true)
MobileAds.initialize(context) { }
MobileAds.enableDebugErrorIndicator(true)
MobileAds.enableLogging(true)
MobileAds.setAppAdAnalyticsReporting(true)
MobileAds.showDebugPanel(this)
MobileAds.libraryVersion
|
import com.yandex.mobile.ads.common.YandexAds
YandexAds.setUserConsent(true)
YandexAds.setAgeRestricted(false)
YandexAds.setLocationTracking(true)
YandexAds.initialize(context) { }
YandexAds.enableDebugErrorIndicator(true)
YandexAds.enableLogging(true)
YandexAds.setAppAdAnalyticsReporting(true)
YandexAds.showDebugPanel(this)
YandexAds.libraryVersion
|
Java
| SDK 7 | SDK 8 |
import com.yandex.mobile.ads.common.MobileAds;
void initSdk() {
MobileAds.setUserConsent(true);
MobileAds.setAgeRestrictedUser(false);
MobileAds.setLocationConsent(true);
MobileAds.initialize(this, () -> { });
MobileAds.getLibraryVersion();
MobileAds.enableDebugErrorIndicator(true);
MobileAds.enableLogging(true);
MobileAds.setAppAdAnalyticsReporting(true);
MobileAds.showDebugPanel(this);
}
|
import com.yandex.mobile.ads.common.YandexAds;
void initSdk() {
YandexAds.setUserConsent(true);
YandexAds.setAgeRestricted(false);
YandexAds.setLocationTracking(true);
YandexAds.initialize(this, () -> { });
YandexAds.getLibraryVersion();
YandexAds.enableDebugErrorIndicator(true);
YandexAds.enableLogging(true);
YandexAds.setAppAdAnalyticsReporting(true);
YandexAds.showDebugPanel(this);
}
|
Instream API 변경
1. 패키지 및 종속성 구조 변경
새 SDK 구조에 맞게 주요 클래스 이름이 변경되었습니다.
| 클래스 |
상태 |
com.yandex.mobile.ads.instream.InstreamAdBinder |
Moved to com.yandex.mobile.ads.instream.binder.InstreamAdBinder |
com.yandex.mobile.ads.instream.InstreamAdRequestConfiguration |
Renamed to com.yandex.mobile.ads.instream.InstreamAdRequest |
com.yandex.mobile.ads.instream.InstreamAdBreak |
Renamed to com.yandex.mobile.ads.instream.adbreak.AdBreakData |
com.yandex.mobile.ads.instream.inroll.Inroll
com.yandex.mobile.ads.instream.pauseroll.Pauseroll |
Replaced by com.yandex.mobile.ads.instream.adbreak.InstreamAdBreak |
예시
Kotlin
| SDK 7 | SDK 8 |
import com.yandex.mobile.ads.instream.InstreamAdBinder
import com.yandex.mobile.ads.instream.InstreamAdRequestConfiguration
import com.yandex.mobile.ads.instream.InstreamAdBreak
import com.yandex.mobile.ads.instream.inroll.Inroll
import com.yandex.mobile.ads.instream.pauseroll.Pauseroll
|
import com.yandex.mobile.ads.instream.binder.InstreamAdBinder
import com.yandex.mobile.ads.instream.InstreamAdRequest
import com.yandex.mobile.ads.instream.adbreak.AdBreakData
import com.yandex.mobile.ads.instream.adbreak.InstreamAdBreak
|
Java
| SDK 7 | SDK 8 |
import com.yandex.mobile.ads.instream.InstreamAdBinder;
import com.yandex.mobile.ads.instream.InstreamAdRequestConfiguration;
import com.yandex.mobile.ads.instream.InstreamAdBreak;
import com.yandex.mobile.ads.instream.inroll.Inroll;
import com.yandex.mobile.ads.instream.pauseroll.Pauseroll;
|
import com.yandex.mobile.ads.instream.binder.InstreamAdBinder;
import com.yandex.mobile.ads.instream.InstreamAdRequest;
import com.yandex.mobile.ads.instream.adbreak.AdBreakData;
import com.yandex.mobile.ads.instream.adbreak.InstreamAdBreak;
|
2. AdRequest 변경
InstreamAdRequestConfiguration 클래스 이름이 InstreamAdRequest로 바뀌었습니다.
| 클래스 |
상태 |
InstreamAdRequestConfiguration |
제거됨. 대신 InstreamAdRequest 사용 |
InstreamAdRequest |
추가됨 |
InstreamAdBreakRequest |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
val loader = InstreamAdLoader(this)
val config = InstreamAdRequestConfiguration.Builder("XXXXXX").build()
loader.loadInstreamAd(this, config)
|
val loader = InstreamAdLoader(this)
val config = InstreamAdRequest.Builder("XXXXXX").build()
loader.loadInstreamAd(this, config)
|
Java
| SDK 7 | SDK 8 |
void loadAd() {
InstreamAdLoader loader = new InstreamAdLoader(this);
InstreamAdRequestConfiguration config = new InstreamAdRequestConfiguration.Builder("XXXXXX").build();
loader.loadInstreamAd(this, config);
}
|
void loadAd() {
InstreamAdLoader loader = new InstreamAdLoader(this);
InstreamAdRequest config = new InstreamAdRequest.Builder("XXXXXX").build();
loader.loadInstreamAd(this, config);
}
|
3. 광고 로딩 API 변경
콜백 리스너 등록 방식과 광고 로딩 방식이 변경되었습니다. 광고 브레이크를 로드하는 InstreamAdBreakLoader 클래스가 추가되었습니다. onInstreamAdFailedToLoad 메서드 시그니처도 바뀌어, 이제 reason 문자열 대신 InstreamAdRequestError 객체가 전달됩니다.
| 클래스 |
메서드 |
상태 |
InstreamAdLoader |
setInstreamAdLoadListener(InstreamAdLoadListener) |
제거됨. loadAd 호출 시 InstreamAdLoadListener를 인자로 넘깁니다. |
InstreamAdLoader |
loadAd(InstreamAdRequestConfiguration) |
제거됨. loadAd 호출 시 InstreamAdLoadListener를 인자로 넘깁니다. |
InstreamAdLoader |
loadAd(InstreamAdRequest, InstreamAdLoadListener) |
제거됨. loadAd 호출 시 InstreamAdLoadListener를 인자로 넘깁니다. |
InstreamAdLoadListener |
onInstreamAdFailedToLoad(String) |
제거됨. 대신 onInstreamAdFailedToLoad(InstreamAdRequestError) 사용. |
InstreamAdLoadListener |
onInstreamAdFailedToLoad(InstreamAdRequestError) |
추가됨 |
InstreamAdBreakLoader |
- |
추가됨 |
InstreamAdBreakLoader |
loadAd(InstreamAdBreakRequest, InstreamAdBreakLoadListener) |
추가됨 |
InstreamAdBreakLoadListener |
- |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
val instreamAdLoader = InstreamAdLoader(this)
instreamAdLoader.setInstreamAdLoadListener(object : InstreamAdLoadListener {
override fun onInstreamAdLoaded(instreamAd: InstreamAd) {
}
override fun onInstreamAdFailedToLoad(reason: String) {
println("Instream ad failed to load: $reason")
}
})
val config = InstreamAdRequestConfiguration.Builder("XXXXXX").build()
instreamAdLoader.loadInstreamAd(this, config)
|
val instreamAdLoader = InstreamAdLoader(this)
val config = InstreamAdRequest.Builder("XXXXXX").build()
instreamAdLoader.loadAd(config, object : InstreamAdLoadListener {
override fun onInstreamAdLoaded(instreamAd: InstreamAd) {
}
override fun onInstreamAdFailedToLoad(error: InstreamAdRequestError) {
println("Instream ad failed to load: ${error.reason}")
}
})
|
Java
| SDK 7 | SDK 8 |
void loadInstreamAd() {
InstreamAdLoader instreamAdLoader = new InstreamAdLoader(this);
instreamAdLoader.setInstreamAdLoadListener(new InstreamAdLoadListener() {
@Override
public void onInstreamAdLoaded(InstreamAd instreamAd) {
}
@Override
public void onInstreamAdFailedToLoad(String reason) {
System.out.println("Instream ad failed to load: " + reason);
}
});
InstreamAdRequestConfiguration config = new InstreamAdRequestConfiguration.Builder("XXXXXX").build();
instreamAdLoader.loadInstreamAd(this, config);
}
|
void loadInstreamAd() {
InstreamAdLoader instreamAdLoader = new InstreamAdLoader(this);
InstreamAdRequest config = new InstreamAdRequest.Builder("XXXXXX").build();
instreamAdLoader.loadAd(config, new InstreamAdLoadListener() {
@Override
public void onInstreamAdLoaded(InstreamAd instreamAd) {
}
@Override
public void onInstreamAdFailedToLoad(InstreamAdRequestError error) {
System.out.println("Instream ad failed to load: " + error.getReason());
}
});
}
|
3.1 Kotlin Coroutines 지원
InstreamAdLoader와 InstreamAdBreakAdLoader의 광고 로딩 메서드에 suspend 오버로드가 추가되었습니다.
| 클래스 |
메서드 |
상태 |
InstreamAdLoader |
suspend fun loadAd(InstreamAdRequest): InstreamAdLoadResult |
추가됨 |
InstreamAdBreakLoader |
suspend fun loadAd(InstreamAdBreakRequest): InstreamAdBreakLoadResult |
추가됨 |
예시
Kotlin
lifecycleScope.launch {
val instreamAdLoader = InstreamAdLoader(applicationContext)
when(val result = instreamAdLoader.loadAd(InstreamAdRequest.Builder("XXXXXX").build())) {
is InstreamAdLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
is InstreamAdLoadResult.Success -> TODO("Show instream ad: ${result.ad}")
}
val adBreakLoader = InstreamAdBreakLoader(applicationContext)
when (val result = adBreakLoader.loadAd(InstreamAdBreakRequest.Builder("XXXXXX", "YY").build())) {
is InstreamAdBreakLoadResult.Failure -> TODO("Handle error: ${result.error.description}")
is InstreamAdBreakLoadResult.Success -> TODO("Show adBreak : ${result.adBreak}")
}
}
4. In-roll 및 Pause-roll 연동
광고 브레이크 관리 방식이 더 유연해졌습니다. 전용 큐 제공자 InrollQueueProvider와 PauserollQueueProvider는 제거되었으며, 모든 브레이크는 InstreamAd 객체에서 바로 가져와 유형별로 필터링합니다.
InstreamAdBinder로 자동 렌더링을 사용하는 경우 instreamAdBreaks 컬렉션에서 INROLL 및 PAUSEROLL 유형의 브레이크만 선택하세요.
| 클래스 |
상태 |
InrollQueueProvider |
제거됨. InstreamAdBreakType.INROLL로 필터한 instreamAd.instreamAdBreaks 사용 |
PauserollQueueProvider |
제거됨. InstreamAdBreakType.PAUSEROLL로 필터한 instreamAd.instreamAdBreaks 사용 |
예시
Kotlin
| SDK 7 | SDK 8 |
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)
|
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)
|
Java
| SDK 7 | SDK 8 |
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);
}
}
|
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 |
constructor |
instreamAdPlayer 매개변수는 선택 사항이며, null을 넘겨도 됩니다. |
InstreamAdBreak |
prepare(instreamAdPlayer) |
제거됨. 매개변수 없는 prepare() 사용 |
InstreamAdBreak |
prepare() |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
val instreamAdBinder = InstreamAdBinder(
context,
instreamAd,
instreamAdPlayer,
contentPlayer
)
val adBreak: InstreamAdBreak
adBreak.prepare(instreamAdPlayer)
|
val instreamAdBinder = InstreamAdBinder(
context,
instreamAd,
null,
contentPlayer
)
val adBreak: InstreamAdBreak
adBreak.prepare()
|
Java
| SDK 7 | SDK 8 |
void showAd() {
InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
context,
instreamAd,
instreamAdPlayer,
contentPlayer
);
InstreamAdBreak adBreak;
adBreak.prepare(instreamAdPlayer);
}
|
void showAd() {
InstreamAdBinder instreamAdBinder = new InstreamAdBinder(
context,
instreamAd,
null,
contentPlayer
);
InstreamAdBreak adBreak;
adBreak.prepare();
}
|
6. InstreamAdPlayer 인터페이스 변경
InstreamAdPlayer 인터페이스가 업데이트되었습니다. 동영상 포맷 선택을 최적화하는 supportedMimeTypes 프로퍼티가 추가되었고, 광고 요소를 동영상 위에 올바르게 배치하기 위한 bindPlayerView 메서드가 추가되었습니다.
| 클래스 |
메서드 |
상태 |
InstreamAdPlayer |
supportedMimeTypes: List<String> |
추가됨. SDK가 가장 적합한 동영상 포맷(예: MP4 대신 DASH)을 고를 수 있게 합니다. |
InstreamAdPlayer |
bindPlayerView(container: FrameLayout) |
추가됨. 제공된 컨테이너 전체를 채우도록 그 안에 videoPlayerView를 배치해야 합니다. |
예시
Kotlin
| SDK 7 | SDK 8 |
class InstreamAdPlayerImpl : InstreamAdPlayer {
}
|
class InstreamAdPlayerImpl : InstreamAdPlayer {
override val supportedMimeTypes: List<String>
get() = listOf(InstreamAdMimeTypes.MP4, InstreamAdMimeTypes.WEBM)
override fun bindPlayerView(container: FrameLayout) {
container.addView(playerView)
}
}
|
Java
| SDK 7 | SDK 8 |
public class InstreamAdPlayerImpl implements InstreamAdPlayer {
}
|
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);
}
}
|
미디에이션 네트워크 API 변경
1. 미디에이션 네트워크 데이터 전달용 신규 API
미디에이션 어댑터에서는 어댑터 식별 정보를 별도 메서드로 넘기도록 바뀌었습니다.
| 클래스 |
메서드 |
상태 |
AdapterIdentity |
- |
추가됨 |
YandexAds |
setAdapterIdentity(AdapterIdentity) |
추가됨. 광고 요청에 어댑터 데이터를 추가 인자로 넘기지 말고, YandexAds.initialize 전에 이 메서드를 호출하세요. |
예시
Kotlin
| SDK 7 | SDK 8 |
YandexAds.initialize(context, listener)
val parameters = mapOf(
"adapter_network_name" to "AdNetwork",
"adapter_network_version" to "1.2.3",
"adapter_version" to "1.0.0"
)
val adRequest = AdRequest.Builder()
.setParameters(parameters)
.build()
bannerAd.loadAd(adRequest)
|
val identity = AdapterIdentity("AdNetwork", "1.0.0", "1.2.3")
YandexAds.setAdapterIdentity(identity)
YandexAds.initialize(context, listener)
val adRequest = AdRequest.Builder("R-M-XXXXX-YY").build()
bannerAd.loadAd(adRequest)
|
Java
| SDK 7 | SDK 8 |
void loadAd() {
Map<String, String> parameters = new HashMap<>();
parameters.put("adapter_network_name", "AdNetwork");
parameters.put("adapter_network_version", "1.2.3");
parameters.put("adapter_version", "1.0.0");
AdRequest adRequest = new AdRequest.Builder()
.setParameters(parameters)
.build();
bannerView.loadAd(adRequest);
}
|
void loadAd() {
AdapterIdentity adapterIdentity = new AdapterIdentity("AdNetwork", "1.0.0", "1.2.3");
YandexAds.setAdapterIdentity(adapterIdentity);
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 팩토리 메서드로 인스턴스를 만듭니다.
| 클래스 |
생성자/메서드 |
상태 |
BidderTokenLoader |
BidderTokenLoader(Context) |
생성자 추가 |
BidderTokenLoader |
loadBidderToken |
변경됨. 정적 메서드에서 BidderTokenLoader 클래스의 인스턴스 메서드로 바뀜 |
BidderTokenRequestConfiguration |
- |
제거됨. 대신 BidderTokenRequest 사용 |
BidderTokenRequestConfiguration.Builder |
- |
제거됨. BidderTokenRequest의 팩토리 메서드 사용 |
BidderTokenRequestConfiguration.Builder |
setBannerAdSize(BannerAdSize) |
제거됨. BidderTokenRequest.banner(BannerAdSize) 인자에 BannerAdSize 전달 |
BidderTokenRequestConfiguration.Builder |
setParameters(Map<String, String>) |
제거됨. 매개변수는 팩토리 메서드 인자로 전달 |
BidderTokenRequest |
- |
추가됨 |
BidderTokenRequest |
banner(BannerAdSize) |
추가됨 |
BidderTokenRequest |
banner(BannerAdSize, AdTargeting) |
추가됨 |
BidderTokenRequest |
banner(BannerAdSize, AdTargeting, Map<String, String>) |
추가됨 |
BidderTokenRequest |
interstitial() |
추가됨 |
BidderTokenRequest |
interstitial(AdTargeting) |
추가됨 |
BidderTokenRequest |
interstitial(AdTargeting, Map<String, String>) |
추가됨 |
BidderTokenRequest |
rewarded() |
추가됨 |
BidderTokenRequest |
rewarded(AdTargeting) |
추가됨 |
BidderTokenRequest |
rewarded(AdTargeting, Map<String, String>) |
추가됨 |
BidderTokenRequest |
appOpenAd() |
추가됨 |
BidderTokenRequest |
appOpenAd(AdTargeting) |
추가됨 |
BidderTokenRequest |
appOpenAd(AdTargeting, Map<String, String>) |
추가됨 |
BidderTokenRequest |
native() |
추가됨 |
BidderTokenRequest |
native(AdTargeting) |
추가됨 |
BidderTokenRequest |
native(AdTargeting, Map<String, String>) |
추가됨 |
예시
Kotlin
| SDK 7 | SDK 8 |
val bidderTokenRequest = BidderTokenRequestConfiguration.Builder(AdType.INTERSTITIAL)
.setBannerAdSize(BannerAdSize.stickySize(this, screenWidth))
.setParameters(mapOf("a" to "b"))
.build()
BidderTokenLoader.loadBidderToken(
this,
bidderTokenRequest,
object : BidderTokenLoadListener { }
)
|
val bidderTokenLoader = BidderTokenLoader(this);
bidderTokenLoader.loadBidderToken(
BidderTokenRequest.banner(BannerAdSize.sticky(this, screenWidth), parameters = mapOf("a" to "b")),
object : BidderTokenLoadListener { }
)
bidderTokenLoader.loadBidderToken(
BidderTokenRequest.interstitial(),
object : BidderTokenLoadListener { }
)
|
Java
| SDK 7 | SDK 8 |
void loadToken() {
Map<String, String> parameters = new HashMap<>();
parameters.put("a", "b");
BidderTokenRequestConfiguration bidderTokenRequest =
new BidderTokenRequestConfiguration.Builder(AdType.INTERSTITIAL)
.setBannerAdSize(BannerAdSize.stickySize(this, screenWidth))
.setParameters(parameters)
.build();
BidderTokenLoader.loadBidderToken(
this,
bidderTokenRequest,
new BidderTokenLoadListener() { }
);
}
|
void loadToken() {
Map<String, String> parameters = new HashMap<>();
parameters.put("a", "b");
BidderTokenLoader bidderTokenLoader = new BidderTokenLoader(this);
bidderTokenLoader.loadBidderToken(
BidderTokenRequest.banner(BannerAdSize.inline(this, screenWidth), null, parameters),
new BidderTokenLoadListener() { }
);
bidderTokenLoader.loadBidderToken(BidderTokenRequest.interstitial(),
new BidderTokenLoadListener() { }
);
}
|
Jetpack Compose 연동
Jetpack Compose 연동이 지원됩니다. Jetpack Compose 섹션의 연동 예시를 참고하세요.
AI 기반 마이그레이션
SDK 7.x에서 8.x로 옮기는 과정을 돕기 위해, 미리 준비된 마이그레이션 스킬과 함께 AI 어시스턴트를 사용할 수 있습니다.
사용 방법
-
스킬 다운로드
마이그레이션 스킬은 GitHub Yandex Ads SDK Android에서 받을 수 있습니다.
-
Claude Desktop
에이전트 스킬 디렉터리에 스킬 폴더를 복사합니다. 예:
cp -r Skills/migrate-yandex-ads-sdk-from-7-to-8 .claude/skills/
-
Cursor IDE
프로젝트에 스킬 폴더를 복사한 뒤 @로 SKILL.md를 지정합니다. 예:
@migrate-yandex-ads-sdk-from-7-to-8/SKILL.md
-
다른 방법
SKILL.md 내용과 관련 파일을 AI 대화에 붙여 넣습니다(메시지 길이 제한을 넘을 수 있음).
-
프롬프트 사용
스킬을 불러온 뒤 AI 대화에 아래와 같이 입력합니다.
Migrate my project from Yandex Mobile Ads SDK 7.x to 8.x
AI가 생성한 변경 사항은 반드시 직접 검토하세요.
스킬은 AI가 작업을 올바르게 수행하도록 돕지만, 에이전트가 적용한 모든 변경은 본인이 확인·검증해야 합니다. AI는 실수할 수 있으므로 수동 코드 리뷰가 필요합니다.
요구 사항
- Gradle: 7.0 이상
- Android Gradle Plugin: 8.3.2 이상
- Android SDK: 21(Android 5.0) 이상
- Kotlin: 1.9.0 이상
- Java: 8 이상