[Android/Kotlin] 안드로이드 애드몹(Admob) 전면광고(Interstitial) 넣기(2)
안녕하세요.
오늘은 안드로이드 앱에 전면 광고를 구현해 보도록 하겠습니다.
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: 결과
'기리's Android 이야기' 카테고리의 다른 글
[Jetpack Compose] TopAppBar(Toolbar) - 메뉴 클릭 이벤트 (Toast, Alertdialog, Dropdownmenu) (2) | 2022.08.08 |
---|---|
[Jetpack Compose] TopAppBar(Toolbar) 구현하기 (2) | 2022.08.08 |
[Android/Kotlin] 안드로이드 애드몹(Admob) 배너광고 넣기(1) (2) | 2022.07.25 |
[앱소개/시간표앱] 대학시간 소개 (5) | 2021.06.07 |
[앱소개/가계부앱] 레몬트리 소개 (4) | 2021.06.07 |
댓글