我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

通过MobileAdsinitialize方法进行初始化,代码如下:

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 {
                    // 判断适配器初始化的状态
                    // 准备就绪 AdapterStatus.State.READY
                    // 没准备好 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
    // 插屏广告加载状态的回调
    private val interstitialAdLoadCallback = object : InterstitialAdLoadCallback() {
        override fun onAdLoaded(interstitialAd: InterstitialAd) {
            super.onAdLoaded(interstitialAd)
            // 加载成功
            this@AdmobExampleActivity.interstitialAd = interstitialAd
            // 设置广告事件回调
            this@AdmobExampleActivity.interstitialAd?.fullScreenContentCallback = interstitialAdCallback
            // 显示插屏广告
            this@AdmobExampleActivity.interstitialAd?.show(this@AdmobExampleActivity)
        }
        override fun onAdFailedToLoad(loadAdError: LoadAdError) {
            super.onAdFailedToLoad(loadAdError)
            // 加载失败
        }
    }
    // 插屏广告相关事件回调
    private val interstitialAdCallback = object : FullScreenContentCallback() {
        override fun onAdImpression() {
            super.onAdImpression()
            // 被记录为展示成功时调用
        }
        override fun onAdShowedFullScreenContent() {
            super.onAdShowedFullScreenContent()
            // 显示时调用
        }
        override fun onAdClicked() {
            super.onAdClicked()
            // 被点击时调用
        }
        override fun onAdDismissedFullScreenContent() {
            super.onAdDismissedFullScreenContent()
            // 隐藏时调用,此时销毁当前的插屏广告对象,重新加载插屏广告
            interstitialAd = null
            loadInterstitialAd()
        }
        override fun onAdFailedToShowFullScreenContent(adError: AdError) {
            super.onAdFailedToShowFullScreenContent(adError)
            // 展示失败时调用,此时销毁当前的插屏广告对象,重新加载插屏广告
            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后台创建的插屏广告的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
            // 设置广告事件回调
            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()
            // 被记录为展示成功时调用
        }
        override fun onAdShowedFullScreenContent() {
            super.onAdShowedFullScreenContent()
            // 显示时调用
        }
        override fun onAdClicked() {
            super.onAdClicked()
            // 被点击时调用
        }
        override fun onAdDismissedFullScreenContent() {
            super.onAdDismissedFullScreenContent()
            // 隐藏时调用,此时销毁当前的激励视频广告对象,重新加载激励视频广告
            rewardedAd = null
            loadRewardedVideoAd()
        }
        override fun onAdFailedToShowFullScreenContent(adError: AdError) {
            super.onAdFailedToShowFullScreenContent(adError)
            // 展示失败时调用,此时销毁当前的激励视频广告对象,重新加载激励视频广告
            rewardedAd = null
            loadRewardedVideoAd()
        }
    }
    private val rewardedVideoAdEarnedCallback = OnUserEarnedRewardListener {
        // 用户获得奖励回调
        // 奖励的类型
        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后台创建的激励视频广告的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()
            // 被记录为展示成功时调用
        }
        override fun onAdClicked() {
            super.onAdClicked()
            // 被点击时调用
        }
        override fun onAdOpened() {
            super.onAdOpened()
            // 广告落地页打开时调用
        }
        override fun onAdClosed() {
            super.onAdClosed()
            // 广告落地页关闭时调用
        }
    }
    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 {
            // 设置Banner的尺寸
            setAdSize(AdSize.BANNER)
            // adUnitId为Admob后台创建的Banner广告的id
            adUnitId = "adUnitId"
            // 设置广告事件回调
            adListener = bannerListener
            val bannerViewLayoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)
            // 设置显示在页面的底部中间
            bannerViewLayoutParams.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
            layoutParams = bannerViewLayoutParams
            alpha = 0f
            // 把 Banner Ad 添加到根布局
            rootView.addView(this)
            //加载广告
            loadAd(AdRequest.Builder().build())
        }
    }
}

测试广告

注意,Admob官方声明了在开发过程中启用测试广告非常重要,这样您就可以在不向 Google 广告客户收费的情况下点击广告。如果您在非测试模式下点击过多广告,可能会导致您的帐号因无效活动而被举报。

想要测试广告的效果,可以通过两种方式。

  • 使用谷歌提供的测试id

谷歌提供了一整套测试id,使用这套id可以获取Admob的测试广告。

// 测试应用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"
  • 使用自己应用的id,并注册测试设备

如果想要使用自己应用的id进行测试,可以通过注册测试设备来拉取测试广告。

集成好SDK后,安装App,查看tag为Ads的日志,可以看到测试设备id,如下:

获取测试设备id后,通过代码注册测试设备,如下:

MobileAds.setRequestConfiguration(RequestConfiguration.Builder()
    .setTestDeviceIds(arrayListOf("deviceId"))
    .build())

注册好测试设备后重新安装App即可。

示例

整合之后,使用Admob提供的测试设备做了个示例demo。

ExampleDemo github

ExampleDemo gitee

效果如图:

以上就是Android Admob接入原理及完整教程示例的详细内容,更多关于Android Admob接入的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

这篇文章主要为大家介绍了Android Admob接入原理及完整教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-19

随机森林算法原理及实际应用的Python示例(带完整代码)

随机森林算法是一种集成技术,能够使用多个决策树和一种称为Bootstrap和聚合的技术来执行回归和分类任务。这背后的基本思想是结合多个决策树来确定最终输出,而不是依赖于单个决策树。机器学习中的随机森林随机森林产生大量分类树。将输入向量放在森
随机森林算法原理及实际应用的Python示例(带完整代码)
2024-01-23

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录