Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

개발새발 블로그

내 앱에 광고를 적용해보자!( 광고 매체사별 비교 ) 본문

kotlin

내 앱에 광고를 적용해보자!( 광고 매체사별 비교 )

SeanBlog 2020. 3. 8. 19:50

안녕하세요 개발새발 블로그입니다.

오늘은 App 을 개발한 후 광고를 붙여 수익을 얻는 방법을 알아보죠!

 

 

1. 광고 매체사별 장단점

Google Admob

장점 : 높은 수익성, 안정적인 수익 보장

단점 : 부정 클릭 등 정책위반 사유 주의 

 

애드싱크

장점 : 높은 수익률

단점 : 인터페이스 악화 및 사용자 불편감

 

카카오 애드핏

장점 : 노출 당 금액이 높음

단점 : 이미지 또는 텍스트 배너만 사용 가능

 

카울리

장점 : Google Admob 과 비슷한 광고 형태 제공

단점 : Google Admob 보다 수익이 낮음.

 

 

2. 광고 형태의 종류

상시노출되는 띠배너 보다 전면배너수익성이 오히려 높게나옵니다.

그리고 전면배너 보단 App에 디자인에 맞춰서 내가 꾸밀수 있는 네이티브애드가 사용자에게 불편함을 덜 주게만들수있습니다.

 

 

3. 직접 적용해봅시다!(Google Admob)

ㄴ 직접 운영하고 있는 롤스카우터 (LoL Scouter) App 에 광고를 적용해보겠습니다!

 

 

 Step 1. 먼저 Google Admob 에 가입해서 App을 등록합니다

앱 -> 앱추가를 클릭합니다.

 

 

 

간단하게 만들수 있습니다.

 

 

Step2. 광고 단위 만들기.

Google 에서는 여러가지 광고를 제공합니다. 원하는 광고형식을 선택한 후

 

광고 단위 만들기 를 누르면 쉽게 생성됩니다.

 

 

 

Step3. 만들어진 광고 단위 App 에 적용후 띄우기. (네이티브 광고를 사용하겠습니다.)

 

먼저 manifest에 <application> 안에 만들었던 App ID를 적용해줍니다.

앱 설정에서 등록한 App의 ID 를 확인 하실 수 있습니다.

 

 

 

그리고 gradle 에 google admob을 implement 해줍니다.

implementation "com.google.android.gms:play-services-ads:18.3.0"

 

 

 

 

이 후 XML로 광고를 띄울 화면을 만들어주겠습니다.

 

UnifiedNativeAdview 안에 원하는대로 화면을 구성합니다.

이미지 또는 동영상을 띄울 레이아웃은 

위 이미지 처럼 MediaView로 할당해주면 됩니다.

 

  - 요약

<UnifiedNativeAdview>

<LinearLayout>  ...   </LinearLayout>

<LinearLayout>  ...   </LinearLayout>

<LinearLayout>  ...   </LinearLayout> 등등

<MediaView/>

</UnifiedNativeAdview>

 

형태가 됩니다.

 

저는 위 이미지 처럼 구현 하였습니다. 빨간 칸은 <UnifiedNativeAdview> 공간이고 

파란 칸은 <MediaView/> 가 되겠습니다. 나머지는 원하시는대로 커스텀하시면 됩니다.

 

 

다음으로 Admob 광고를 얻어오겠습니다.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        adsBinding = DataBindingUtil.setContentView(this, R.layout.dialog_camera_ads)
 
        MobileAds.initialize(this) {}
 
 

onCreate에 MobileAds.initialize(this) {} 라고 작성해주시고

 

 

 

    private fun getAdmob() {
        val builder = AdLoader.Builder(this, ADMOB_AD_UNIT_ID)
        builder.forUnifiedNativeAd {
                unifiedNativeAd ->
            populateUnifiedNativeAdView(unifiedNativeAd)
        }
        val adLoader = builder.withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(errorCode: Int) {
                Toast.makeText(this@AdsActivityCamera, "Failed to load native ad: " + errorCode, Toast.LENGTH_SHORT).show()
                adsBinding.adsLoad.visibility = View.GONE
            }
        }).build()
 
   }

