배너 광고 생성
배너 광고는 선언형 또는 명령형으로 구현할 수 있습니다.
XML 선언형
배너 광고가 노출될 뷰를 사용 중인 Layout.xml 파일에 추가합니다.
Copy <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="vertical">
<!-- Banner View -->
<com.oneadmax.global.OAMBanner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
xml에서 형성된 인스턴스를 추가합니다.
Copy private OAMBanner banner;
@Override
protected void onCreate( Bundle savedInstanceState ){
...
banner = (OAMBanner)findViewById(R.id.banner);
...
}
명령형(코드) 방식
xml 없이 명령어를 통해 소스코드 맥락에서 배너 광고를 생성할 수 있습니다.
Copy private OAMBanner banner;
@Override
protected void onCreate( Bundle savedInstanceState ){
...
// 베너 광고가 보이게 될 Activity와, 상단 또는 하단에 생성할지를 전달합니다.
banner = new OAMBanner( MyActivity.this, Gravity.TOP|Gravity.CENTER );
...
}
배너 PLACEMENT ID 설정
배너 PLACEMENT ID 는 ONE AdMax 콘솔에서 생성이 가능합니다.
Copy banner.setPlacementId( PLACEMENT_ID );
배너 사이즈
배너 사이즈는 3 가지 옵션이 있으며, ONE AdMax 콘솔에서 배너 광고 생성 시 지정한 값이 동일하게 설정 되어야 합니다.
Copy public enum Size {
BANNER_320x50, BANNER_300x250, BANNER_320x100,
}
banner.setSize( OAMBanner.Size.BANNER_320x50 );
배너 갱신 주기
설정가능 범위는 15~300초이며, -1 로 설정 시 갱신 되지 않습니다.
Copy banner.setRefreshTime( 60 ); // default 60 sec
배너 네트워크 스케쥴 타임아웃 설정
배너 광고 로딩 시 각 네트워크( 미디에이션 업체 )별로 타임아웃 시간을 주어 해당 시간 안에 광고를 받지 못할 경우 , 다음 네트워크로 넘어가게 됩니다
Copy banner.setNetworkScheduleTimeout( 5 ); // default 5 sec
배너 애니메이션 설정
Copy public enum AnimType{
NONE,
FADE_IN,
SLIDE_LEFT,
SLIDE_RIGHT,
TOP_SLIDE,
BOTTOM_SLIDE,
CIRCLE,
}
banner.setAnimType( OAMBanner.AnimType.FADE_IN ); // default : NONE
배너 배경 컬러 설정
배너 광고가 나오는 뷰의 빈 공간에 광고에 맞는 최적화된 배경색을 채울 수 있습니다.
Copy banner.setAutoBgColor( true ); // default true
배너 요청
배너가 화면에 노출되기 원하는 시점에 load() api 를 호출합니다.
loading이 완료되면, onLoaded() 이벤트가 전달되며, 자동으로 화면에 나타나게 됩니다.
과도한 load() api 호출은 block 사유가 됩니다.
배너 중단
배너 광고를 중단하고 싶은 시점에 호출합니다. 일반적으로 배너가 노출된 activity 나 fragment 가 destroy 할 때 호출합니다.
onPause 상태 진입 시 stop() 를 호출할 경우 클릭 리포트 수치가 누락되는 경우가 발생하므로 해당 배너뷰가 포함된 activity 나 fragment 가 destroy 진입 시 호출하는 것이 좋습니다.
배너 노출 여부
다른 광고 타입과 달리 배너는 Load되면 자동으로 화면에 보여지므로, 다음 api를 사용하여 노출 유무를 판단할수 있습니다.
배너 이벤트 리스너
배너를 불러올 때 발생하는 이벤트에 대한 리스너를 설정합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.
Copy banner.setEventListener( new IOAMBannerEventListener(){
@Override
public void onLoaded(){ // banner loading 성공
Log.d( Tag, "onBannerAdLoaded" );
}
@Override
public void onLoadFailed( OAMError error ){ // banner loading 실패
Log.d( Tag, "onLoadFailed : " + error.toString() );
}
@Override
public void onClicked(){ // banner click.
Log.d( Tag, "onBannerAdLoaded" );
}
});
배너 onPause / onResume
배너 광고가 노출되고 있는 Activity나 Fragment의 onPause / onResume 에서 Banner의 onPause / onResume을 호출해 줘야 합니다.
onPause/onResume을 정상적으로 처리해 주지 않을 경우 third-party mediation을 사용할 때, 리포트 수치가 누락되는 경우가 있으므로 하기와 같이 구현해 주시는 것이 좋습니다.
Copy OAMBanner banner;
public void onPause(){
super.onPause();
if( banner != null )
banner.onPause();
}
public void onResume(){
super.onResume();
if( banner != null )
banner.onResume();
}
배너 미디에이션
배너 광고는 일부 미디에이션에 대한 사용을 지원합니다.
배너의 load() api 호출 이전에 setting 되어야 합니다.
Copy HashMap map = new HashMap<>();
map.put( OAMBanner.MediationExtra.CAULY_USE_DYNAMIC_RELOAD, false );
map.put( OAMBanner.MediationExtra.CAULY_RELOAD_INTERVAL, 20 );
map.put( OAMBanner.MediationExtra.CAULY_THREAD_PRIORITY, 5 );
banner.setMediationExtras( map );
banner.load();
지원하는 미디에이션의 설정값은 다음과 같습니다.
Copy CAULY_ENABLE_LOCK : 잠금 화면에서 노출 가능 여부. default false.
CAULY_ENABLE_DYNAMIC_RELOAD_INTERVAL: 카울리 다이나믹 배너 갱신 사용 여부. default true.
CAULY_RELOAD_INTERVAL : 카울리 배너 갱신 주기. range: 10~120. default 20s. CAULY_ENABLE_DYNAMIC_RELOAD_INTERVAL를 false로 설정후에 사용가능.
CAULY_THREAD_PRIORITY : 카울리 스레드 우선 순위 지정. range: 1~10. default 5.
MEZZO_AGE_LEVEL : 유저 나이 정보, default -1. 알수 없음 = -1, 어린이(13세 미만) = 0, 청소년 및 성인(만 13세 이상) = 1
MEZZO_ENABLE_BACKGROUND_CHECK : 백그라운드 갱신 사용 여부.
MEZZO_STORE_URL : 앱 스토어 URL
배너 샘플 코드
Copy private OAMBanner banner;
@Override
protected void onCreate( Bundle savedInstanceState ){
super.onCreate( savedInstanceState );
...
// ONEAdMax 로그 활성화. apk release시에는 삭제해야 합니다.
ONEAdMax.setLogEnable( true );
//ONEAdMax SDK 초기화
if( ONEAdMax.isInit( MyActivity.this ) == false ){
ONEAdMax.init( MyActivity.this, new IOAMInitListener() {
@Override
public void onInitialized() {
Log.d( Tag, "ONEAdMax SDK Initialized.");
initBanner( yourBannerPlacementID, youtBannerSize );
}
});
}
...
}
public void initBanner( String placementId, OAMBanner.Size bannerSize ){
// xml 없이 코드로 Banner 를 생성합니다.
banner = new OAMBanner( MyActivity.this, Gravity.TOP|Gravity.CENTER );
// placementID와 size setting은 필수입니다.
banner.setPlacementId( yourBannerPlacementID );
banner.setSize( bannerSize );
// optional
banner.setAnimType( OAMBanner.AnimType.FADE_IN );
banner.setAutoBgColor( true );
banner.setNetworkScheduleTimeout( 10 );
banner.setRefreshTime( 15 );
HashMap map = new HashMap<>();
map.put( OAMBanner.MediationExtra.CAULY_USE_DYNAMIC_RELOAD, false );
map.put( OAMBanner.MediationExtra.CAULY_RELOAD_INTERVAL, 20 );
map.put( OAMBanner.MediationExtra.CAULY_THREAD_PRIORITY, 5 );
banner.setMediationExtras( map );
// listener를 등록하지 않으면 이벤트를 받을 수 없습니다.
banner.setEventListener( new IOAMBannerEventListener(){
@Override
public void onLoaded(){
Log.d( Tag, "banner load success" );
}
@Override
public void onLoadFailed( OAMError error ){
Log.d( Tag, "banner load failed: " + error.toString() );
}
@Override
public void onClicked(){
Log.d( Tag, "banner clicked." );
}
} );
banner.load();
}
@Override
public void onPause(){
super.onPause();
if( banner != null )
banner.onPause();
}
@Override
public void onResume(){
super.onResume();
if( banner != null )
banner.onResume();
}
@Override
protected void onDestroy(){
super.onDestroy();
if( banner != null )
banner.stop();
ONEAdMax.unInit();
}