Admob Kotlin Android 애드몹 코틀린 안드로이드
코틀린을 사용하여 android 앱을 만들 때 애드몹을 추가하는 방법을 정리한다.
기본 가이드는 아래 구글 사이트를 참고하면 된다.
https://developers.google.com/admob/android/banner?hl=ko
테스트는 항상 테스트 광고로 해야 한다.
그런데 이상한건 기본 가이드 만으로 잘 된 적이 없다.
그래서 내가 추가한 방법을 정리하겠다.
[배너광고]
1. 레이아웃에 위치시킨다.
기본 가이드에 있는 내용을 그대로 복사하고 하단으로 위치만 이동했다.
main_activity.xml
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
android:layout_marginStart="8dp" ads:layout_constraintStart_toStartOf="parent"
android:layout_marginEnd="8dp" ads:layout_constraintEnd_toEndOf="parent" android:visibility="visible"
ads:layout_constraintHorizontal_bias="0.0" android:layout_marginTop="644dp"
ads:layout_constraintTop_toTopOf="parent" ads:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="8dp" ads:layout_constraintVertical_bias="1.0">
</com.google.android.gms.ads.AdView>
2. build.gradle (Module.app) 에 dependencies 안에 ads 버전 내용 추가한다.
dependencies {
implementation 'com.google.android.gms:play-services-ads:18.3.0'
}
3. MainActivity.kt 파일에 코드 추가
MobileAds.initialize(this, "ca-app-pub-3940256099942544/6300978111")
adView.loadAd(AdRequest.Builder().build())
4. 그리고 잘 안될 경우 AndroidManifest.xml 의 <application> 안에도 추가해 준다.
<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~6300978111 -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~6300978111"/>
빌드 후 폰에 넣어보면 하단에 Test ad. 로 나타난다.
LTE 나 wifi 등 망이 잡혀 있어야 Test ad. 가 나타난다.
[전면광고]
전면광고는 더 쉽다.
1. 아래 객체를 선언하고,
private lateinit var mInterstitialAd: InterstitialAd
onCreate() 에 아래 내용을 넣는다. 광고 ID는 테스트 ID 이다.
mInterstitialAd = InterstitialAd(this)
mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
mInterstitialAd.loadAd(AdRequest.Builder().build())
Load 까지 했는데 앱 실행을 하자 마자 붙지는 않는다.
망에 연결되어 있는 상태이면서 Load 되는 시간이 좀 걸린다.
그래서 onCreate() 에 AdListener()를 추가하여 Loading 을 체크했다.
동작상 필요 없어서 나중에 제거했다.
mInterstitialAd.adListener = object : AdListener() {
override fun onAdLoaded() {
Log.d("mytodolist", "AD loaded completely.")
}
}
나는 계속 광고가 뜨는게 싫어서 앱 실행시 한번만 뜨도록 Flag를 넣었다.
버튼 누를 때 동작하도록 button.setOnClickListener()에 넣었다.
if (mInterstitialAd.isLoaded && hasNotShowed) {
mInterstitialAd.show()
hasNotShowed = false
} else {
//Log.d("mytodolist", "The interstitial wasn't loaded yet.")
}
로딩 시간이 길지 않아서 버튼 누를 때 전면 광고가 한번만 잘 나왔다.
==============================================================
다시 해 보려니 잘 안되서 정리한다.
하단 배너 광고와 버튼을 누를경우 전면 광고가 나오도록 테스트 버전을 만들어 보겠다.
1. 신규 project 를 empty activity 로 생성한다.
2. anko 라이브러리를 사용할 수 있게 build.gradle 에 추가한다.
ext.kotlin_version = '1.3.61'
ext.anko_version='0.10.8'
3. app/build.gradle의 dependencies 에 아래 코드를 추가한다.
implementation "org.jetbrains.anko:anko:$anko_version"
implementation 'com.google.android.gms:play-services-ads:18.3.0'
4. AndroidManifest.xml 파일의 <application> 안에 meta-data 정보를 추가해야 한다.
value 값은 테스트 코드 이지만 정식 배포할 때에는 AdMob에서 받은 코드를 넣으면 된다.
<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~6300978111 -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~6300978111"/>
5. layout 파일에 버튼과 배너를 위치시킨다.
<Button
android:text="Button"
android:layout_width="132dp"
android:layout_height="65dp"
android:id="@+id/clickButton" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="136dp" android:layout_marginTop="608dp"
app:layout_constraintTop_toTopOf="parent"/>
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
android:layout_marginStart="8dp" ads:layout_constraintStart_toStartOf="parent"
android:layout_marginEnd="8dp" ads:layout_constraintEnd_toEndOf="parent" android:visibility="visible"
ads:layout_constraintHorizontal_bias="0.0" android:layout_marginTop="644dp"
ads:layout_constraintTop_toTopOf="parent" ads:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="8dp" ads:layout_constraintVertical_bias="1.0">
</com.google.android.gms.ads.AdView>
6. MainActivity.kt 파일을 아래와 같이 구현한다.
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.InterstitialAd
import com.google.android.gms.ads.MobileAds
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private lateinit var mInterstitialAd: InterstitialAd
var hasNotShowed = true
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//배너 초기화
MobileAds.initialize(this, "ca-app-pub-3940256099942544/6300978111")
adView.loadAd(AdRequest.Builder().build())
//전면 초기화
mInterstitialAd = InterstitialAd(this)
mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
mInterstitialAd.loadAd(AdRequest.Builder().build())
mInterstitialAd.adListener = object : AdListener() {
override fun onAdLoaded() {
//Log.d("mytodolist", "AD loaded completely.")
}
}
//전면 광고 호출
clickButton.setOnClickListener {
if (mInterstitialAd.isLoaded && hasNotShowed) {
mInterstitialAd.show()
hasNotShowed = false
} else {
//Log.d("mytodolist", "The interstitial wasn't loaded yet.")
}
}
}
}
'프로그래밍 > Kotlin' 카테고리의 다른 글
Kotlin - Retrofit 간단 사용법 (0) | 2020.11.19 |
---|---|
Kotlin API docs (0) | 2020.10.19 |
Play Store 에 앱 올리기 android kotlin 후기 및 간단 가이드 (0) | 2020.06.22 |
Fragment Kotlin Android 프래그먼트 코틀린 안드로이드 (0) | 2020.05.12 |
코틀린 Kotlin (0) | 2020.01.30 |