adLoader.loadAd(AdRequest.Builder().build() 를 사용하는 순간 광고를 요청하게됩니다.

그리고 광고를 수신하면 

 

unifiedNativeAd ->
populateUnifiedNativeAdView(unifiedNativeAd)

를 통하여 populateUnifiedNativeAdView메소드로 광고를 보내줍니다.

ㄴ>

(populateUnifiedNativeAdView = 받은 광고 정보를 아까 만든 레이아웃 요소에 맞게 뿌려주는 메소드(임의로 만들었습니다. 바로 적용하셔도됩니다.))

 

 

< populateUnifiedNativeAdView (받아온 광고 적용 예시) >

private fun populateUnifiedNativeAdView(
        nativeAd: UnifiedNativeAd){
        currentNativeAd?.destroy()
        currentNativeAd = nativeAd
 
        adsBinding.UnifiedNativeAdView.mediaView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_media)
 
        // Set other ad assets.
        adsBinding.UnifiedNativeAdView.headlineView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_headline)
        adsBinding.UnifiedNativeAdView.bodyView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_body)
        adsBinding.UnifiedNativeAdView.callToActionView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_call_to_action)
        adsBinding.UnifiedNativeAdView.iconView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_app_icon)
        adsBinding.UnifiedNativeAdView.priceView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_price)
        adsBinding.UnifiedNativeAdView.starRatingView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_stars)
        adsBinding.UnifiedNativeAdView.storeView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_store)
        adsBinding.UnifiedNativeAdView.advertiserView = adsBinding.UnifiedNativeAdView.findViewById(R.id.ad_advertiser)
 
 
        // The headline and media content are guaranteed to be in every UnifiedNativeAd.
        (adsBinding.UnifiedNativeAdView.headlineView as TextView).text = nativeAd.headline
        adsBinding.UnifiedNativeAdView.mediaView.setMediaContent(nativeAd.mediaContent)
 
        // These assets aren't guaranteed to be in every UnifiedNativeAd, so it's important to
        // check before trying to display them.
        if (nativeAd.body == null) {
            adsBinding.UnifiedNativeAdView.bodyView.visibility = View.INVISIBLE
        } else {
            adsBinding.UnifiedNativeAdView.bodyView.visibility = View.VISIBLE
            (adsBinding.UnifiedNativeAdView.bodyView as TextView).text = nativeAd.body
        }
 
        if (nativeAd.callToAction == null) {
            adsBinding.UnifiedNativeAdView.callToActionView.visibility = View.INVISIBLE
        } else {
            adsBinding.UnifiedNativeAdView.callToActionView.visibility = View.VISIBLE
            (adsBinding.UnifiedNativeAdView.callToActionView as Button).text = nativeAd.callToAction
        }
 
        if (nativeAd.icon == null) {
            adsBinding.UnifiedNativeAdView.iconView.visibility = View.GONE
        } else {
            (adsBinding.UnifiedNativeAdView.iconView as ImageView).setImageDrawable(
                nativeAd.icon.drawable)
            adsBinding.UnifiedNativeAdView.iconView.visibility = View.VISIBLE
        }
 
        if (nativeAd.price == null) {
            adsBinding.UnifiedNativeAdView.priceView.visibility = View.INVISIBLE
        } else {
            adsBinding.UnifiedNativeAdView.priceView.visibility = View.VISIBLE
            (adsBinding.UnifiedNativeAdView.priceView as TextView).text = nativeAd.price
        }
 
        if (nativeAd.store == null) {
            adsBinding.UnifiedNativeAdView.storeView.visibility = View.INVISIBLE
        } else {
            adsBinding.UnifiedNativeAdView.storeView.visibility = View.VISIBLE
            (adsBinding.UnifiedNativeAdView.storeView as TextView).text = nativeAd.store
        }
 
        if (nativeAd.starRating == null) {
            adsBinding.UnifiedNativeAdView.starRatingView.visibility = View.INVISIBLE
        } else {
            (adsBinding.UnifiedNativeAdView.starRatingView as RatingBar).rating = nativeAd.starRating!!.toFloat()
            adsBinding.UnifiedNativeAdView.starRatingView.visibility = View.VISIBLE
        }
 
        if (nativeAd.advertiser == null) {
            adsBinding.UnifiedNativeAdView.advertiserView.visibility = View.INVISIBLE
        } else {
            (adsBinding.UnifiedNativeAdView.advertiserView as TextView).text = nativeAd.advertiser
            adsBinding.UnifiedNativeAdView.advertiserView.visibility = View.VISIBLE
        }
 
        // This method tells the Google Mobile Ads SDK that you have finished populating your
        // native ad view with this native ad.
        adsBinding.UnifiedNativeAdView.setNativeAd(nativeAd)
 
        // Get the video controller for the ad. One will always be provided, even if the ad doesn't
        // have a video asset.
        val vc = nativeAd.videoController
        adsBinding.adsLoad.visibility = View.GONE
    }
 

 

 

요약 정리 

1. 광고 Manifests 추가 및 gradle 추가.

2. 광고 받아온 후 적용할 레이아웃 작성.

3. 광고 요청 및 받기

4. 받은 광고 레이아웃에 원하는 정보 골라서 뿌려주기. 

 

입니다.

 

위 코드를 적용하여 현재 스토어에서 운영되고있는 앱에 적용한 모습입니다.

앱 종료시 팝업 광고
카메라 촬영후 검색동안 뜨는 팝업 광고
전적 검색 RecyclerView에 중간중간 포함되는 광고

 

주의)

1. 광고 테스트하실때는 google 에서 제공하는 Test광고 ID 로 확인하셔야 합니다.

2. 실제 스토어에 업데이트할떄는 playstore App 설정에서 광고있음으로 선택하셔서 런칭하셔야 광고가 제대로 나옵니다.

 

 

Google Admob 네이티브 광고 가이드 : https://developers.google.com/admob/android/native/start?hl=ko

 

네이티브 광고  |  Android  |  Google Developers

핵심사항: Google의 네이티브 광고 플레이북에서 네이티브 광고에 대해 자세히 알아보세요. 모든 프로젝트 예를 둘러보려면 Google Codelab을 방문하세요. 자바 및 Kotlin용 샘플을 이용할 수 있습니다. 고객 성공사례인 우수사례 1과 우수사례 2를 읽어보세요. 네이티브 광고는 플랫폼 고유의 UI 구성요소를 통해 사용자에게 제공되는 광고 애셋입니다. 이 광고는 레이아웃을 구축할 때 사용한 것과 동일한 유형의 보기로 나타나며, 게재되는 사용자 환

developers.google.com

Google Admob Test 광고 단위  ID : ca-app-pub-3940256099942544/2247696110

Comments