본문 바로가기
Floney

[Floney] Android 구글 광고 달기 (보상형 광고, 배너 광고)

by 박매트 2024. 9. 7.

https://firebase.google.com/docs/admob/android/quick-start?hl=ko

 

Android 프로젝트에서 AdMob 시작하기  |  Firebase with Google AdMob

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 Android 프로젝트에서 AdMob 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 빠

firebase.google.com

 

워낙 구글에서 정리를 해뒀으니 링크 참고

 

현재 앱을 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 &amp;&amp; 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는 동일해도 됨!

상용 앱에서 키를 숨기는 방법에 대해서는 따로 글을 남겨보려고 한다.

https://wnsgml517.tistory.com/229