📱테스트 환경
Samsung Galaxy Android 13 • Android 10
https://developers.google.com/admob/android/quick-start?hl=ko#import_the_mobile_ads_sdk
시작하기 | Android | Google for Developers
Android 앱을 제작 중인 Google AdMob 게시자를 위한 모바일 광고 SDK입니다.
developers.google.com
https://developers.google.com/admob/android/banner/anchored-adaptive?hl=ko#kotlin
앵커 적응형 배너 | Android | Google for Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 앵커 적응형 배너 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 적응형 배너는 광고 크
developers.google.com
사실상 종속성 추가하고, 초기화까지는 공식문서보고해도 엄청 쉽기때문에 이게 목적이 아닐꺼다.
아마 가이드에 있는 적응형 배너 관련 함수들이 에러를 발생시켜서 검색해서 오는 사람들이 있을텐데, 그러면 4번부터 보면 된다.
01. bulid.gradle ( app ) 종속성 추가
dependencies {
...
implementation 'com.google.android.gms:play-services-ads:22.5.0'
}
02. AndroidManifest.xml
<application>
...
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713"/>
</application>
여기서는 나중에는 발급받은 아이디를 사용하면되지만, 정지먹을 수 있기 때문에 테스트 광고 아이디값을 사용한다.
테스트 광고를 통해 구도를 잡고 나중에 배포하는 과정에서 아이디값을 변경해주면 된다.
03. Admob 광고 SDK 초기화
MobileAds.initialize(this) {}
04. 적응형 사이즈를 위한 getAdaptiveBannerAdSize.kt 함수 작성
@RequiresApi(Build.VERSION_CODES.R)
fun getAdaptiveBannerAdSize(context: Context, windowManager: WindowManager, adContainerView: FrameLayout): AdSize {
val windowMetrics = windowManager.currentWindowMetrics
val bounds = windowMetrics.bounds
var adWidthPixels = adContainerView.width.toFloat()
// If the ad hasn't been laid out, default to the full screen width.
if (adWidthPixels == 0f) {
adWidthPixels = bounds.width().toFloat()
}
val density = context.resources.displayMetrics.density
val adWidth = (adWidthPixels / density).toInt()
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adWidth)
}
WindowManager 는 Admob 광고를 띄우면서 처음사용해봤는데 현재 윈도우의 메트릭스 정보를 획득하기 위해 사용 한다고 한다
windowManager.currentWindowMetrics → 현재 윈도우의 메트릭스 정보 획득
windowManager.bounds → 현재 윈도우의 경계 정보 획득
AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adWidth) → 현재 방향 적응형 배너 광고의 크기 획득
05. loadBanner.kt 함수 생성
@RequiresApi(Build.VERSION_CODES.R)
fun loadBanner(context: Context, windowManager: WindowManager, adContainerView: FrameLayout, adView: AdView) {
adView.adUnitId = "ca-app-pub-3940256099942544/6300978111"
adView.setAdSize(getAdaptiveBannerAdSize(context, windowManager, adContainerView))
val adRequest = AdRequest
.Builder()
.build()
adView.loadAd(adRequest)
}
adView.setAdSize(getAdaptiveBannerAdSize(context, windowManager, adContainerView))
아까 만든 함수로 광고 사이즈를 설정해준다. 아마 여기부분에서 setAdSize 가 아니라 adSize 함수가 가이드로 나와있을텐데 여기서
에러가 발생했을 것이다. ( 내가 그랬다 ) 다른데서 에러가 났을 수도 있지만 ...
adView.loadAd(adRequest) 를 통해서 광고를 로드해주면 적응형 광고가 보이게된다.
06. MainActivity.kt
adView = AdView(this)
adContainerView = findViewById(R.id.adContainerView)
adContainerView.addView(adView)
adContainerView.viewTreeObserver.addOnGlobalLayoutListener {
if (!initialLayoutComplete) {
initialLayoutComplete = true
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
loadBanner(this, windowManager, adContainerView, adView)
}
}
}
adView.adListener = object : AdListener() {
override fun onAdLoaded() {
super.onAdLoaded()
val overlayView = findViewById<TextView>(R.id.overlayView)
overlayView.visibility = View.GONE
}
}
해당 Activity 가서 loadBanner 를 호출해주면 광고가 연결되는걸 확인해줄 수 있다.
나는 overlayView 를 생성해서 FrameLayout 로 겹치게 설정해서 광고가 로드 전 임의의 뷰를 보여줄 수 있도록 해놨다.
광고가 로드되면 View.GONE 처리를 통해서 overlayView 를 숨겨주고 광고만 보이도록 설정했다.
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] 상태바 상태 변경하기 - StateBar Changes (1) | 2023.11.25 |
---|---|
[Kotlin] Text 에 Url 연결하기 - 택배검색 url 연결하기 (1) | 2023.11.25 |
[Kotlin] 앱 정보 가져오기 - App Name & App Icon 가져오기 (1) | 2023.11.25 |
[Kotlin] 화면의 디스플레이 크기 확인하기 (0) | 2023.10.24 |
[Kotlin] 동적 생성한 View textSize SP 로 설정하기 (0) | 2023.10.24 |