본문 바로가기

프로그래밍/Kotlin

Admob Kotlin Android 애드몹 코틀린 안드로이드

반응형

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

 

 

 

반응형