본문 바로가기

[Android/Kotlin] 안드로이드 애드몹(Admob) 전면광고(Interstitial) 넣기(2)

꿈꾸는블로그왕 2022. 7. 26.

안녕하세요. 

 

오늘은 안드로이드 앱에 전면 광고를 구현해 보도록 하겠습니다.

 

2022.07.25 - [Android/기타] - [Android/Kotlin] 안드로이드 애드몹(Admob) 배너광고 넣기(1)

 

전면광고는 다른 광고단위 대비 단가가 높지만 사용자의 앱 사용을 방해하기 때문에 주의를 필요로합니다.

전면광고 때문에 앱이 삭제당할 수 있기 때문입니다.

 

구글에서도 아래와 같이 전면광고에 대해서 권장사항으로 주의사항을 알려주고 있습니다.

 

 

게임을 하다보면 다음 스테이지로 넘어가는 단계에서 전면광고를 흔히 볼 수 있듯이,

사용자가 쉬어가 시점에 사용하는 것이 가장 바람직 해 봅니다.

 

아래는 버튼을 눌렀을때 전면광고가 나오고 광고를 닫으면, 다른 액티비티로 이동하는 예제입니다.

MainActivity -> 전면광고 -> GameActivity

 

 

 

Step 1: 앱 구성

먼저 아래와 같이 빌드 dependency를 추가하고 sync를 해줍니다.

build.gradle (Module: app) 

dependencies {
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

	// 추가하기
    implementation 'com.google.android.gms:play-services-ads:21.0.0'
}

 

메니페스트 파일에 application 태그안에 meta-data를 아래와 같이 입력합니다.

value 값에 테스트 광고 ID를 입력했습니다.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application
        ...
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3940256099942544~3347511713"/>
    </application>

</manifest>

 

Step 2: 메인 액티비티

activity_main 레이아웃에 아래와 같이 버튼을 추가해 줍니다.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_game"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="게임 하러가기!"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
        
</androidx.constraintlayout.widget.ConstraintLayout>

 

MainActivity에서는 버튼을 클랙했을때 전면광고를 보여주고,

이후 GameActivity로 이동하는 코드를 구현합니다.

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    private var mInterstitialAd: InterstitialAd? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        setupInterstitialAd()

        binding.btnGame.setOnClickListener {
            if (mInterstitialAd != null) {
                mInterstitialAd?.show(this@MainActivity)
                mInterstitialAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
                    override fun onAdClicked() {
                        Log.d("DEBUG: ", "Ad was clicked.")
                    }

                    override fun onAdDismissedFullScreenContent() {
                        // Called when ad is dismissed.
                        Log.d("DEBUG: ", "Ad dismissed fullscreen content.")
                        gotoGameActivity()
                        mInterstitialAd = null
                        setupInterstitialAd()
                    }

                    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
                        Log.e("DEBUG: ", "Ad failed to show fullscreen content.")
                        mInterstitialAd = null
                    }

                    override fun onAdImpression() {
                        Log.d("DEBUG: ", "Ad recorded an impression.")
                    }

                    override fun onAdShowedFullScreenContent() {
                        Log.d("DEBUG: ", "Ad showed fullscreen content.")
                    }
                }
            } else {
                gotoGameActivity()
            }
        }
    }

    private fun gotoGameActivity() {
        GameActivity.startGameActivity(this).apply {
            startActivity(this)
        }
    }

    private fun setupInterstitialAd() {
        val adRequest = AdRequest.Builder().build()

        InterstitialAd.load(this,
            "ca-app-pub-3940256099942544/1033173712",
            adRequest,
            object : InterstitialAdLoadCallback() {
                override fun onAdFailedToLoad(adError: LoadAdError) {
                    Log.d("DEBUG: ", adError?.message.toString())
                    mInterstitialAd = null
                }

                override fun onAdLoaded(interstitialAd: InterstitialAd) {
                    Log.d("DEBUG: ", "Ad was loaded.")
                    mInterstitialAd = interstitialAd
                }
            })
    }
}

1. 전역변수인 mInterstitialAd null이 가능하도록 선언했습니다.

2. setupInterstitialAd() 함수에 전면광고를 load하는 코드를 작성했습니다. 콜백함수로 onAdFailedToLoad(), onAdLoaded() 함수가 있으며, 광고가 로딩이 됐을때 변수 mInterstitialAd 에 할당해 줍니다. 로드 실패시에는 mInterstitialAd 변수에 null을 할당합니다.

3. 버튼 클릭시 전면광고가 나오도록하는 코드입니다. mInterstitialAd 변수가 null 아닐 때 show()를 호출하여 전면광고를 띄워줍니다. FullScreenContentCallback() 함수에서 onAdDismissedFullScreenContent가 호출될때 게임 액티비티로 넘겨줍니다.

 

Step 2: 게임 액티비티

GameActivity.kt

class GameActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_game)
    }

    companion object {
        fun startGameActivity(context: Context): Intent {
            return Intent(context, GameActivity::class.java)
        }
    }
}

 

activity_game.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".GameActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Game Activity"
        android:textSize="32sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
        
</androidx.constraintlayout.widget.ConstraintLayout>

 

Step 3: 결과

 

댓글