網站首頁 編程語言 正文
添加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
方法進行初始化,代碼如下:
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
效果如圖:
原文鏈接:https://juejin.cn/post/7178088153238995005
相關推薦
- 2022-07-09 Android廣播實現App開機自啟動_Android
- 2023-04-27 React中state屬性和生命周期的使用_React
- 2023-04-06 python?numpy.linalg.norm函數的使用及說明_python
- 2022-04-12 Trailing spaces not allowed no-trailing-spaces
- 2024-03-24 MyBatis-Plus:條件構造器Wrapper
- 2022-12-29 React控制元素顯示隱藏的三種方法小結_React
- 2022-06-04 Android基于Fresco實現圓角和圓形圖片_Android
- 2022-06-29 C語言超詳細講解指針與結構體_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支