안드로이드 애드몹 (Admob) 풀스크린 적용

안드로이드 풀스크린 애드몹 Kotlin

Kotlin 으로 풀스크린 애드몹을 추가 한다

절차

  1. 애드몹 가입
  2. 애드몹 ID 와 배너단위 ID 를 생성 (배너단위는 배너생성시 복수로 추가됨)
  3. strings 에 ID 들 추가
  4. 개발시에는 테스트용 애드몹 ID 를 사용
  5. AndroidManifest 에 애드몹 ID 추가
  6. 애드몹 초기화 함수와 애드몹 실행 함수 생성
  7. 필요한 곳에서 애드몹 실행

AndroidManifest

application 안에 meta-data 로 애드몹 아이디를 넣습니다

1
2
3
4
5
<application
...
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="@string/all_admob_id" />

애드몹 초기화 , 실행 함수

저는 리사이클러뷰에서 클릭시에 전체 광고를 뜨게 하려고
RecyclerGameAdapter 리사이클러뷰 어댑터에 넣었습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//구글 애드몹 초기화
private fun setupInterstitialAd() {
val adRequest = AdRequest.Builder().build()

InterstitialAd.load(mContext,
"ca-app-pub-39402560OOOOOO/OOOOOOOOOOO",
adRequest,
object : InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.d("DEBUG: ", adError.message)
mInterstitialAd = null
}

override fun onAdLoaded(interstitialAd: InterstitialAd) {
Log.d("DEBUG: ", "Ad was loaded.")
mInterstitialAd = interstitialAd
}
})
}
//구글 애드몹 실행
private fun displayAdmob(holder: RecyclerGameAdapter.ViewHolder, item: GameData) {
mInterstitialAd?.show( holder.itemView.context as Activity )
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.")

startPlayerActivity(holder, item)

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.")
}
}
}

애드몹 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//(3) View 내용 입력
@SuppressLint("SdCardPath")
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = items[position]
//Go game player 이벤트 리스너
val playGameListener = View.OnClickListener {
//download 된 gamefile 이 있는 지 확인
val gameFilePath = "/data/data/OOOOOOOOOOOOOOO/${item.filename}"
if (File(gameFilePath).exists()) {
if (mInterstitialAd != null) {
displayAdmob(holder, item)
} else {
startPlayerActivity(holder, item)
}
} else {
Toast.makeText(mContext, "게임 파일을 다운로드 받으세요", Toast.LENGTH_SHORT).show()
}
}

Compose 에서 애드몹 적용

아직 Compose 에 애드몹용 API 가 없어서
AndroidView 를 사용해야 합니다

전체화면용은 아니고
배너용 Compose 소스는

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Composable
fun GetBanner() {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.fillMaxWidth()
.height(50.dp)
) {
val adId = stringResource(id = R.string.all_admob_banner_gamelist)
val adRequest = com.google.android.gms.ads.AdRequest.Builder().build()
AndroidView(
modifier = Modifier.fillMaxWidth(),
factory = { context ->
AdView(context).apply {
setAdSize(AdSize.BANNER)
adUnitId = adId
loadAd(adRequest)
}
},
update = { adView ->
adView.loadAd(adRequest)
},
)
}
}