네이티브광고(NativeAd)
전달된 asset 정보를 통해 원하는 모양의 배너 광고를 구성할 수 있습니다.
지원 미디에이션(Supported Mediation Ads)
광고 노출을 위해서는 사용하려는 네트워크를 확인 하고 "광고 미디에이션 연동" 작업이 필요합니다.
광고 미디에이션 연동ADCash Android SDK에서 제공하는 광고를 원하는 모양으로 레이아웃을 만들어 호출하고 원하는곳에 View를 삽입합니다.
NativeAdLoader
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