네이티브광고(NativeAd)
전달된 asset 정보를 통해 원하는 모양의 배너 광고를 구성할 수 있습니다.
Last updated
전달된 asset 정보를 통해 원하는 모양의 배너 광고를 구성할 수 있습니다.
Last updated
광고 노출을 위해서는 사용하려는 네트워크를 확인 하고 "광고 미디에이션 연동" 작업이 필요합니다.
ADCash Android SDK에서 제공하는 광고를 원하는 모양으로 레이아웃을 만들어 호출하고 원하는곳에 View를 삽입합니다.
Activity Lifecycle(onResume, onPause, onDestroy)를 통해 BannerAdView의 동일한 함수 호출이 필요합니다.
NativeAdLoader
NativeAdLoader(
context(Context),
placementId(String),
viewAdapter(NativeViewAdapter),
listener(NativeAdLoader.NativeListener)
).requestAD()
context
Context
Android Context
placementId
String
광고 지면 코드(별도 발급 요청)
viewAdapter
NativeViewAdapter
네이티브 광고 레이아웃 정보
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
)
<?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>
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();
}
}
}