最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?Admob接入原理及完整教程示例

 更新時間:2022年12月19日 11:57:17   作者:ChenYhong  
這篇文章主要為大家介紹了Android?Admob接入原理及完整教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

添加Admob SDK

最近公司的項(xiàng)目新接入了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

通過MobileAdsinitialize方法進(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ǎn)擊時調(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ǎn)擊時調(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ǎn)擊時調(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 廣告客戶收費(fèi)的情況下點(diǎn)擊廣告。如果您在非測試模式下點(diǎn)擊過多廣告,可能會導(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。

ExampleDemo github

ExampleDemo gitee

效果如圖:

以上就是Android Admob接入原理及完整教程示例的詳細(xì)內(nèi)容,更多關(guān)于Android Admob接入的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android切面編程知識點(diǎn)詳解

    Android切面編程知識點(diǎn)詳解

    這篇文章給大家整理了關(guān)于Android進(jìn)階資深開發(fā)必備技能-切面編程的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-07-07
  • android實(shí)現(xiàn)簡易登錄注冊界面及邏輯設(shè)計

    android實(shí)現(xiàn)簡易登錄注冊界面及邏輯設(shè)計

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡易登錄注冊界面及邏輯設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Android中應(yīng)用界面主題Theme使用方法和頁面定時跳轉(zhuǎn)應(yīng)用

    Android中應(yīng)用界面主題Theme使用方法和頁面定時跳轉(zhuǎn)應(yīng)用

    在Android SDK中內(nèi)置了下面的Theme,可以按標(biāo)題欄Title Bar和狀態(tài)欄Status Bar是否可見來分類,感興趣的朋友可以了解下哈
    2013-06-06
  • adb無法連接雷電模擬器問題的解決方式

    adb無法連接雷電模擬器問題的解決方式

    雷電模擬器優(yōu)點(diǎn)是可設(shè)置的選項(xiàng)要比天天模擬器多,下面這篇文章主要給大家介紹了關(guān)于adb無法連接雷電模擬器問題的解決方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Android 解決WebView無法上傳文件的問題

    Android 解決WebView無法上傳文件的問題

    這篇文章主要介紹了Android 解決WebView無法上傳文件的問題的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Kotlin WorkManager使用方法詳解

    Kotlin WorkManager使用方法詳解

    這篇文章主要介紹了Kotlin WorkManager使用方法,WorkManager是 安卓體系結(jié)構(gòu)之一,也是Android JetPack的一部分。WorkManager用于可延期并需要保證執(zhí)行的后臺工作
    2023-01-01
  • Android中設(shè)置WebView禁止縮放網(wǎng)頁的步驟

    Android中設(shè)置WebView禁止縮放網(wǎng)頁的步驟

    在Android中如果你想要禁止WebView縮放網(wǎng)頁,可以通過設(shè)置WebView的一些屬性來實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于Android中設(shè)置WebView禁止縮放網(wǎng)頁的步驟,需要的朋友可以參考下
    2024-05-05
  • Android仿騰訊QQ實(shí)現(xiàn)滑動刪除 附源碼下載

    Android仿騰訊QQ實(shí)現(xiàn)滑動刪除 附源碼下載

    仿騰訊QQ滑動刪除操作,這篇文章主要為大家詳細(xì)介紹了ListView滑動刪除的具體操作方法,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android基于OpenCV實(shí)現(xiàn)非真實(shí)渲染

    Android基于OpenCV實(shí)現(xiàn)非真實(shí)渲染

    非真實(shí)感渲染(Non Photorealistic Rendering,簡稱NPR),是指利用計算機(jī)模擬各種視覺藝術(shù)的繪制風(fēng)格,也用于發(fā)展新的繪制風(fēng)格。比如模擬中國畫、水彩、素描、油畫、版畫等藝術(shù)風(fēng)格。本文將講解Android基于OpenCV實(shí)現(xiàn)非真實(shí)渲染的方法
    2021-06-06
  • Android shell命令行中過濾adb logcat輸出的方法

    Android shell命令行中過濾adb logcat輸出的方法

    本文主要介紹Android shell命令行中過濾adb logcat輸出,這里詳細(xì)說明了shell 命令過濾logcat 輸出內(nèi)容,有需要的小伙伴可以參考下
    2016-08-08

最新評論

绿春县| 庄河市| 澄江县| 房山区| 华安县| 清新县| 皮山县| 阜宁县| 亳州市| 塔河县| 赤峰市| 祁连县| 伊宁县| 乌兰察布市| 玛纳斯县| 正定县| 神木县| 江油市| 杨浦区| 任丘市| 乐山市| 宝清县| 韩城市| 鱼台县| 肥城市| 临漳县| 鄂州市| 宜昌市| 定远县| 杂多县| 白山市| 阆中市| 石林| 洛宁县| 平罗县| 亚东县| 阿城市| 武汉市| 淳化县| 历史| 潞西市|