6 버전으로 마이그레이션 가이드

Важно

사용 중인 Mediation 어댑터와 타사 미디에이션 네트워크용 어댑터를 최신 버전으로 반드시 업데이트하세요. 이전 버전에서는 어댑터 통합 오류가 발생해 광고가 송출되지 않을 수 있습니다.

수동 초기화

SDK 수동 초기화 방식이 바뀌었습니다. 앱 초기화 시 MobileAds.initialize()에 콜백을 넘겨야 합니다.

MobileAds.initialize(this) {
    // Now you can use ads
}
MobileAds.initialize(this, () -> {
    // Now you can use ads
});

배너

AdSize 클래스 이름이 BannerAdSize로 바뀌었습니다. fixedSize(int width, int height), flexibleSize(int width, int maxHeight), stickySize(int width) 메서드는 제거되었습니다.

광고 유형에 맞는 메서드를 사용하세요.

적응형 스티키 배너를 만들려면 BannerAdSize.stickySize(Context context, int width) 메서드를 사용합니다.

화면 상단 또는 하단에 붙는 작은 자동 갱신 배너입니다.

앱의 주 콘텐츠를 가리지 않으며 게임 앱에서 자주 쓰입니다.

스티키 배너 높이는 기기 화면 크기에 맞춰 자동으로 정해지며, 화면 높이의 15%를 넘지 않습니다.

Важно

버전 6.0.0부터 적응형 스티키 배너에 자동 새로고침이 지원됩니다.

스티키 배너에 자동 새로고침을 구현했다면 비활성화하세요.

적응형 인라인 배너를 만들려면 BannerAdSize.inlineSize(Context context, int width, int maxHeight) 메서드를 사용합니다.

적응형 인라인 배너는 기기별로 광고 크기를 최적화해 효율을 높이는 유연한 배너 형식입니다.

배너 높이는 자동으로 조정되며 기기 화면 높이까지 도달할 수 있습니다.

주로 피드형 앱이나 광고에 집중해도 되는 맥락에서 사용합니다.

하위 호환을 위해 fixedSize(int width, int height) 대신 fixedSize(Context context, int width, int height)를 추가했지만 사용은 권장하지 않습니다. 대신 inlineSize(Context context, int width, int maxHeight) 또는 stickySize(Context context, int width)를 사용하세요. SDK 6.0.0에서는 배너 높이가 광고 요청 전에 자동 계산되어 알려지므로, 레이아웃에 이 높이를 활용할 수 있습니다.

리워드 광고

광고 생성·로딩 방식이 바뀌었습니다. 이제 광고를 로드하는 RewardedAdLoader와, 로더 콜백(RewardedAdLoadListener)으로 받는 RewardedAd 객체를 제공합니다.

새 API 자세한 내용은 SDK 레퍼런스를 참고하세요.

광고 로딩

SDK 5

광고 로딩과 렌더링을 한 객체에서 처리합니다.

val rewardedAd = RewardedAd(this@Activity).apply {
    setAdUnitId("your-ad-unit-id")
    setAdEventListener(this)
    loadAd(adRequest)
}
final RewardedAd rewardedAd = new RewardedAd(this);
rewardedAd.setAdUnitId("your-ad-unit-id");
rewardedAd.setAdEventListener(this);
rewardedAd.loadAd(adRequest);

SDK 6

여러 광고를 로드하려면 RewardedAdLoader를 사용합니다. 광고 로딩 시 Activity 컨텍스트를 넘길 필요가 없습니다.

광고가 로드되면(onAdLoaded(rewardedAd: RewardedAd) 호출) 표시가 끝나기 전에 로드된 RewardedAd에 대한 참조를 저장하세요.

val loader = RewardedAdLoader(context).apply {
    setAdLoadListener(object : RewardedAdLoadListener {
        override fun onAdLoaded(rewardedAd: RewardedAd) {
            // Save rewardedAd to a local variable
            // Now rewardedAd is ready to be shown
        }

        override fun onAdFailedToLoad(adRequestError: AdRequestError) {}
    })
}
loader.loadAd(AdRequestConfiguration.Builder("your-ad-unit-id").build())
final RewardedAdLoader loader = new RewardedAdLoader(this);
loader.setAdLoadListener(new RewardedAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
        // Save rewardedAd to a local variable
        // Now rewardedAd is ready to be shown
    }

    @Override
    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError) {}
});
loader.loadAd(new AdRequestConfiguration.Builder("your-ad-unit-id").build());

