네이티브광고(NativeAd)

전달된 asset 정보를 통해 원하는 모양의 배너 광고를 구성할 수 있습니다.

지원 미디에이션(Supported Mediation Ads)

광고 노출을 위해서는 사용하려는 네트워크를 확인 하고 "광고 미디에이션 연동" 작업이 필요합니다.

광고 미디에이션 연동

ADCash Android SDK에서 제공하는 광고를 원하는 모양으로 레이아웃을 만들어 호출하고 원하는곳에 View를 삽입합니다.

Activity Lifecycle(onResume, onPause, onDestroy)를 통해 BannerAdView의 동일한 함수 호출이 필요합니다.


NativeAdLoader

NativeAdLoader


NativeAdLoader(
      context(Context),
      placementId(String),
      viewAdapter(NativeViewAdapter),
      listener(NativeAdLoader.NativeListener)
).requestAD()

parameters

NAME
TYPE
DESCRIPTION

context

Context

Android Context

placementId

String

광고 지면 코드(별도 발급 요청)

viewAdapter

NativeViewAdapter

네이티브 광고 레이아웃 정보

listener

NativeAdLoader.NativeListener

네이티브 광고 리스너

Listener(NativeAdLoader.NativeListener)

interface NativeListener {
    // 광고 로드 성공 이벤트(adView -> 광고 컨텐츠 뷰)
    fun onLoaded(adView: View)
    // 광고 로드 실패 이벤트
    fun onFailed(error: AdError)
    // 광고 노출 이벤트
    fun onImpression()
    // 광고 클릭 이벤트
    fun onClicked()
}

// onFailed data
data class AdError(
    // 실패코드
    val errorCode: Int,
    // 실패사유
    val errorMessage: String
)

Layout(View)

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <FrameLayout
      android:id="@+id/nativeAdViewContainer"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center" />

</FrameLayout>

Programmatically

NativeViewAdapter 설정은 각각의 네이티브 미디에이션 레이아웃 구성 설정을 확인하세요.

class NativeAdActivity : AppCompatActivity() {

  private val vb: ActivityNativeBinding by lazy {
    ActivityNativeBinding.inflate(LayoutInflater.from(this))
  }

