3-3. 배너 광고

배너는 가장 일반적인 광고 형태로 앱의 하단이나 상단에 노출되는 띠 형태의 광고입니다.

배너 광고 생성

배너 광고는 선언형 또는 명령형으로 구현할 수 있습니다.

XML 선언형

배너 광고가 노출될 뷰를 사용 중인 Layout.xml 파일에 추가합니다.

<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에서 형성된 인스턴스를 추가합니다.

private OAMBanner banner;
 
@Override
protected void onCreate( Bundle savedInstanceState ){
    ...
    banner = (OAMBanner)findViewById(R.id.banner);
    ...
}

명령형(코드) 방식

xml 없이 명령어를 통해 소스코드 맥락에서 배너 광고를 생성할 수 있습니다.

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 콘솔에서 생성이 가능합니다.

banner.setPlacementId( PLACEMENT_ID );

배너 사이즈

배너 사이즈는 3 가지 옵션이 있으며, ONE AdMax 콘솔에서 배너 광고 생성 시 지정한 값이 동일하게 설정 되어야 합니다.

public enum Size {
    BANNER_320x50, BANNER_300x250, BANNER_320x100,
}
 
banner.setSize( OAMBanner.Size.BANNER_320x50 );

배너 갱신 주기

설정가능 범위는 15~300초이며, -1 로 설정 시 갱신 되지 않습니다.

banner.setRefreshTime( 60 ); // default 60 sec

배너 네트워크 스케쥴 타임아웃 설정

배너 광고 로딩 시 각 네트워크( 미디에이션 업체 )별로 타임아웃 시간을 주어 해당 시간 안에 광고를 받지 못할 경우 , 다음 네트워크로 넘어가게 됩니다

banner.setNetworkScheduleTimeout( 5 ); // default 5 sec

배너 애니메이션 설정

public enum AnimType{
    NONE,          
    FADE_IN,       
    SLIDE_LEFT,    
    SLIDE_RIGHT,
    TOP_SLIDE,
    BOTTOM_SLIDE,
    CIRCLE,
}
 
banner.setAnimType( OAMBanner.AnimType.FADE_IN ); // default : NONE

배너 배경 컬러 설정

배너 광고가 나오는 뷰의 빈 공간에 광고에 맞는 최적화된 배경색을 채울 수 있습니다.

banner.setAutoBgColor( true );  // default true

배너 요청

배너가 화면에 노출되기 원하는 시점에 load() api 를 호출합니다. loading이 완료되면, onLoaded() 이벤트가 전달되며, 자동으로 화면에 나타나게 됩니다.

banner.load();

과도한 load() api 호출은 block 사유가 됩니다.

배너 중단

배너 광고를 중단하고 싶은 시점에 호출합니다. 일반적으로 배너가 노출된 activity 나 fragment 가 destroy 할 때 호출합니다.

banner.stop();

onPause 상태 진입 시 stop() 를 호출할 경우 클릭 리포트 수치가 누락되는 경우가 발생하므로 해당 배너뷰가 포함된 activity 나 fragment 가 destroy 진입 시 호출하는 것이 좋습니다.

배너 노출 여부

다른 광고 타입과 달리 배너는 Load되면 자동으로 화면에 보여지므로, 다음 api를 사용하여 노출 유무를 판단할수 있습니다.

banner.isLoaded();

배너 이벤트 리스너

배너를 불러올 때 발생하는 이벤트에 대한 리스너를 설정합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

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을 사용할 때, 리포트 수치가 누락되는 경우가 있으므로 하기와 같이 구현해 주시는 것이 좋습니다.

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 되어야 합니다.

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();

지원하는 미디에이션의 설정값은 다음과 같습니다.

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

배너 샘플 코드

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();
}

Last updated