在 Android (Kotlin) 上从 Google AdMob (ex. AdMob) 迁移到 Yandex 聚合
要在 Android 上使用 Yandex Ads 聚合替换 Google AdMob (ex. AdMob) 广告,请对您的代码进行以下更改。
集成SDK
将 Yandex Mobile Ads SDK 的依赖项添加到应用级别的模块的 Gradle 文件中(通常为 app/build.gradle
)。
Google AdMob (ex. AdMob)
Yandex Ads
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()
方法初始化库:
Google AdMob (ex. AdMob)
Yandex Ads
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) {
}
}
}
广告格式
插屏广告
加载广告
Google AdMob (ex. AdMob)
Yandex Ads
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)
}
}
设置广告回调
在展示广告之前,设置回调以跟踪与广告相关的事件。
Google AdMob (ex. AdMob)
Yandex Ads
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()
方法。
Google AdMob (ex. AdMob)
Yandex Ads
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 对象添加到布局中
要显示横幅,请将“BannerAdView”放置在适当的活动或片段中。为此,请将其添加到相应的布局 XML 文件中:
Google AdMob (ex. AdMob)
Yandex Ads
# 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。如果您应用中的横幅显示在活动的不同实例中,我们建议在 Partner Interface 中为每个横幅创建单独的广告单元 ID。
您还可以通过编程方式创建 BannerAdView
对象:
Google AdMob (ex. AdMob)
Yandex Ads
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"
// 待办:将 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")
// 待办:将 adView 添加到您的视图层次结构中。
加载广告
Google AdMob (ex. AdMob)
Yandex Ads
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)
}
}
订阅广告展示事件
要自定义广告的行为,您可以订阅广告生命周期事件。
Google AdMob (ex. AdMob)
Yandex Ads
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() {
// 用户在点击广告后即将返回
// 应用时执行的代码。
}
})
激励广告
加载激励广告对象
Google AdMob (ex. AdMob)
Yandex Ads
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")
}
}
设置广告回调
Google AdMob (ex. AdMob)
Yandex Ads
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
对象来处理奖励事件。
Google AdMob (ex. AdMob)
Yandex Ads
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.")
}
这篇文章是否有用?
下一篇