광고 렌더링

SDK 5

광고를 보이기 전에 로드 여부를 확인합니다.

if (rewardedAd.isLoaded()) {
    rewardedAd.show()
}
if (rewardedAd.isLoaded()) {
    rewardedAd.show();
}

SDK 6

광고 로드 여부를 따로 확인할 필요가 없습니다.

로더의 onAdLoaded 콜백으로 RewardedAd 인스턴스를 받은 뒤에는 바로 렌더링할 수 있는 상태입니다.

광고를 표시하려면 Activity를 넘깁니다.

rewardedAd.show(activity)
rewardedAd.show(activity);

RewardedAd 광고 객체

SDK 5

광고 로딩과 렌더링을 하나의 클래스로 묶습니다.

SDK 6

로드된 광고를 나타내는 인터페이스입니다. 광고 정보를 가져오는 getInfo() 메서드가 추가되었습니다.

interface RewardedAd {
    fun setAdEventListener(rewardedAdEventListener: RewardedAdEventListener)

    fun show(activity: Activity)

    fun getInfo(): AdInfo
}
interface RewardedAd {
    void setAdEventListener(@Nullable RewardedAdEventListener rewardedAdEventListener);

    void show(@NonNull Activity activity);

    @NonNull
    AdInfo getInfo();
}

콜백 메서드

SDK 5

이벤트 로딩과 렌더링을 하나의 콜백 인터페이스로 묶습니다.

interface RewardedAdEventListener {

    fun onLoaded()

    fun onRewarded(reward: Reward)

    fun onAdFailedToLoad(adRequestError: AdRequestError)

    fun onAdShown()

    fun onAdDismissed()

    fun onLeftApplication()

    fun onReturnedToApplication()
}
interface RewardedAdEventListener {

    public void onLoaded();

    public void onRewarded(@NonNull Reward reward);

    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError);

    public void onAdShown();

    public void onAdDismissed();

    public void onLeftApplication();

    public void onReturnedToApplication();
}

SDK 6

RewardedAdEventListener 인터페이스는 로딩용 RewardedAdLoadListener 콜백과 렌더링용 RewardedAdEventListener로 나뉩니다.

onLeftApplication()onReturnedToApplication() 메서드는 제거되었습니다.

onAdFailedToShow(AdError) 메서드가 추가되었습니다.

interface RewardedAdLoadListener {
    fun onAdLoaded(rewardedAd: RewardedAd)

    fun onAdFailedToLoad(adRequestError: AdRequestError)
}

interface RewardedAdEventListener {
    fun onAdShown()

    fun onAdFailedToShow(adError: AdError)

    fun onAdDismissed()

    fun onAdClicked()

    fun onAdImpression(impressionData: ImpressionData)

    fun onRewarded(reward: Reward)
}
interface RewardedAdLoadListener {
    void onAdLoaded(@NonNull RewardedAd rewardedAd);

    void onAdFailedToLoad(@NonNull AdRequestError adRequestError);
}

interface RewardedAdEventListener {
    void onAdShown();

    void onAdFailedToShow(@NonNull AdError adError);

    void onAdDismissed();

    void onAdClicked();

    void onAdImpression(@Nullable ImpressionData impressionData);

    void onRewarded(@NonNull Reward reward);
}

RewardedAd 객체 정리

SDK 5

onDestroy()를 호출하고 광고 객체 참조를 더 이상 보관하지 않습니다.

SDK 6

onDestroy() 메서드는 제거되었습니다.

광고 객체를 정리하려면 rewardedAd.setAdEventListener에 리스너를 설정하는 함수에 null을 넘기고, 광고 객체 참조를 해제합니다.

private fun destroyRewardedAd() {
    rewardedAd?.setAdEventListener(null)
    rewardedAd = null
}
private void destroyRewardedAd() {
    if (mRewardedAd != null) {
        mRewardedAd.setAdEventListener(null);
        mRewardedAd = null;
    }
}

전면 광고

