Native Ad
1. 기본 요건
ADX Android SDK를 프로젝트에 추가합니다.
Native Ad용으로 발급받은 Ad Unit ID를 사용합니다.
광고를 요청하기 전에 SDK 초기화를 먼저 진행합니다.
SDK 초기화는 앱 실행 시 한 번만 호출하여 주시고, 광고 요청은 초기화가 완료된 후에 이뤄져야 합니다.
2. 레이아웃 설정
Native Ad의 경우, 광고에 사용 될 레이아웃을 직접 구성해야 합니다. 필수 구성 요소들은 다음과 같습니다.
Title :
TextView
Main Text :
TextView
Call-To-Action :
Button
Icon Image :
ImageView
Main Image :
FrameLayout
Privacy Icon :
FrameLayout
Ad Tag :
TextView 또는 ImageView
이 요소들은 반드시 포함하여 구성하여 주시고, 광고 컨텐츠를 덮는 Layer가 없어야 합니다. 또한 텍스트 변경, 이미지 변경, 터치 시 액션 변경 등 광고 컨텐츠에 관련된 부분을 가공하거나 변경하지 않도록 주의 부탁드립니다.
샘플 소스의 layout_adx_native_ad.xml을 참조하실 수 있습니다.
3. 구현
Native Ad는 다음 3가지 방법 중 하나로 광고를 로드할 수 있습니다.
Case 1: 하나의 View로 사용하는 경우
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AdxNativeAdFactory.init(this);
// for Native Ad
AdxNativeAdFactory.setAdxViewBinder("<NATIVE_AD_UNIT_ID>"),
new AdxViewBinder.Builder(R.layout.layout_media_native_ad)
.mediaViewContainerId(R.id.mediaContainerId)
.iconImageId(R.id.adIconId)
.titleId(R.id.titleId)
.adChoiceContainerId(R.id.adChoicesContainerId)
.callToActionId(R.id.callToActionId)
.build());
AdxNativeAdFactory.preloadAd("<NATIVE_AD_UNIT_ID>");
}
Activity (or Fragment)
private View mAdView;
private com.adxcorp.ads.nativeads.NativeAd mNativeAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_native_ad_factory);
AdxNativeAdFactory.addListener(mListener);
AdxNativeAdFactory.loadAd("<NATIVE_AD_UNIT_ID>");
}
@Override
protected void onDestroy() {
AdxNativeAdFactory.removeListener(mListener);
if(mNativeAd != null) {
mNativeAd.destroy();
mNativeAd = null;
}
super.onDestroy();
}
private final AdxNativeAdFactory.NativeAdListener mListener = new AdxNativeAdFactory.NativeAdListener() {
@Override
public void onSuccess(String s, com.adxcorp.ads.nativeads.NativeAd nativeAd) {
if ("<NATIVE_AD_UNIT_ID>".equals(s)) {
mNativeAd = nativeAd;
mAdView = AdxNativeAdFactory.getNativeAdView(
NativeAdFactoryActivity.this,
s,
mContentView,
new com.adxcorp.ads.nativeads.NativeAd.NativeEventListener() {
@Override
public void onImpression(View view) {
}
@Override
public void onClick(View view) {
}
});
mContentView.addView(mAdView);
}
}
@Override
public void onFailure(String s) {
}
};
Case 2: RecyclerView를 사용하는 경우
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AdxNativeAdFactory.init(this);
// for Native Ad
AdxNativeAdFactory.setAdxViewBinder("<NATIVE_AD_UNIT_ID>"),
new AdxViewBinder.Builder(R.layout.layout_media_native_ad)
.mediaViewContainerId(R.id.mediaContainerId)
.iconImageId(R.id.adIconId)
.titleId(R.id.titleId)
.adChoiceContainerId(R.id.adChoicesContainerId)
.callToActionId(R.id.callToActionId)
.build());
}
Acivity (or Fragment)
리스트에서 광고 고정 위치와 반복 위치를 소스 코드에 직접 지정해야 합니다.
private AdxRecyclerAdapter mRecyclerAdapter;
private RecyclerView mRecyclerView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_native_ad_recyclerview);
mRecyclerView = (RecyclerView) findViewById(R.id.native_recycler_view);
final RecyclerView.Adapter originalAdapter = new DemoRecyclerAdapter();
// 광고 고정 및 반복 위치 지정
NativeAdPosition.ClientPosition clientPosition = new NativeAdPosition.ClientPosition();
clientPosition.addFixedPosition(2);
clientPosition.enableRepeatingPositions(5);
mRecyclerAdapter = AdxNativeAdFactory.getAdxRecyclerAdapter(this, originalAdapter, "<Insert_ADX_AdUnitId>", clientPosition);
mRecyclerView.setAdapter(mRecyclerAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerAdapter.loadAds("<NATIVE_AD_UNIT_ID>");
}
@Override
protected void onDestroy() {
super.onDestroy();
mRecyclerAdapter.destroy();
}
Case 3: Closed Native Ad 사용 시
담당 매니저와 협의 후, Close Native Ad 용으로 발급 된 AdUnit ID를 사용하여 아래와 같이 구현합니다.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_wall);
AdxCloseAdFactory.init(this, "<NATIVE_AD_UNIT_ID>", "Exit Message");
AdxCloseAdFactory.preloadAd();
}
@Override
public void onBackPressed() {
AdxCloseAdFactory.showCloseAd(this, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
}
@Override
protected void onDestroy() {
AdxCloseAdFactory.destroy();
super.onDestroy();
}
4. Ad Revenue (OnPaidEvent)
광고 노출이 발생동안 예상되는 광고 수익을 받아볼 수 있습니다.
이는 미디에이션 설정 과정에서 수동적으로 설정한 값과 정확한 값이 섞여 있어서 예상 값으로 사용하시는 것을 권장드립니다.
ecpm의 currency는 USD입니다.
아래와 같이
OnPaidEvent
콜백을 등록하여 사용하시면 됩니다.광고 매출 데이터를 MMP와 연동할 수 있습니다. 자세한 사항은 아래 SDK 연동 가이드를 참조해 주십시오.
Case 1: 하나의 View로 사용하는 경우에만 지원됩니다.
private final AdxNativeAdFactory.NativeAdListener mListener = new AdxNativeAdFactory.NativeAdListener() {
@Override
public void onSuccess(String s, com.adxcorp.ads.nativeads.NativeAd nativeAd) {
if (mAdxUnitId.equals(s)) {
mNativeAd = nativeAd;
mNativeAd.setOnPaidEventListener(new OnPaidEventListener() {
@Override
public void onPaidEvent(double ecpm) {
/// Firebase Analytics 샘플
double revenue = ecpm / 1000;
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
Bundle params = new Bundle();
params.putString(FirebaseAnalytics.Param.AD_PLATFORM, "AD(X)");
params.putString(FirebaseAnalytics.Param.AD_FORMAT, "NativeAd");
params.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, "ADX Native Ad");
params.putDouble(FirebaseAnalytics.Param.VALUE, revenue);
params.putString(FirebaseAnalytics.Param.CURRENCY, "USD");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, params);
/// AppsFlyer 샘플
double revenue = ecpm / 1000;
Map<String, String> customParams = new HashMap<>();
customParams.put(Scheme.AD_TYPE, "NativeAd");
customParams.put("ad_unit_name", "ADX Native Ad");
AppsFlyerAdRevenue.logAdRevenue(
"AD(X)",
MediationNetwork.customMediation,
Currency.getInstance(Locale.US),
revenue,
customParams
);
}
});
}
}
@Override
public void onFailure(String s) {
}
};
Last updated
Was this helpful?