Android(Kotlin)에서 Google AdMob (ex. AdMob)에서 Yandex Mediation으로 마이그레이션

Android에서 Google AdMob (ex. AdMob) 광고를 Yandex Ads Mediation으로 교체하려면 코드에 다음 변경 사항을 적용하세요.

SDK 통합

Yandex Mobile Ads SDK에 대한 종속성을 앱 수준에서 모듈의 Gradle 파일에 추가하세요. 보통 app/build.gradle입니다.

dependencies {
    implementation 'com.google.android.gms:play-services-ads:22.5.0'
}
dependencies {
    implementation 'com.yandex.android:mobileads:6.2.0'
    implementation 'com.yandex.ads.mediation:mobileads-admob:22.5.0.0'
    implementation 'com.google.android.gms:play-services-ads:22.5.0'
}

광고를 로드하기 전에 initialize() 메서드를 사용하여 라이브러리를 초기화하세요.

import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.initialization.InitializationStatus

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {
            fun onInitializationComplete(initializationStatus: InitializationStatus?) {

            }
        }
    }
}
import com.yandex.mobile.ads.common.MobileAds

class MainActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
         MobileAds.initialize(this) {

         }
     }
 }

광고 형식

전면 광고

광고 로드

import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.interstitial.InterstitialAd
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback

class MainActivity : AppCompatActivity() {
    private var interstitialAd: InterstitialAd? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {
            fun onInitializationComplete(initializationStatus: InitializationStatus?) {
            }
        }
        val adRequest: AdRequest = Builder().build()

        InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", adRequest,
            object : InterstitialAdLoadCallback() {
                override fun onAdLoaded(interstitialAdLoaded: InterstitialAd) {
                    // interstitialAd 참조는
                    // 광고가 로드될 때까지 null입니다.
                    interstitialAd = interstitialAdLoaded
                    Log.i("TAG", "onAdLoaded")
                }

                override fun onAdFailedToLoad(loadAdError: LoadAdError) {
                    // 오류를 처리합니다
                    Log.i("TAG", loadAdError?.toString())
                    interstitialAd = null
                }
            })
    }
}
import com.yandex.mobile.ads.common.MobileAds
import com.yandex.mobile.ads.interstitial.InterstitialAd
import com.yandex.mobile.ads.common.AdRequest

class MainActivity : AppCompatActivity() {
    private var interstitialAd: InterstitialAd? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {

        }

        val adRequest: AdRequest = Builder().build()

        interstitialAd = InterstitialAd(this)
        interstitialAd?.setAdUnitId("demo-interstitial-yandex")
        interstitialAd?.loadAd(adRequest)
    }
}

광고 콜백 설정

광고를 표시하기 전에 콜백을 설정하여 광고와 관련된 이벤트를 추적하세요.

import com.google.android.gms.ads.AdError
import com.google.android.gms.ads.FullScreenContentCallback

interstitialAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
    override fun onAdDismissedFullScreenContent() {
        // 전체 화면 콘텐츠가 해제되었을 때 호출됩니다.
        Log.d("TAG", "The ad was dismissed.")
    }

    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
        // 전체 화면 콘텐츠를 표시하는 데 실패했을 때 호출됩니다.
        Log.d("TAG", "The ad failed to show.")
    }

    override fun onAdShowedFullScreenContent() {
        // 전체 화면 콘텐츠가 표시되었을 때 호출됩니다.
        // 다시 표시되지 않도록 참조를
        // null로 설정하십시오.
        interstitialAd = null
        Log.d("TAG", "The ad was shown.")
    }
}
import com.yandex.mobile.ads.common.ImpressionData
import com.yandex.mobile.ads.common.AdRequestError

interstitialAd?.setInterstitialAdEventListener(object : InterstitialAdEventListener {
    override fun onAdLoaded() {
        Log.i("TAG", "onAdLoaded")
    }

    override fun onAdFailedToLoad(error: AdRequestError) {
        // 오류를 처리합니다
        Log.i("TAG", error.description)
    }

    override fun onAdDismissed() {
        // 전면 광고가 해제되었을 때 호출됩니다.
        Log.d("TAG", "The ad was dismissed.")
    }

    override fun onAdShown() {
        // 전면 광고가 표시되었을 때 호출됩니다.
        Log.d("TAG", "The ad was shown.")
    }

    override fun onImpression(impressionData: ImpressionData?) {
        // 노출이 추적되었을 때 호출됩니다
        Log.d("TAG", "The ad imprassion was tracked.")
    }

    override fun onAdClicked() {
        // 사용자가 광고를 클릭했을 때 호출됩니다.
        Log.d("TAG", "The ad was clicked.")
    }

    override fun onReturnedToApplication() {
        // 클릭 후 사용자가 애플리케이션으로 돌아왔을 때 호출됩니다.
        Log.d("TAG", "The ad was clicked.")
    }

    override fun onLeftApplication() {
        // 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
        Log.d("TAG", "The ad left application after click.")
    }
})

