일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- android 광고달기
- android 수익
- android 터치시 뒤집히는 뷰
- kotlin
- 테러우편물
- android kotlin
- android 영단어 기능 만들기
- android remoteconfig
- firebase RemoteConfig
- 안드로이드 리스트뷰와 광고
- FlipView
- 안드로이드 광고
- 앱에 광고 수익
- android 뒤집히는 카드뷰
- 불그리레시피
- 안드로이드 뒤집히는 뷰
- Android AdMob
- 정국라면
- 라면레시피추천
- Android
- 우편물재난문자
- 애드몹 설정
- android 앱업데이트 없이 변경하기
- 안드로이드
- RecyclerView in Admob
- 정국라면레시피
- 앱 광고 설정
- 앱에 광고달기
- 국제우편물
- android notification
- Today
- Total
TAE
[Android/Kotlin] 앱에 광고 달고 수익 실현하기 - Admob 코드 설정_RecyclerView안에 Admob 본문
[Android/Kotlin] 앱에 광고 달고 수익 실현하기 - Admob 코드 설정_RecyclerView안에 Admob
tg-world 2023. 8. 30. 16:13이번 포스팅에는 애드몹 코드 설정에 관하여 포스팅 하겠습니다.
구현 내용입니다.
계정 설정 관련하여서는 전 포스팅을 참고해 주시면 됩니다.
https://tg-world.tistory.com/27
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
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' 카테고리의 다른 글
[android/kotlin] 앱에 광고 달고 수익 실현하기 - 애드몹 계정설정 (0) | 2023.08.28 |
---|---|
[Android/Kotlin] RemoteConfig로 클릭하면 뒤집히는 뷰로 영단어 암기장 만들기 (0) | 2023.08.10 |
[Android/Kotlin] 클릭하면 뒤집히는 뷰로 영단어 암기장 만들기 flip view(플립뷰) (0) | 2023.08.10 |
[Android/Kotlin] 숏츠 화면 만들기 (ExoPlayer) (0) | 2023.07.12 |
[Android/Kotlin]SNS(google) 로그인 (0) | 2023.06.25 |