본문 바로가기
개발 공부 기록하기/- Android

왜 개발모드일때는 광고가 노출되지 않지? Failed to load ad: 3

by soulduse 2019. 1. 2.
반응형

왜 개발모드일때는 광고가 노출되지 않지?


MobileAds.initialize(context, context.getString(R.string.admob_id))
adRequest = AdRequest.Builder().build()
mInterstitialAd = InterstitialAd(context).apply {
    adUnitId = context.getString(R.string.admob_interstitial_id)
    adListener = object : AdListener() {
        override fun onAdLoaded() {
            DLog.w("admob onAdLoaded !!")
            showAd()
        }

        override fun onAdClosed() {
            DLog.w("admob onAdClosed !!")
        }

        override fun onAdFailedToLoad(p0: Int) {
            DLog.w("admob onAdFailedToLoad !! $p0")
        }
    }
}

전면 광고를 노출 하기위해서 위와 같이 작성하고 광고를 load > show 했더니 
위에 onAdFailedToLoad(p0, Int) 함수가 실행되고 
admob onAdFailedToLoad !! 3과 함께
W/Ads: Failed to load ad: 3
의 에러 문구가 노출되는 것이 아닌가. 당연히 광고는 하나도 출력되지 않는 상황이 발생되었다.

Google Document를 찾아보니 
광고 요청은 정상적으로 전달되었지만 전달받은 광고 인벤토리가 없다는 뜻이었다.
코드는 정상적이라는 말인데, 광고를 정상적으로 받을수 없다는 이야기가 되겠다.

예전에는 앱 배포전에 Debug 상태에서도 광고 출력이 잘되었지만, 현재는 앱이 PlayStore에 배포되고 난 이후에 광고가 노출된다고 한다따라서 개발중일때는 테스트용 광고를 띄워서 광고가 잘 뜨는지 확인하고 릴리즈된 APK에서는 정상적인 광고 ID 값을 넣어서 광고가 잘 노출되도록 해야한다.

아래와 같이 간단한 메소드를 만들어주었다

private infix fun String.or(that: String): String = if (BuildConfig.DEBUG) this else that

배너사용시
private fun initBanner(): AdView = AdView(context).apply {
    adSize = AdSize.SMART_BANNER
    adUnitId = TEST_BANNER_ID or context.getString(R.string.admob_banner_id)
    loadAd(adRequest)
}

전면광고 사용시
mInterstitialAd = InterstitialAd(context).apply {
    adUnitId = TEST_INTERSTITIAL_ID or context.getString(R.string.admob_interstitial_id)
    adListener = object : AdListener() {
       
    }
    ...

Test용 광고 ID or 실제 광고 ID
현재 개발중인지 릴리즈인지 판단하여 자동으로 광고 ID가 스위칭 되도록 작업해주었다.

개발중일때는 테스트용 광고 ID가 입력되어서 테스트용 광고로 광고 위치나 보이는 시점이 잘 나오는 것을 확인할 수 있고, 릴리즈 되면 실제 광고가 잘 나오는 것을 확인할 수 있었다.

참고로 테스트 광고용 ID 모여있는 곳은 아래 URL을 참고하길 바란다.




반응형