TAE

[Android/Kotlin] 앱에 광고 달고 수익 실현하기 - Admob 코드 설정_RecyclerView안에 Admob 본문

android

[Android/Kotlin] 앱에 광고 달고 수익 실현하기 - Admob 코드 설정_RecyclerView안에 Admob

tg-world 2023. 8. 30. 16:13
반응형

이번 포스팅에는 애드몹 코드 설정에 관하여 포스팅 하겠습니다.

구현 내용입니다.

 

계정 설정 관련하여서는 전 포스팅을 참고해 주시면 됩니다.

https://tg-world.tistory.com/27

 

[android/kotlin] 앱에 광고 달고 수익 실현하기 - 애드몹 계정설정

이번 포스팅에서는 애드몹 계정 설정에 대하여 포스팅 하여 보겠습니다. 1. 애드몹 가입하기 https://admob.google.com/intl/ko/home/get-started/ Google AdMob 가입 방법 Google AdMob을 시작하기 위해 필요한 사항을

tg-world.tistory.com



1. bulid.gradle (Module:app)

dependencies {
  implementation 'com.google.android.gms:play-services-ads:21.5.0'
}

 

'com.google.android.gms:play-services-ads:21.5.0' 을 추가해 주시면 됩니다.

최신버전은 아래에서 확인 가능합니다.

https://developers.google.com/admob/android/quick-start?hl=ko#import_the_mobile_ads_sdk

 

시작하기  |  Android  |  Google for Developers

Android 앱을 제작 중인 Google AdMob 게시자를 위한 모바일 광고 SDK입니다.

developers.google.com

2. AndroidManifest.xml

매니페스트의 application 내부에 meta-data를 입력해야합니다.

아래 소스코드를 입력합니다.

value에는 계정 설정할 때 애드몹 ID를 입력하면 됩니다.(실 배포일때)

테스트로 진행할 것이기 때문에 테스트 광고 ID를 입력 하였습니다.(테스트 단계에서 애드몹 ID를 사용하면 어뷰징으로 계정이 정지 당할 수 있습니다.)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
    <application
    ....>
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3940256099942544~3347511713" />
     
    </application>

</manifest>

       <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3940256099942544~3347511713" />

* value 의 ca-app-pub-3940256099942544~3347511713 은 테스트 아이디 입니다

 

3. VocabularyPagerAdapter

class VocabularyPagerAdapter(
    private val vocabularies: List<Vocabulary>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    companion object {
        private const val VIEW_TYPE_CONTENT = 0
        private const val VIEW_TYPE_AD = 1
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        return when (viewType) {
            VIEW_TYPE_AD -> {
                val adView = LayoutInflater.from(parent.context)
                    .inflate(R.layout.item_ad, parent, false)
                AdViewHolder(adView)
            }
            else -> {
                val itemView = LayoutInflater.from(parent.context)
                    .inflate(R.layout.itme_vocabulary, parent, false)
                VocabularyViewHolder(itemView)
            }
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when (getItemViewType(position)) {
            VIEW_TYPE_AD -> {
                val adViewHolder = holder as AdViewHolder
                val adRequest = AdRequest.Builder().build()
                adViewHolder.adView.loadAd(adRequest)
            }
            VIEW_TYPE_CONTENT -> {
                val vocabularyViewHolder = holder as VocabularyViewHolder
                vocabularyViewHolder.bind(vocabularies[position % vocabularies.size])
            }
        }
    }

    override fun getItemCount() = Int.MAX_VALUE

//    override fun onBindViewHolder(holder: QuoteViewHolder, position: Int) {
//        holder.bind(vocabularies[position % vocabularies.size])
//    }

//    override fun getItemCount() = vocabularies.size + 1

    override fun getItemViewType(position: Int): Int {
        return if (position != 0 && position % 5 == 0) VIEW_TYPE_AD else VIEW_TYPE_CONTENT
    }

    inner class VocabularyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val englishTV: TextView = itemView.findViewById(R.id.englishTV)
        private val koreanTv: TextView = itemView.findViewById(R.id.koreanTv)
        private val flipView: EasyFlipView = itemView.findViewById(R.id.flipview)

        fun bind(vocabulary: Vocabulary) {
            englishTV.text = vocabulary.english
            koreanTv.text = vocabulary.korean
            flipView.isFlipOnTouch = true
            flipView.isEnabled = true
        }
    }

    inner class AdViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val adView: AdView = itemView.findViewById(R.id.adView)
    }
}
companion object {
    private const val VIEW_TYPE_CONTENT = 0
    private const val VIEW_TYPE_AD = 1
}

타입을 나누어 content와 ad 뷰를 나누어 줍니다. 0과 1로 타입을 분류합니다.

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
    return when (viewType) {
        VIEW_TYPE_AD -> {
            val adView = LayoutInflater.from(parent.context)
                .inflate(R.layout.item_ad, parent, false)
            AdViewHolder(adView)
        }
        else -> {
            val itemView = LayoutInflater.from(parent.context)
                .inflate(R.layout.itme_vocabulary, parent, false)
            VocabularyViewHolder(itemView)
        }
    }
}

타입별로 layout을 나누어 줍니다.

 

 

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    when (getItemViewType(position)) {
        VIEW_TYPE_AD -> {
            val adViewHolder = holder as AdViewHolder
            val adRequest = AdRequest.Builder().build()
            adViewHolder.adView.loadAd(adRequest)
        }
        VIEW_TYPE_CONTENT -> {
            val vocabularyViewHolder = holder as VocabularyViewHolder
            vocabularyViewHolder.bind(vocabularies[position % vocabularies.size])
        }
    }
}​

타입이 VIEW_TYPE_AD일때 AdRequest.builder().build() 선언하고 adView.loadAd(adRequest) 광고를 ad 시켜 줍니다.

 

4. item_ad.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:gravity="center_horizontal"
    android:layout_height="match_parent">

    <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        ads:adSize="FULL_BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/6300978111" />

</LinearLayout>

ads:adUnitId인 ca-app-pub-3940256099942544/6300978111" 배너 테스트 id 입니다.

실 배포시 계정 설정에서 나온 id를 사용해 주시면 됩니다.

ads:adSize는 

https://developers.google.com/admob/android/banner?hl=ko#banner_sizes

위 사이트를 참고 해주시면 됩니다.

 

 

* 위 영단어 코드는 아래 링크를 참고해 주시면 됩니다.

반응형

https://tg-world.tistory.com/25

 

[Android/Kotlin] 클릭하면 뒤집히는 뷰로 영단어 암기장 만들기 flip view(플립뷰)

이번 포스팅에는 클릭하면 뒤집히는 애니메이션을 가진 플립 뷰에 대해 포스팅 해보겠습니다. 위 그림처럼 클릭하면 뒤집히는 flip view(플립뷰)를 활용하여 간단한 영단어 암기장을 구현해 보겠

tg-world.tistory.com

 

반응형
Comments