광고 표시

전면 광고는 앱 작동이 자연스럽게 중단되는 시점에 표시되어야 합니다. 예를 들어, 게임 레벨 사이 또는 사용자가 작업을 완료한 후가 있습니다. 전면 광고를 표시하려면 show() 메서드를 사용하세요.

if (interstitialAd != null) {
    interstitialAd?.show(MyActivity.this)
} else {
     Log.d("TAG", "The interstitial ad wasn't ready yet.")
}
if (interstitialAd?.isLoaded == true) {
    interstitialAd?.show()
} else {
    Log.d("TAG", "The interstitial ad wasn't ready yet.")
}

레이아웃에 AdView 객체 추가

배너를 표시하려면 적절한 Activity 또는 Fragment에 BannerAdView를 배치하세요. 이를 수행하려면 해당 레이아웃 XML 파일에 추가합니다.

# main_activity.xml
...
  <com.google.android.gms.ads.AdView
      xmlns:ads="http://schemas.android.com/apk/res-auto"
      android:id="@+id/adView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_alignParentBottom="true"
      ads:adSize="BANNER"
      ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
  </com.google.android.gms.ads.AdView>
...
# main_activity.xml
...
  <com.yandex.mobile.ads.banner.BannerAdView
      xmlns:ads="http://schemas.android.com/apk/res-auto"
      android:id="@+id/adView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_alignParentBottom="true">
  </com.yandex.mobile.ads.banner.BannerAdView>
...

코드에서 필요한 속성을 지정하세요.

// ...
bannerAdView = (BannerAdView) findViewById(R.id.adView)
bannerAdView.setAdUnitId("demo-banner-yandex")
bannerAdView.setAdSize(AdSize.stickySize(context, 320))
// ...
  • adSize: 원하는 배너 크기.

  • adUnitId: 광고 단위 고유 ID. 앱의 배너가 Activity의 다른 인스턴스에서 표시되는 경우, Partner Interface의 각 배너에 대해 별도의 광고 단위 ID를 생성하는 것이 좋습니다.

또한 프로그래매틱 방식으로 BannerAdView 객체를 생성할 수 있습니다.

import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView

val adView = AdView(this)
adView.setAdSize(AdSize.BANNER)
adView.adUnitId = "ca-app-pub-3940256099942544/6300978111"
// TODO: adView를 뷰 계층 구조에 추가합니다.
import com.yandex.mobile.ads.banner.AdSize
import com.yandex.mobile.ads.banner.BannerAdView

val adView = BannerAdView(this)
adView.setAdSize(AdSize.stickySize(context, 320))
adView.setAdUnitId("demo-banner-yandex")
// TODO: adView를 뷰 계층 구조에 추가합니다.

광고 로드

import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.initialization.InitializationStatus

class MainActivity : AppCompatActivity() {
    private var adView: AdView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {
            fun onInitializationComplete(initializationStatus: InitializationStatus?) {

            }
        }

        adView = findViewById<AdView>(R.id.adView)
        val adRequest = AdRequest.Builder().build()
        adView?.loadAd(adRequest)
    }
}
import com.yandex.mobile.ads.banner.BannerAdView
import com.yandex.mobile.ads.common.AdRequest
import com.yandex.mobile.ads.common.MobileAds

class MainActivity : AppCompatActivity() {
    private var adView: BannerAdView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {

        }

        adView = findViewById<BannerAdView>(R.id.adView)
        val adRequest: AdRequest = Builder().build()
        adView?.loadAd(adRequest)
    }
}

광고 표시 이벤트 구독

광고의 동작을 사용자 정의하기 위해 광고 수명 주기 이벤트에 구독할 수 있습니다.

import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.LoadAdError

adView?.adListener = object : AdListener() {
    override fun onAdLoaded() {
        // 광고 로드가 완료되었을 때 실행할 코드입니다.
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
        // 광고 요청이 실패했을 때 실행할 코드입니다.
    }

    override fun onAdOpened() {
        // 광고가 화면을 덮는 오버레이를 열 때
        // 실행할 코드입니다.
    }

    override fun onAdClicked() {
        // 사용자가 광고를 클릭했을 때 실행할 코드입니다.
    }

    override fun onAdClosed() {
        // 사용자가 광고를 탭한 후
        // 앱으로 돌아가려고 할 때 실행할 코드입니다.
    }
}
import com.yandex.mobile.ads.common.AdRequestError
import com.yandex.mobile.ads.common.ImpressionData