  private var nativeAdLoader: NativeAdLoader? = null

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // set layout
    setContentView(vb.root)
    // set 'NatvieAdLoader'
    nativeAdLoader = NativeAdLoader(
      context = this@NativeAdActivity,
      placementId = "지면코드",
      viewAdapter = makeViewAdapter(),
      listener = object : NativeAdLoader.NativeListener {
        override fun onLoaded(adView: View) {
          // 광고 로드 성공 이벤트
          vb.nativeAdViewContainer.removeAllViews()
          vb.nativeAdViewContainer.addView(adView)
        }

        override fun onFailed(error: AdError) {
          // 광고 로드 실패 이벤트
          // AdError.errorCode
          // AdError.errorMessage
        }

        override fun onImpression() {
          // 광고 노출 이벤트
        }

        override fun onClicked() {
          // 광고 클릭 이벤트
        }
      }
    )
    nativeAdLoader?.requestAd()
  }

  // NativeViewAdapter
  private fun makeViewAdapter(): NativeViewAdapter {
    val builder = NativeViewAdapter.Builder()
    // biz-board
    // https://avatye.gitbook.io/adcash/android/nativead/bizboard
    builder.setBizBoardViewAdapter(
      viewAdapter = BizBoardNativeViewAdapter.Builder(
        nativeAdLayoutId = R.layout.native_ad_unit_adfit_bizboard,
        nativeAdViewId = R.id.native_unit_adfit_bizboard_container
      ).build()
    )
    // admob
    // https://avatye.gitbook.io/adcash/android/nativead/admob-gam
    builder.setAdmobViewAdapter(
      viewAdapter = AdMobNativeViewAdapter.Builder(
        nativeAdLayoutId = R.layout.native_ad_unit_admob,
        nativeAdViewId = R.id.native_unit_admob_container
      ).setBodyViewId(R.id.native_unit_admob_body)
        .setMediaViewId(R.id.native_unit_admob_media)
        .setAdvertiserViewId(R.id.native_unit_admob_advertiser)
        .setCallToActionId(R.id.native_unit_admob_cta)
        .setHeadlineViewId(R.id.native_unit_admob_headline)
        .setIconViewId(R.id.native_unit_admob_icon)
        .setPriceViewId(R.id.native_unit_admob_price)
        .setStarRatingViewId(R.id.native_unit_admob_stars)
        .setStoreViewId(R.id.native_unit_admob_store)
        .build()
    )
    // gam
    // https://avatye.gitbook.io/adcash/android/nativead/admob-gma
    builder.setGAMViewAdapter(
      viewAdapter = GAMNativeViewAdapter.Builder(
        nativeAdLayoutId = R.layout.native_ad_unit_admob_gam,
        nativeAdViewId = R.id.native_unit_admob_gam_container
      ).setBodyViewId(R.id.native_unit_admob_gam_body)
        .setMediaViewId(R.id.native_unit_admob_gam_media)
        .setAdvertiserViewId(R.id.native_unit_admob_gam_advertiser)
        .setCallToActionId(R.id.native_unit_admob_gam_cta)
        .setHeadlineViewId(R.id.native_unit_admob_gam_headline)
        .setIconViewId(R.id.native_unit_admob_gam_icon)
        .setPriceViewId(R.id.native_unit_admob_gam_price)
        .setStarRatingViewId(R.id.native_unit_admob_gam_stars)
        .setStoreViewId(R.id.native_unit_admob_gam_store)
        .build()
    )
    // adpopcorn
    // https://avatye.gitbook.io/adcash/android/nativead/adpopcorn
    builder.setAdPopcornViewAdapter(
      viewAdapter = AdPopcornNativeViewAdapter.Builder(
        nativeAdLayoutId = R.layout.native_ad_unit_adpopcorn,
        nativeAdViewId = R.id.native_unit_adpopcorn_container
      ).setDescViewId(R.id.native_unit_adpopcorn_desc)
        .setCallToActionId(R.id.native_unit_adpopcorn_cta)
        .setIconImageViewId(R.id.native_unit_adpopcorn_icon_image)
        .setMainImageViewId(R.id.native_unit_adpopcorn_main_image)
        .setTitleViewId(R.id.native_unit_adpopcorn_title)
        .build()
    )
    // applovin-max
    // https://avatye.gitbook.io/adcash/android/nativead/applovin-max
    builder.setAppLovinMaxViewAdapter(
      viewAdapter = AppLovinMaxNativeViewAdapter.Builder(
        nativeAdLayoutId = R.layout.native_ad_unit_applovin_max,
        nativeAdViewId = R.id.native_unit_applovin_container
      ).setBodyViewId(viewId = R.id.native_unit_applovin_body)
        .setIconViewId(viewId = R.id.native_unit_applovin_icon)
        .setMediaViewId(viewId = R.id.native_unit_applovin_image)
        .setCtaViewId(viewId = R.id.native_unit_applovin_cta)
        .setTitleViewId(viewId = R.id.native_unit_applovin_title)
        .build()
    )
    // nam
    // https://avatye.gitbook.io/adcash/android/nativead/nam
    builder.setNamViewAdapter(
      viewAdapter = NamNativeViewAdapter.Builder(
        nativeAdLayoutId = R.layout.native_ad_unit_nam,
        nativeAdViewId = R.id.native_unit_nam_container
      ).build()
    )
    // pangle
    // https://avatye.gitbook.io/adcash/android/nativead/pangle
    builder.setPangleViewAdapter(
      viewAdapter = PangleNativeViewAdapter.Builder(
        nativeAdLayoutId = R.layout.native_ad_unit_pangle,
        nativeAdViewId = R.id.native_unit_pangle_container
      ).setIconViewId(R.id.native_unit_pangle_icon)
        .setTitleViewId(R.id.native_unit_pangle_title)
        .setCreativeButtonViewId(R.id.native_unit_pangle_cta)
        .setDescriptionViewId(R.id.native_unit_pangle_text)
        .setMediaViewId(R.id.native_unit_pangle_media)
        .build()
    )
    return builder.build()
  }

  override fun onResume() {
    super.onResume()
    nativeAdLoader?.onResume()
  }

  override fun onPause() {
    super.onPause()
    nativeAdLoader?.onPause()
  }

  override fun onDestroy() {
    super.onDestroy()
    nativeAdLoader?.onDestroy()
  }
}


Last updated