광고 생성·로딩 방식이 바뀌었습니다. 이제 광고를 로드하는 InterstitialAdLoader와, 로더 콜백(InterstitialAdLoadListener)으로 받는 InterstitialAd 객체를 제공합니다.

새 API 자세한 내용은 SDK 레퍼런스를 참고하세요.

광고 로딩

SDK 5

광고 로딩과 렌더링을 한 객체에서 처리합니다.

val interstitialAd = InterstitialAd(this@Activity).apply {
setAdUnitId("your-ad-unit-id")
setAdEventListener(this)
loadAd(adRequest)
}
final InterstitialAd interstitialAd = new InterstitialAd(this);
interstitialAd.setAdUnitId("your-ad-unit-id");
interstitialAd.setAdEventListener(this);
interstitialAd.loadAd(adRequest);

SDK 6

여러 광고를 로드하려면 InterstitialAdLoader를 사용합니다. 광고 로딩 시 Activity 컨텍스트를 넘길 필요가 없습니다.

광고가 로드되면(onAdLoaded(interstitialAd: InterstitialAd) 호출) 표시가 끝나기 전에 로드된 InterstitialAd에 대한 참조를 저장하세요.

val loader = InterstitialAdLoader(context).apply {
    setAdLoadListener(object : InterstitialAdLoadListener {
        override fun onAdLoaded(interstitialAd: InterstitialAd) {
            // Save interstitialAd to a local variable
            // Now interstitialAd is ready to be shown
        }

        override fun onAdFailedToLoad(adRequestError: AdRequestError) {}
    })
}
loader.loadAd(AdRequestConfiguration.Builder("your-ad-unit-id").build())
final InterstitialAdLoader loader = new InterstitialAdLoader(this);
loader.setAdLoadListener(new InterstitialAdLoadListener() {
    @Override
    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
        // Save interstitialAd to a local variable
        // Now interstitialAd is ready to show
    }

    @Override
    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError) {}
});
loader.loadAd(new AdRequestConfiguration.Builder("your-ad-unit-id").build());

광고 렌더링

SDK 5

if (interstitialAd.isLoaded()) {
    interstitialAd.show()
}
if (interstitialAd.isLoaded()) {
    interstitialAd.show();
}

SDK 6

광고 로드 여부를 따로 확인할 필요가 없습니다.

로더의 onAdLoaded 콜백으로 InterstitialAd 인스턴스를 받은 뒤에는 바로 렌더링할 수 있는 상태입니다.

광고를 표시하려면 Activity를 넘깁니다.

interstitialAd.show(activity)
interstitialAd.show(activity);

InterstitialAd 광고 객체

SDK 5

광고 로딩과 렌더링을 하나의 클래스로 묶습니다.

SDK 6

로드된 광고를 나타내는 인터페이스입니다. 광고 정보를 가져오는 getInfo() 메서드가 추가되었습니다.

interface InterstitialAd {
    fun setAdEventListener(interstitialAdEventListener: InterstitialAdEventListener)

    fun show(activity: Activity)

    fun getInfo(): AdInfo
}
interface InterstitialAd {
    void setAdEventListener(@Nullable InterstitialAdEventListener interstitialAdEventListener);

    void show(@NonNull Activity activity);

    @NonNull
    AdInfo getInfo();
}

콜백 메서드

SDK 5

이벤트 로딩과 렌더링을 하나의 콜백 인터페이스로 묶습니다.

interface InterstitialAdEventListener {

    fun onLoaded()

    fun onAdFailedToLoad(adRequestError: AdRequestError)

    fun onAdShown()

    fun onAdDismissed()

    fun onLeftApplication()

    fun onReturnedToApplication()
}
interface InterstitialAdEventListener {

    public void onLoaded();

    public void onAdFailedToLoad(@NonNull AdRequestError adRequestError);

    public void onAdShown();

    public void onAdDismissed();

    public void onLeftApplication();

    public void onReturnedToApplication();
}

SDK 6

InterstitialAdEventListener 인터페이스는 로딩용 InterstitialAdLoadListener 콜백과 렌더링용 InterstitialAdEventListener 메서드로 나뉩니다.

onLeftApplication()onReturnedToApplication() 메서드는 제거되었습니다.