adView?.setBannerAdEventListener(object : BannerAdEventListener {
    override fun onAdLoaded() {
        // 광고 로드가 완료되었을 때 실행할 코드입니다.
    }

    override fun onAdFailedToLoad(error: AdRequestError) {
        // 광고 요청이 실패했을 때 실행할 코드입니다.
    }

    override fun onAdClicked() {
        // 사용자가 광고를 클릭했을 때 실행할 코드입니다.
    }

    override fun onImpression(impressionData: ImpressionData?) {
        // 노출이 추적되었을 때 호출됩니다
    }

    override fun onLeftApplication() {
        // 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
    }

    override fun onReturnedToApplication() {
        // 사용자가 광고를 탭한 후
        // 앱으로 돌아가려고 할 때 실행할 코드입니다.
    }
})

보상형 광고

보상형 광고 객체 로드

import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.LoadAdError
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.initialization.InitializationStatus
import com.google.android.gms.ads.rewarded.RewardedAd
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback

class MainActivity : AppCompatActivity() {
    private var rewardedAd: RewardedAd? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {
            fun onInitializationComplete(initializationStatus: InitializationStatus?) {
            }
        }

        val adRequest: AdRequest = Builder().build()

        RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917",
            adRequest, object : RewardedAdLoadCallback() {
                override fun onAdFailedToLoad(loadAdError: LoadAdError) {
                    // 오류를 처리합니다.
                    Log.d("TAG", loadAdError?.toString())
                    rewardedAd = null
                }

                override fun onAdLoaded(rewardedAd: RewardedAd) {
                    rewardedAd = rewardedAd
                    Log.d("TAG", "Ad was loaded.")
                }
            })
    }
}
import com.yandex.mobile.ads.common.AdRequest
import com.yandex.mobile.ads.common.MobileAds
import com.yandex.mobile.ads.rewarded.RewardedAd

class MainActivity : AppCompatActivity() {
    private var rewardedAd: RewardedAd? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {

        }

        val adRequest: AdRequest = Builder().build()
        rewardedAd = RewardedAd(this)
        rewardedAd?.setAdUnitId("demo-rewarded-yandex")
    }
}

광고 콜백 설정

import com.google.android.gms.ads.FullScreenContentCallback
import com.google.android.gms.ads.AdError

rewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
    override fun onAdShowedFullScreenContent() {
        // 광고가 표시되었을 때 호출됩니다.
        Log.d(TAG, "Ad was shown.")
    }

    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
        // 광고 표시에 실패했을 때 호출됩니다.
        Log.d(TAG, "Ad failed to show.")
    }

    override fun onAdDismissedFullScreenContent() {
        // 광고가 해제되었을 때 호출됩니다.
        // 광고를 다시 표시하지 않도록 광고 참조를 null로 설정합니다.
        Log.d(TAG, "Ad was dismissed.")
    }
}
import com.yandex.mobile.ads.rewarded.RewardedAdEventListener
import com.yandex.mobile.ads.common.AdRequestError
import com.yandex.mobile.ads.rewarded.Reward

rewardedAd?.setRewardedAdEventListener(object : RewardedAdEventListener {
    override fun onAdLoaded() {
        Log.i("TAG", "onAdLoaded")
    }

    override fun onAdFailedToLoad(error: AdRequestError) {
        // 오류를 처리합니다
        Log.i("TAG", error.description)
    }

    override fun onRewarded(reward: Reward) {
        // 보상을 처리합니다.
        Log.d("TAG", "The user earned the reward.")
        val rewardAmount: Int = reward.amount
        val rewardType: String = reward.type
    }

    override fun onAdDismissed() {
        // 전면 광고가 해제되었을 때 호출됩니다.
        Log.d("TAG", "The ad was dismissed.")
    }

    override fun onAdShown() {
        // 전면 광고가 표시되었을 때 호출됩니다.
        Log.d("TAG", "The ad was shown.")
    }

    override fun onImpression(impressionData: ImpressionData?) {
        // 노출이 추적되었을 때 호출됩니다
        Log.d("TAG", "The ad impression was tracked.")
    }

    override fun onAdClicked() {
        // 사용자가 광고를 클릭했을 때 호출됩니다.
        Log.d("TAG", "The ad was clicked.")
    }

    override fun onReturnedToApplication() {
        // 클릭 후 사용자가 애플리케이션으로 돌아왔을 때 호출됩니다.
        Log.d("TAG", "The ad was clicked.")
    }

    override fun onLeftApplication() {
        // 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
        Log.d("TAG", "The ad left application after click.")
    }
})

광고 표시

보상형 광고를 표시하려면 RewardedAdEventListener 객체를 사용하여 보상 이벤트를 처리하세요.

rewardedAd?.let { ad ->
  ad.show(this, OnUserEarnedRewardListener { rewardItem ->
    // 보상을 처리합니다.
    val rewardAmount = rewardItem.amount
    val rewardType = rewardItem.type
    Log.d(TAG, "User earned the reward.")
  })
} ?: run {
  Log.d(TAG, "The rewarded ad wasn't ready yet.")
}
if (rewardedAd?.isLoaded == true) {
    rewardedAd?.show()
} else {
    Log.d("TAG", "The rewarded ad wasn't ready yet.")
}

지원 문의

Next