애드캐시
  • 제품안내
  • ANDROID
    • 릴리즈 노트
    • 시작하기
    • 배너광고(BannerView)
    • 배너광고(BannerLoader)
    • 전면광고(Interstitial)
    • 네이티브광고(NativeAd)
      • AdPopcorn
      • AdMob & GAM
      • NAM(Naver Ad Manager)
      • BizBoard
      • Pangle
      • AppLovinMax
    • 기타 설정
    • 광고 미디에이션 연동
    • 참조 모듈 버전 정보
    • 에러코드
    • Previous Version
      • 릴리즈 노트(~2.0.0.15)
      • 시작하기(~2.0.0.15)
  • iOS
    • 릴리즈 노트
  • miscellaneous
    • 애드캐시 매출 조회
Powered by GitBook
On this page
  • 지원 미디에이션(Supported Mediation Ads)
  • NativeAdLoader
  • parameters
  • Listener(NativeAdLoader.NativeListener)
  • Layout(View)
  • Programmatically
  1. ANDROID

네이티브광고(NativeAd)

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

Previous전면광고(Interstitial)NextAdPopcorn

Last updated 1 year ago

지원 미디에이션(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()
  }
}
public class NativeAdActivity extends AppCompatActivity {

  private ActivityNativeBinding vb;
  private NativeAdLoader nativeAdLoader;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    vb = ActivityNativeBinding.inflate(getLayoutInflater());
    setContentView(vb.getRoot());
    nativeAdLoader = new NativeAdLoader(
      //context
      this,
      // placementId
      "지면코드",
      // viewAdapter
      makeViewAdapter(),
      // listener
      new NativeAdLoader.NativeListener() {
        @Override
        public void onLoaded(@NonNull View adView) {
          // 광고 로드 성고 이벤트
          vb.nativeAdViewContainer.removeAllViews();
          vb.nativeAdViewContainer.addView(adView);      
        }

        @Override
        public void onFailed(@NonNull AdError error) {
          // 광고 로드 실패 이벤트
          // AdError.errorCode
          // AdError.errorMessage
        }

        @Override
        public void onImpression() {
          // 광고 노출 이벤트
        }

        @Override
        public void onClicked() {
          // 광고 클릭 이벤트
        }
      });
    nativeAdLoader.requestAd();
  }

  // NativeViewAdapter
  private NativeViewAdapter makeViewAdapter() {
    final NativeViewAdapter.Builder builder = new NativeViewAdapter.Builder();
    // biz-board
    // https://avatye.gitbook.io/adcash/android/nativead/bizboard
    builder.setBizBoardViewAdapter(
      // viewAdapter
      new 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
      new 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-gam
    builder.setGAMViewAdapter(
      // viewAdapter
      new 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
      new 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
      new AppLovinMaxNativeViewAdapter.Builder(
        // nativeAdLayoutId
        R.layout.native_ad_unit_applovin_max,
        // nativeAdViewId
        R.id.native_unit_applovin_container
      ).setBodyViewId(R.id.native_unit_applovin_body)
      .setIconViewId(R.id.native_unit_applovin_icon)
      .setMediaViewId(R.id.native_unit_applovin_image)
      .setCtaViewId(R.id.native_unit_applovin_cta)
      .setTitleViewId(R.id.native_unit_applovin_title)
      .build()
    );
    // nam
    // https://avatye.gitbook.io/adcash/android/nativead/nam
    builder.setNamViewAdapter(
      new 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(
      new 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
  public void onResume() {
    super.onResume();
    if (nativeAdLoader != null) {
      nativeAdLoader.onResume();
    }
  }

  @Override
  public void onPause() {
    super.onPause();
    if (nativeAdLoader != null) {
      nativeAdLoader.onPause();
    }
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    if (nativeAdLoader != null) {
      nativeAdLoader.onDestroy();
    }
  }
}


광고 미디에이션 연동
AdPopcorn
AdMob & GAM(Google Ad Manager)
BizBoard(AdFit BizBoard)
NAM(Naver Ad Manager)
AppLovinMax
Pangle