본문 바로가기

안드로이드/코틀린

kakao Adfit 적용 [ 인앱 배너 광고]

반응형

애드몹 배너 광고만 사용하다 다른 배너 광고와 수익을 비교하고자 카카오 애드핏을 적용 했고, 공식 사이트에서 카카오 아이디로 가입을 하고  가이드를 참고해 적용 했습니다.

※카카오 애드핏은 심사 과정을 거쳐야지만 광고가 게재되는 불편함이 있습니다.

광고 단위 생성

공식 사이트에서 > 광고관리 로 이동하셔서 앱을 등록하고 광고 단위 코드를 제공 받습니다.

권한 등록

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

광고 필수 권한을 manifest.xml에 등록합니다.

sdk 적용 

build.gradle(project단) 

allprojects {
    repositories {
        jcenter()
        google()
        maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
    }
}

build.gradle(app단)

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.ads:ads-identifier:1.0.0-alpha01'

    implementation "com.kakao.adfit:ads-base:$adfit_version"
}

에드핏을 사용하기 위해 sdk를 추가하고, 광고 id를 다룰수 있도록 'ads-identifier'도 추가합니다. 그리고 코틀린 설정을 해줍니다. 

해당 프로젝트의 코틀린 설정이 안되어 있으신분은 제 블로그 포스팅을 참고해주세요.

타겟api 28 대응

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true"/>
</network-security-config>

앱의 targetSdkVersion이 28이상인 경우, 광고 노출 및 클릭을 정상적으로 동작하기 위해서는 일반 텍스트 트래픽을 허용하는 네트워크 보안 설정이 필요합니다.

res > xml 폴더(없으신 경우 생성) > network_security_config.xml을 추가합니다.

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application 
        android:networkSecurityConfig="@xml/network_security_config"
        ... >
        ...
    </application>
</manifest>

 

 

 

 

광고 뷰 추가

        <com.kakao.adfit.ads.ba.BannerAdView
            android:id="@+id/bannderAdView"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

광고 뷰의 크기는 광고를 노출하는 시점에 등록한 광고의 크기에 맞춰 자동 조절 됩니다. 

등록한 광고의 크기보다 뷰의 크기가 작으면 수익이 발생하지 않습니다! (320x50으로 설정한 경우 뷰는 같거나 더 커야합니다.)

수신한 광고가 없을땐 뷰의 크기는 초기 그대로인 0x0 입니다.

private fun setAds(){
        binding.bannderAdView.run{
            setClientId(getString(R.string.adfit_another_unit_id))
            setAdListener(object : AdListener{
                override fun onAdFailed(p0: Int) {
                    // 호출 실패시 
                }

                override fun onAdClicked() {
                    // 광고 클릭시 
                }

                override fun onAdLoaded() {
                    // 호출 완료 
                }

            })
            
            loadAd()

        }
    }
    
    ....
    
    override fun onResume() {
        super.onResume()
        binding.bannderAdView.resume()
    }

    override fun onDestroy() {
        super.onDestroy()
        binding.bannderAdView.destroy()
    }

    override fun onPause() {
        super.onPause()
        binding.bannderAdView.pause()
    }

그리고 광고가 속해 있는 엑티비티나 프래그먼트의 생명주기 마다 광고의 api(pause,resume,destory)를 호출해야하며 그러지 않을 경우 광고 수신에 불이익이 생길수 있으니 주의하세요

 

에러코드

202 : 광고 요청 실패 ( = 일시적인 네트워크 오류 )

301 : 유효하지 않은 광고 응답을 수신한 경우

302 : 보여줄 광고가 없을 경우

501 : 광고 로딩 실패

601 : sdk 내부 에러 

 

더 많은 수익이 있길 기도합니다

#기도메타

 

 

 

반응형