Android?Admob接入原理及完整教程示例
添加Admob SDK
最近公司的項目新接入了Admob廣告SDK,本文介紹下Admob插屏、激勵視頻、Banner等三種廣告的接入方法。
(1)在app module下的build.gradle中添加代碼,如下:
dependencies {
implementation 'com.google.android.gms:play-services-ads:21.4.0'
}
(2)在AndroidManifest中添加代碼,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>
</manifest>
初始化SDK
通過MobileAds的initialize方法進(jìn)行初始化,代碼如下:
class AdmobExampleActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MobileAds.initialize(this, object : OnInitializationCompleteListener {
override fun onInitializationComplete(initializationStatus: InitializationStatus) {
val readyAdapter = initializationStatus.adapterStatusMap.entries.find {
// 判斷適配器初始化的狀態(tài)
// 準(zhǔn)備就緒 AdapterStatus.State.READY
// 沒準(zhǔn)備好 AdapterStatus.State.NOT_READY
it.value.initializationState == AdapterStatus.State.READY
}
// 有任意一種適配器初始化成功就可以開始加載廣告
if (readyAdapter != null) {
// 適配器的名稱
val adapterName = readyAdapter.key
}
}
})
}
}
插屏廣告
插屏廣告的加載、展示等代碼如下:
class AdmobExampleActivity : AppCompatActivity() {
private lateinit var binding: LayoutAdmobExampleActivityBinding
private var interstitialAd: InterstitialAd? = null
// 插屏廣告加載狀態(tài)的回調(diào)
private val interstitialAdLoadCallback = object : InterstitialAdLoadCallback() {
override fun onAdLoaded(interstitialAd: InterstitialAd) {
super.onAdLoaded(interstitialAd)
// 加載成功
this@AdmobExampleActivity.interstitialAd = interstitialAd
// 設(shè)置廣告事件回調(diào)
this@AdmobExampleActivity.interstitialAd?.fullScreenContentCallback = interstitialAdCallback
// 顯示插屏廣告
this@AdmobExampleActivity.interstitialAd?.show(this@AdmobExampleActivity)
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
super.onAdFailedToLoad(loadAdError)
// 加載失敗
}
}
// 插屏廣告相關(guān)事件回調(diào)
private val interstitialAdCallback = object : FullScreenContentCallback() {
override fun onAdImpression() {
super.onAdImpression()
// 被記錄為展示成功時調(diào)用
}
override fun onAdShowedFullScreenContent() {
super.onAdShowedFullScreenContent()
// 顯示時調(diào)用
}
override fun onAdClicked() {
super.onAdClicked()
// 被點擊時調(diào)用
}
override fun onAdDismissedFullScreenContent() {
super.onAdDismissedFullScreenContent()
// 隱藏時調(diào)用,此時銷毀當(dāng)前的插屏廣告對象,重新加載插屏廣告
interstitialAd = null
loadInterstitialAd()
}
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
super.onAdFailedToShowFullScreenContent(adError)
// 展示失敗時調(diào)用,此時銷毀當(dāng)前的插屏廣告對象,重新加載插屏廣告
interstitialAd = null
loadInterstitialAd()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MobileAds.initialize(this, object : OnInitializationCompleteListener {
override fun onInitializationComplete(initializationStatus: InitializationStatus) {
...
loadInterstitialAd()
}
})
}
private fun loadInterstitialAd() {
// adUnitId為Admob后臺創(chuàng)建的插屏廣告的id
InterstitialAd.load(this, "adUnitId", AdRequest.Builder().build(), interstitialAdLoadCallback)
}
}
激勵視頻廣告
激勵視頻廣告的加載、展示等代碼如下:
class AdmobExampleActivity : AppCompatActivity() {
private lateinit var binding: LayoutAdmobExampleActivityBinding
private var rewardedAd: RewardedAd? = null
private val rewardedAdLoadCallback = object : RewardedAdLoadCallback() {
override fun onAdLoaded(rewardedAd: RewardedAd) {
super.onAdLoaded(rewardedAd)
// 加載成功
this@AdmobExampleActivity.rewardedAd = rewardedAd
// 設(shè)置廣告事件回調(diào)
this@AdmobExampleActivity.rewardedAd?.fullScreenContentCallback = rewardedVideoAdCallback
// 展示廣告
this@AdmobExampleActivity.rewardedAd?.show(this@AdmobExampleActivity, rewardedVideoAdEarnedCallback)
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
super.onAdFailedToLoad(loadAdError)
// 加載失敗
}
}
private val rewardedVideoAdCallback = object : FullScreenContentCallback() {
override fun onAdImpression() {
super.onAdImpression()
// 被記錄為展示成功時調(diào)用
}
override fun onAdShowedFullScreenContent() {
super.onAdShowedFullScreenContent()
// 顯示時調(diào)用
}
override fun onAdClicked() {
super.onAdClicked()
// 被點擊時調(diào)用
}
override fun onAdDismissedFullScreenContent() {
super.onAdDismissedFullScreenContent()
// 隱藏時調(diào)用,此時銷毀當(dāng)前的激勵視頻廣告對象,重新加載激勵視頻廣告
rewardedAd = null
loadRewardedVideoAd()
}
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
super.onAdFailedToShowFullScreenContent(adError)
// 展示失敗時調(diào)用,此時銷毀當(dāng)前的激勵視頻廣告對象,重新加載激勵視頻廣告
rewardedAd = null
loadRewardedVideoAd()
}
}
private val rewardedVideoAdEarnedCallback = OnUserEarnedRewardListener {
// 用戶獲得獎勵回調(diào)
// 獎勵的類型
val type = it.type
// 獎勵的金額
val amount = it.amount
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MobileAds.initialize(this, object : OnInitializationCompleteListener {
override fun onInitializationComplete(initializationStatus: InitializationStatus) {
...
loadRewardedVideoAd()
}
})
binding.btnShowInterstitialAd.setOnClickListener { showInterstitialAd() }
}
private fun loadRewardedVideoAd() {
// adUnitId為Admob后臺創(chuàng)建的激勵視頻廣告的id
RewardedAd.load(this, "adUnitId", AdRequest.Builder().build(), rewardedAdLoadCallback)
}
}
Banner廣告
Banner廣告的加載、展示等代碼如下:
class AdmobExampleActivity : AppCompatActivity() {
private lateinit var binding: LayoutAdmobExampleActivityBinding
private var bannerAdView: AdView? = null
private val bannerListener = object : AdListener() {
override fun onAdLoaded() {
super.onAdLoaded()
// 廣告加載成功
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
super.onAdFailedToLoad(loadAdError)
// 廣告加載失敗
}
override fun onAdImpression() {
super.onAdImpression()
// 被記錄為展示成功時調(diào)用
}
override fun onAdClicked() {
super.onAdClicked()
// 被點擊時調(diào)用
}
override fun onAdOpened() {
super.onAdOpened()
// 廣告落地頁打開時調(diào)用
}
override fun onAdClosed() {
super.onAdClosed()
// 廣告落地頁關(guān)閉時調(diào)用
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MobileAds.initialize(this, object : OnInitializationCompleteListener {
override fun onInitializationComplete(initializationStatus: InitializationStatus) {
createBannerAdView()
}
})
}
private fun createBannerAdView() {
// 獲取頁面的根布局
val rootView = findViewById<FrameLayout>(android.R.id.content)
bannerAdView = AdView(this)
bannerAdView?.run {
// 設(shè)置Banner的尺寸
setAdSize(AdSize.BANNER)
// adUnitId為Admob后臺創(chuàng)建的Banner廣告的id
adUnitId = "adUnitId"
// 設(shè)置廣告事件回調(diào)
adListener = bannerListener
val bannerViewLayoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)
// 設(shè)置顯示在頁面的底部中間
bannerViewLayoutParams.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
layoutParams = bannerViewLayoutParams
alpha = 0f
// 把 Banner Ad 添加到根布局
rootView.addView(this)
//加載廣告
loadAd(AdRequest.Builder().build())
}
}
}
測試廣告
注意,Admob官方聲明了在開發(fā)過程中啟用測試廣告非常重要,這樣您就可以在不向 Google 廣告客戶收費的情況下點擊廣告。如果您在非測試模式下點擊過多廣告,可能會導(dǎo)致您的帳號因無效活動而被舉報。
想要測試廣告的效果,可以通過兩種方式。
- 使用谷歌提供的測試id
谷歌提供了一整套測試id,使用這套id可以獲取Admob的測試廣告。
// 測試應(yīng)用id ApplicationId:"ca-app-pub-3940256099942544~3347511713" // 測試插屏廣告id InterstitialUnitId:"ca-app-pub-3940256099942544/1033173712" // 測試激勵視頻廣告id RewardedVideoUnitId:"ca-app-pub-3940256099942544/5224354917" // 測試Banner廣告id BannerUnitId:"ca-app-pub-3940256099942544/6300978111"
- 使用自己應(yīng)用的id,并注冊測試設(shè)備
如果想要使用自己應(yīng)用的id進(jìn)行測試,可以通過注冊測試設(shè)備來拉取測試廣告。
集成好SDK后,安裝App,查看tag為Ads的日志,可以看到測試設(shè)備id,如下:

