FrontEnd/Android

[Android] Google Play - 앱, 타사 광고, 기기 기능 방해 정책 위반

Satisfaction 2020. 8. 6. 21:24

 

 

갑자기 다음과 같은 메일이 날라오며 앱 업데이트가 거부되었다.

 

의아한 것은 해당 업데이트 내용은 버그 수정 및 편의성 강화로써 광고 관련 코드는 수정된 바가 전혀 없다는 것이다.

 

이의 신청을 진행했으나 돌아온 답변은 더 이해할 수 없는 내용이였다.

 

 

 

광고가 내 앱을 벗어나 다른 앱 위에 있다는 것인데...

무슨 말인지 잘 생각해보니 알게 되었다.

 

1. 앱이 백그라운드 상태일 때도 전면광고를 표시함

mInterstitialAd.adListener = object : AdListener() {
            override fun onAdLoaded() {
                if (!isDestroyed){
                    mInterstitialAd.show()
                }
            }

            override fun onAdClosed() {
                super.onAdClosed()
                if(!isDestroyed)
                    progressDialog.dismiss()
                openMainActivity()
            }

            override fun onAdFailedToLoad(i: Int) {
                super.onAdFailedToLoad(i)
                if(!isDestroyed)
                    progressDialog.dismiss()
                openMainActivity()
            }
        }

해당 코드는 전면 광고의 로드 상태에 따른 동작을 명시한 코드이다.

 

onAdLoaded를 보면 Activity가 Destroy되지 않았다면 전면 광고를 표시하게 되어 있다.

 

해당 시나리오에서는 다음과 같은 일이 발생할 수 있다.

 

1. 사용자가 앱을 켜고 스플래시 화면으로 진입

2. 광고가 로드되는 도중 다른 앱으로 이동

3. 나의 앱은 백그라운드에서 광고가 로드되었으므로 mInterstitalAd.show()가 작동됨

4. 다른 앱의 위에 전면 광고가 표시됨

 

따라서 앱이 포그라운드에 있는지, 백그라운드에 있는 지도 확인해봐야 한다.

 

https://satisfactoryplace.tistory.com/134

[Android] 현재 Activity의 Foreground/Background 상태 확인

Activity Lifecycle을 살펴보면 Activity가 Running 상태이다가 다른 액티비티가 위로 올라면 onPause()로 진입하고 현재 액티비티가 보이지 않는 상태가 되면 onStop()으로 진입한다. 다시 유저가 해당 액티비

satisfactoryplace.tistory.com

위의 포스트를 참고하여 액티비티가 포그라운드에 있는지도 확인하여 광고를 표시해야 한다

 

     //wait for load ad
        mInterstitialAd.adListener = object : AdListener() {
            override fun onAdLoaded() {
            	//바뀐 부분
                //isDestroy가 아니라 isActivityForeground로 비교하여 광고를 표시한다
                if(isActivityForeground){
                    mInterstitialAd.show()
                }else{
                    if(!isDestroyed){
                      progressDialog.dismiss()
                      finish()
                    }
                }
            }

            override fun onAdClosed() {
                super.onAdClosed()
                if(!isDestroyed)
                    progressDialog.dismiss()
                openMainActivity()
            }

            override fun onAdFailedToLoad(i: Int) {
                super.onAdFailedToLoad(i)
                if(!isDestroyed)
                    progressDialog.dismiss()
                openMainActivity()
            }
        }

 

2. 광고가 예기치 않은 시점에 표시됨

https://support.google.com/admob/answer/6201362?hl=ko

허용되지 않는 전면 광고 구현 - Google AdMob 고객센터

도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

support.google.com

스플래시 화면이 없는 앱의 경우 다음과 같은 위반사항을 쉽게 저지를 수 있다

 

 

 

올바른 광고 표시를 위해서는 사용자와 상호작용이 시작되었을 때 그 행동에 대한 응답이 진행되기 전에 광고를 표시하거나

별도 스플래시 액티비티를 만들어 "데이터/광고 로딩"과 "메인 화면"을 분리시켜 주어야 한다.

 

 

스플래시 화면을 이용해 로딩과 메인 페이지를 분리하는 시나리오
사용자와 상호작용이 시작되고 난 다음 광고를 표시하고 해당 응답을 처리하는 시나리오