https://firebase.google.com/docs/admob/android/quick-start?hl=ko
워낙 구글에서 정리를 해뒀으니 링크 참고
현재 앱을 test id로 광고 테스트 진행 중이다.
실제 앱 출시가 되면, 상용 id로 설정해줘야 한다!
이건 비공개 테스트가 진행되고 나면 할 예정이다.
테스트 도중에 상용 id로 바뀌게 되면 광고가 제한된다고 하니 ... 참고 !
상단 배너 , 리워드형 배너를 설정해줬다.
상단 배너 - 홈 화면
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/ad_banner"
android:layout_width="match_parent"
android:layout_height="50dp"
android:visibility="@{vm.onClickedShowDetail == null && vm.showAdvertisement == true ? View.VISIBLE : View.GONE}"
ads:layout_constraintBottom_toTopOf="@+id/ll_bottom_navigation"
ads:layout_constraintEnd_toEndOf="parent"
ads:layout_constraintStart_toStartOf="parent"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/9214589741"/>
이 때, adUnitId를 설정해주면 된다. 위 adUnitId값은 구글에서 제공하는 테스트 광고용 아이디이다.
광고를 보여주려면 광고를 미리 로드해야한다. (중요)
광고를 로드한 상태(변수에 값이 있는 상태)여야, 광고를 보여줄 때 ... 보인다 ^_^ ㅠㅠ
로드한 광고를 담는 변수!
private var mRewardAd: RewardedAd? = null
onResume 함수에서 해당 함수를 불러, 광고를 셋팅해준다.
화면에 접근했을 때 광고를 로드하기 위함이다.
private fun setUpAdMob() {
showLoadingDialog()
MobileAds.initialize(this)
val adRequest = AdRequest.Builder().build()
binding.adBanner.loadAd(adRequest)
RewardedAd.load(this, google_app_reward_key, adRequest, object : RewardedAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
mRewardAd = null
// 광고 로드 실패 시 로그 출력
Timber.e("광고가 아직 로드되지 않음 setup")
dismissLoadingDialog()
}
override fun onAdLoaded(ad: RewardedAd) {
dismissLoadingDialog()
mRewardAd = ad
}
})
}
보상형 광고 (홈 화면 -> 가계부 설정 화면으로 넘어갈 때 보임)
가계부 설정으로 넘어갈 때, 실행되는 부분이다.
it의 값은 광고 없애기(6시간 카운트)를 본 상태면, 광고 없이 넘어가게 하기 위함이다.
viewModel.settingPage.collect {
if (it) {
if (mRewardAd != null) {
showAdMob()
}else{
resetUpAdMob()
}
} else {
goToBookSettingActivity()
}
}
보지 않은 상태에서,
로드한 보상형 광고가 없으면 다시 광고를 로드하는 함수인 resetUpAdMob()을 부르고,
광고가 있는 상태면, 로드된 광고를 부르는 함수인 showAdMob()을 부른다.
원래는 다시 로드하는 함수를 따로 만들지 않았는데,
이게 로드되지 않은 상태에서 광고를 보여주려니 상당히 많은 오류가 발생하였다 ㅎ
로드된 광고를 부르는 함수인 showAdMob()
fun showAdMob(){
mRewardAd?.show(this@HomeActivity, OnUserEarnedRewardListener {
fun onUserEarnedReward(rewardItem: RewardItem) {
val rewardAmount = rewardItem.amount
val rewardType = rewardItem.type
}
})
mRewardAd?.fullScreenContentCallback = object: FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
dismissLoadingDialog()
viewModel.updateAdvertiseTenMinutes()
goToBookSettingActivity()
mRewardAd = null
Timber.e("광고가 로드됨")
}
override fun onAdFailedToShowFullScreenContent(p0: AdError) {
dismissLoadingDialog()
mRewardAd = null
Timber.e("광고가 아직 로드되지 않음 1-2")
goToBookSettingActivity()
}
}
}
해당 함수가 실행되었을 때, 광고가 실행된다.
다시 광고를 로드하는 함수인 resetUpAdMob()
private fun resetUpAdMob() {
showLoadingDialog()
MobileAds.initialize(this)
val adRequest = AdRequest.Builder().build()
binding.adBanner.loadAd(adRequest)
RewardedAd.load(this, google_app_reward_key, adRequest, object : RewardedAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
mRewardAd = null
// 광고 로드 실패하더라도 페이지 이동
Timber.e("광고가 아직 로드되지 않음 reset")
dismissLoadingDialog()
goToBookSettingActivity()
}
override fun onAdLoaded(ad: RewardedAd) {
dismissLoadingDialog()
mRewardAd = ad
showAdMob()
// 광고 로드 성공 시 로그 출력
Timber.e("광고가 로드됨")
}
})
}
다시 로드하여, 로드가 완료되면 showAdMob()을 불러서 광고가 보이게 만든다.
각 광고 타입 별로 아이디가 있다.
1) 배너 광고 id
2) 보상형 광고 id
3) 앱 Admob id
를 실제 상용 앱에서는 id를 바꿔줘야 한다~ 앱 id는 동일해도 됨!
상용 앱에서 키를 숨기는 방법에 대해서는 따로 글을 남겨보려고 한다.
'Floney' 카테고리의 다른 글
[Floney] Android Appsflyer 앱링크 설정 (2) | 2024.11.07 |
---|---|
[Floney] 정기 결제 구현 (1) | 2024.10.19 |
[Floney] Google Admob 광고 키 숨기기 (디버그키, 릴리즈키) (0) | 2024.10.16 |
[Floney] 내가 맡은 부분 자체 QA (0) | 2024.06.08 |
[Floney] 커스텀 기간 설정 캘린더 직접 구현 (라이브러리 X) (0) | 2024.04.15 |