onAdFailedToShow(AdError) 메서드가 추가되었습니다.

interface InterstitialAdLoadListener {
    fun onAdLoaded(interstitialAd: InterstitialAd)

    fun onAdFailedToLoad(adRequestError: AdRequestError)
}

interface InterstitialAdEventListener {
    fun onAdShown()

    fun onAdFailedToShow(adError: AdError)

    fun onAdDismissed()

    fun onAdClicked()

    fun onAdImpression(impressionData: ImpressionData)
}
interface InterstitialAdLoadListener {
    void onAdLoaded(@NonNull InterstitialAd interstitialAd);

    void onAdFailedToLoad(@NonNull AdRequestError adRequestError);
}

interface InterstitialAdEventListener {
    void onAdShown();

    void onAdFailedToShow(@NonNull AdError adError);

    void onAdDismissed();

    void onAdClicked();

    void onAdImpression(@Nullable ImpressionData impressionData);
}

InterstitialAd 객체 정리

SDK 5

onDestroy()를 호출하고 광고 객체 참조를 더 이상 보관하지 않습니다.

SDK 6

onDestroy() 메서드는 제거되었습니다.

광고 객체를 정리하려면 interstitialAd.setAdEventListener에 리스너를 설정하는 함수에 null을 넘기고, 광고 객체 참조를 해제합니다.

private fun destroyInterstitialAd() {
    interstitialAd?.setAdEventListener(null)
    interstitialAd = null
}
private void destroyInterstitialAd() {
    if (mInterstitialAd != null) {
        mInterstitialAd.setAdEventListener(null);
        mInterstitialAd = null;
    }
}

앱 오픈 광고

새 광고 형식인 앱 오픈 광고가 추가되었습니다. 자세한 내용은 앱 오픈 광고를 참고하세요.

Mediation

Важно

사용 중인 Mediation 어댑터와 타사 미디에이션 네트워크용 어댑터를 최신 버전으로 반드시 업데이트하세요. 이전 버전에서는 어댑터 통합 오류가 발생해 광고가 송출되지 않을 수 있습니다.

새 어댑터 버전

SDK 6.0.1 기준 Mediation 어댑터의 현재 버전:

"com.yandex.ads.mediation:mobileads-adcolony": "4.8.0.6",
"com.yandex.ads.mediation:mobileads-applovin": "11.11.2.0",
"com.yandex.ads.mediation:mobileads-chartboost": "9.3.1.0",
"com.yandex.ads.mediation:mobileads-google": "22.2.0.0",
"com.yandex.ads.mediation:mobileads-inmobi": "10.5.5.0",
"com.yandex.ads.mediation:mobileads-ironsource": "7.4.0.0",
"com.yandex.ads.mediation:mobileads-mintegral": "16.4.71.1",
"com.yandex.ads.mediation:mobileads-mytarget": "5.18.0.0",
"com.yandex.ads.mediation:mobileads-pangle": "5.3.0.4.1",
"com.yandex.ads.mediation:mobileads-startapp": "4.11.0.2",
"com.yandex.ads.mediation:mobileads-tapjoy": "13.1.2.0",
"com.yandex.ads.mediation:mobileads-unityads": "4.8.0.0",
"com.yandex.ads.mediation:mobileads-vungle": "6.12.1.3",

SDK 6.0.1 기준 타사 미디에이션 플랫폼용 어댑터의 현재 버전:

"com.yandex.ads.adapter:admob-mobileads": "6.0.1.0",
"com.yandex.ads.adapter:ironsource-mobileads": "6.0.1.0"

Google AdMob (ex. AdMob) 어댑터 아티팩트 이름 변경

com.yandex.ads.mediation:mobileads-admob 아티팩트 이름이 com.yandex.ads.mediation:mobileads-google로 바뀌었습니다.

표준 Mediation 빌드를 사용하면 추가 작업이 필요 없습니다. 어댑터를 수동으로 추가하는 경우 프로젝트의 Gradle 종속 항목을 교체하세요.

SDK 5

implementation 'com.yandex.ads.mediation:mobileads-admob:<version>'

SDK 6

implementation 'com.yandex.ads.mediation:mobileads-google:<version>'

연동 전체 예시는 아래에서 확인할 수 있습니다.