獲取測試設(shè)備id后,通過代碼注冊測試設(shè)備,如下:
MobileAds.setRequestConfiguration(RequestConfiguration.Builder()
.setTestDeviceIds(arrayListOf("deviceId"))
.build())
注冊好測試設(shè)備后重新安裝App即可。
示例
整合之后,使用Admob提供的測試設(shè)備做了個示例demo。
效果如圖:

以上就是Android Admob接入原理及完整教程示例的詳細(xì)內(nèi)容,更多關(guān)于Android Admob接入的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
android實現(xiàn)簡易登錄注冊界面及邏輯設(shè)計
這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)簡易登錄注冊界面及邏輯設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06
Android中應(yīng)用界面主題Theme使用方法和頁面定時跳轉(zhuǎn)應(yīng)用
在Android SDK中內(nèi)置了下面的Theme,可以按標(biāo)題欄Title Bar和狀態(tài)欄Status Bar是否可見來分類,感興趣的朋友可以了解下哈2013-06-06
Android中設(shè)置WebView禁止縮放網(wǎng)頁的步驟
在Android中如果你想要禁止WebView縮放網(wǎng)頁,可以通過設(shè)置WebView的一些屬性來實現(xiàn),這篇文章主要給大家介紹了關(guān)于Android中設(shè)置WebView禁止縮放網(wǎng)頁的步驟,需要的朋友可以參考下2024-05-05
Android仿騰訊QQ實現(xiàn)滑動刪除 附源碼下載
仿騰訊QQ滑動刪除操作,這篇文章主要為大家詳細(xì)介紹了ListView滑動刪除的具體操作方法,感興趣的小伙伴們可以參考一下2016-07-07
Android shell命令行中過濾adb logcat輸出的方法
本文主要介紹Android shell命令行中過濾adb logcat輸出,這里詳細(xì)說明了shell 命令過濾logcat 輸出內(nèi)容,有需要的小伙伴可以參考下2016-08-08

