Android SDK Guide (version3.0.0)

18 분 소요

Geonjin Mun

현재 버전은 3.0.0 입니다.

Ad type

구분 샘플 설명
띠 배너 일반적인 바(Bar) 형태의 배너입니다.
대부분 하단에 위치하지만, 퍼블리셔의 조정에 따라 상단 또는 중간에도 게재할 수 있습니다.
전면 배너 앱 실행 시, 전면에 광고가 게시되며, 퍼블리셔의 조정에 따라 노출 영역을 조정할 수 있습니다.
전면동영상 배너 앱 실행 시, 전면동영상 광고가 게시됩니다.
종료(엔딩) 배너 앱 종료 시, 전면에 광고가 게시되며, 광고물 하단에 앱 종료 유/무 확인 Dialog를 보여줍니다.
동영상 동영상 콘텐츠 재생 전 Pre-Roll 형태로 재생되는 동영상 광고입니다.
전면확장 앱 실행 시, 전면광고가 게시되고, 남은 영역에는 좌측상단 1pixel기준의 색상이 채워집니다.
네이티브 피드 다양한 요소(애셋)들로 이루어진 광고입니다.
전면에 광고가 게시되며,
동영상과 이미지가 포함되어 있습니다.
퍼블리셔가 각 요소(애셋)들로 광고 형태를 조합해서 게시할 수 있습니다.(별도 문의)
네이티브 피드 배너 다양한 요소(애셋)들로 이루어진 광고입니다.
바(Bar) 형태로 광고가 게시되며,
동영상과 이미지가 포함되어 있습니다.
퍼블리셔가 각 요소(애셋)들로 광고 형태를 조합해서 게시할 수 있습니다.(별도 문의)
스플래시 배너
앱 실행 시 스플래시 화면에 노출되는 배너입니다.
배너는 투명 PNG로 제공됩니다.
배너 위치/노출시간/노출방식(모션)은 매체에서 제어합니다.
- 하단 위치/3초 이상 노출 권장
- 가로 또는 세로 사이즈 조정 시 비율 유지하여 축소
- 배너가 가려지거나 잘리지 않도록 주의
- SDK 3.0.0버전 이상에서만 사용 가능
카운트다운 배너 라이브커머스 / 주요 경기 등 카운트다운을 통해 시각적으로 방송 시작을 강조하는 배너입니다.
카운트다운 영역은 퍼블리셔의 조정이 불필요합니다.
- SDK 3.0.0버전 이상에서만 사용 가능
디데이 카운트다운 배너 카운트다운 배너와 동일하지만 ‘D-DAY’ 표현이 추가된 배너입니다.
- SDK 3.0.0버전 이상에서만 사용 가능
동영상 엔드카드 - 동영상 광고 종료 후 해당 영역에 이미지 또는
리치미디어 형태의 소재가 노출되는 광고 상품 입니다.
플레이어블(MRAID) - MRAID 규격을 활용해 다양한 형태(애니메이션, 인터랙티브 등)의
소재를 구현하고 노출할 수 있는 광고 상품 입니다.

지원 상품(사이즈)

상품 구분      사이즈
띠배너              300x50 ㅣ 320x50 ㅣ 320x100 ㅣ 640x240 ㅣ 640x100 ㅣ 728x90
전면배너             640x960 ㅣ 320X480 ㅣ 480x320 ㅣ 1024x768 ㅣ 750x1200 ㅣ 768x1024
종료배너             640x960 ㅣ 750x1200
정사각형 및 직사각형 200x200 ㅣ 240x400 ㅣ 240x240 ㅣ 250x250 ㅣ 250x360 ㅣ 300x250 ㅣ 336x280 ㅣ 150x150 ㅣ 580x400
스카이스크래퍼      120x600 ㅣ 160x600 ㅣ 300x600 ㅣ 300x1050
리더보드             468x60 ㅣ 728x90 ㅣ 930x180 ㅣ 970x90 ㅣ 970x250 ㅣ 980x120
네이티브 피드        640x960
네이티브 피드 배너    320x100 ㅣ 320x50
스플래시 배너    1200x1000
카운트다운 배너    640x960 ㅣ 320x100 ㅣ 320x50
디데이 카운트다운 배너 640x960 ㅣ 300x250 ㅣ 320x100 ㅣ 320x50
동영상 엔드카드    -
플레이어블(MRAID)    320x100 ㅣ 320x50 ㅣ 640x960

SDK 라이브러리 적용

안드로이드 개발에 필요한 환경 설정 등은 지면상 생략합니다.
개발하고자 하는 Android Project를 생성합니다.
libs폴더를 생성하여 제공된 manlibray.jar를 추가합니다.

AndroidManifest.xml 설정

android.permission는 광고 SDK 광고 삽입을 위해 필요한 권한 설정입니다. 위치 정보는 사용하지 않습니다. 미사용으로 설정바랍니다.
광고를 삽입할 해당 Activity의 속성에 android:configChanges=”orientation|keyboard”를 삽입해야 합니다.
 (연속된 OnCreate 호출로 인한 네트웍 자원 낭비 방지용)
android9(API 28)부터 강화된 네트워크 보안정책으로 인해 application에 값(android:usesCleartextTraffic=”true”)을 삽입합니다.
 광고 이미지url load, 트래킹요소, resource가 http 구성될 수 있으므로 해당옵션을 삽입합니다.
광고 SDK 적용 대상 앱이 Android 14(API 수준 34) 타겟하며, 자동으로 표시되는 앱이 아닌 다른 앱과 상호 작용을 해야 한다면 앱의 매니페스트 파일에 요소를 추가해야 합니다.
 당사의 광고 SDK는 광고 클릭 시 구글 크롬을 기본으로 사용하기 때문에 하기 예시와 같이 매니페스트 파일이 작성되어야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mezzomedia.sampleapp"
    android:versionCode="1"
    android:versionName="1.0" >
    <!--네트워크 사용 -->
    <!-- 권한 : NetworkInterface 목적 : IP 주소 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 권한 : ConnectivityManager 목적 : 통신 연결이 Mobile or Wifi 여부 파악 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!--단말기 정보( TelephonyManager의 망 사업자의 MNC, MCC ) 사용 -->
    <!-- 권한 : Telephony DataNetworkType Type SDK version 24 이상 목적 : Mobile network: 2G, 3G, LET, 5G 등 -->
    <uses-permission android:name="android.permission.READ_BASIC_PHONE_STATE" />
    <!-- 권한 : Telephony Network Type SDK version 23 이하 목적 : Mobile network: 2G, 3G, LET, 5G 등 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!-- 권한 : 광고 ID -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<!--크롬 브라우져 사용 -->    
    <queries>
        <package android:name="com.android.chrome"/>
    </queries>
<!--광고 이미지url load, 트래킹요소, resource가 http 구성될 수 있으므로 해당옵션을 삽입(android:usesCleartextTraffic="true") -->
    <application
        android:usesCleartextTraffic="true"
        android:name=".MZApplication"
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
            android:configChanges="orientation|keyboard">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Java source

Banner

private AdManView bannerView = null;

public void onDestoryBanner(final Context c) {
    if (bannerView != null) {
        bannerView.onDestroy();
    }
}

//Sample source Navimanager.java
public void requestBanner(final Context c, final int p, final int m, final int s, final ViewGroup bannerArea) {
    AdData adData = new AdData(); //광고 설정의 데이터 구성 클래스
    String appName = "appname";
    //광고 설정값의 필수
    adData.major("testbanner", AdConfig.API_BANNER, p, m, s, "http://www.storeurl.com", "packagename", appName, 320, 50);
    //유저 나이 레벨 필수
    adData.setUserAgeLevel(0);
    //퍼미션 사용 여부
    adData.isPermission(AdConfig.NOT_USED);
    //API MODE사용시 통신만 처리하며 응답건에 대한 처리를 별도 진행하셔야 합니다. 가이드 페이지(http://docs.meba.kr/s-plus/api/base/delivery/) 참고 바랍니다.
    adData.setApiModule(AdConfig.NOT_USED, AdConfig.NOT_USED);

    bannerView = new AdManView(c);

    bannerView.addBannerView(bannerArea);

    bannerView.setData(adData, new AdListener() {
        //광고 호출 성공
        @Override
        public void onAdSuccessCode(Object v, String id, final String type, final String status, final String jsonDataString) {
            ((Activity) c).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //API MODE 사용시 통신에 사용된 영역을 제거합니다.
                    if(AdConfig.USED.equals(adData.getApiModule())){
                        Toast.makeText(c, jsonDataString, Toast.LENGTH_SHORT).show();
                        MzLog.e("apimodeJson : "+jsonDataString);
                    }else{
                        ((Activity) c).runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                if (AdResponseCode.Status.SUCCESS.equals(status)) {
                                    bannerView.addBannerView(bannerArea);
                                }
                            }
                        });
                    }
                }
            });
        }
        //광고 호출 실패 에러
        @Override
        public void onAdFailCode(Object v, String id, String type, String status, String jsonDataString) {
            onDestoryBanner(c);
        }
        //광고 호출 실패 에러(웹뷰 에러)
        @Override
        public void onAdErrorCode(Object v, String id, String type, String status, String failingUrl) {
            onDestoryBanner(c);
        }
        //광고에서 발생하는 이벤트
        @Override
        public void onAdEvent(Object v, String id, String type, String status, String jsonDataString) {
            if(AdEvent.Type.CLICK.equals(type)){
                onDestoryBanner(c);
            }else if(AdEvent.Type.CLOSE.equals(type)){
                onDestoryBanner(c);
            }else if(AdEvent.Type.IMP.equals(type)){

            }            
        }
        // 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
        @Override
        public void onPermissionSetting(Object v, String id) {
            // isPermission값이 미사용으로 설정한다면 이벤트가 발생하지 않습니다.
        }
    });
    //요청 메서드
    bannerView.request(new Handler());

}

Inter Banner

InLayout

inlayout은 영역에 전면광고를 넣는 방식으로 아래옵션을 사용하시면 됩니다.
adData.setIsInLayout(AdConfig.USED);

private AdManView inlayoutInter = null;

public void destroyInter() {
    if (inlayoutInter != null) {
        inlayoutInter.onDestroy();
        inlayoutInter = null;
    }
}

//Sample source Navimanager.java
public void requestInlayoutInter(final Context c, final int p, final int m, final int s,  final RelativeLayout bannerArea) {
    AdData adData = new AdData();//광고 설정의 데이터 구성 클래스
    String appName = "appname";
    //광고 설정값의 필수
    adData.major("testInter", AdConfig.API_INTER, p, m, s, "http://www.storeurl.com", "packagename", appName, 320, 480);
    //유저 나이 레벨 필수
    adData.setUserAgeLevel(0);
    //퍼미션 사용 여부
    adData.isPermission(AdConfig.NOT_USED);
    //API MODE사용시 통신만 처리하며 응답건에 대한 처리를 별도 진행하셔야 합니다. 가이드 페이지(http://docs.meba.kr/s-plus/api/base/delivery/) 참고 바랍니다.
    adData.setApiModule(AdConfig.NOT_USED, AdConfig.NOT_USED);
    //전면광고를 특정 레이아웃에 추가할 때 사용하는 메서드
    adData.setIsInLayout(AdConfig.USED);
    inlayoutInter = new AdManView(c);
    inlayoutInter.setData(adData, new AdListener() {
        //광고 호출 성공
        @Override
        public void onAdSuccessCode(Object v, String id, final String type, final String status, final String jsonDataString) {
            ((Activity) c).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if(AdConfig.USED.equals(adData.getApiModule())){
                        Toast.makeText(c, jsonDataString, Toast.LENGTH_SHORT).show();
                        MzLog.e("apimodeJson : "+jsonDataString);
                    }else{
                        ((Activity) c).runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                if (AdResponseCode.Status.SUCCESS.equals(status)) {
                                    inlayoutInter.addBannerView(bannerArea);
                                }
                            }
                        });
                    }
                }
            });
        }
        //광고 호출 실패 에러
        @Override
        public void onAdFailCode(Object v, String id, String type, String status, String jsonDataString) {
            
        }
        //광고 호출 실패 에러(웹뷰 에러)
        @Override
        public void onAdErrorCode(Object v, String id, String type, String status, String failingUrl) {
            
        }
        //광고에서 발생하는 이벤트
        @Override
        public void onAdEvent(Object v, String id, String type, String status, String jsonDataString) {
            if(AdEvent.Type.CLICK.equals(type)){
                destroyInter();
            }else if(AdEvent.Type.CLOSE.equals(type)){
                destroyInter();
            }        
        }
        // 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
        @Override
        public void onPermissionSetting(Object v, String id) {
            // isPermission값이 미사용으로 설정한다면 이벤트가 발생하지 않습니다.
        }
    });
    //요청 메서드
    inlayoutInter.request(new Handler());
}
Inter (Popup)

outlayout의 popup은 전면광고를 팝업으로 보여주는 방식으로 아래 옵션을 사용하시면 됩니다.
adData.setIsInLayout(AdConfig.NOT_USED);
adData.setPopup(AdConfig.USED);


private AdManPage adManInterActivity = null;

public void destroyInter() {
    if (adManInterActivity != null) {
        adManInterActivity.onDestroy();
        adManInterActivity = null;
    }
}
//Sample source Navimanager.java
public void requestInter(final Context c, final int p, final int m, final int s) {
    AdData adData = new AdData();
    String appName = "appname";
    adData.major("testInter", AdConfig.API_INTER, p, m, s, "http://www.storeurl.com", "packagename", appName, 0, 0);
    //유저 나이 레벨 필수
    adData.setUserAgeLevel(0);
    //퍼미션 사용 여부
    adData.isPermission(AdConfig.NOT_USED);
    //팝업 사용 여부 
    adData.setPopup(AdConfig.USED);
    //특정 뷰에 넣을지 여부
    adData.setIsInLayout(AdConfig.NOT_USED);
    //API MODE사용시 통신만 처리하며 응답건에 대한 처리를 별도 진행하셔야 합니다. 가이드 페이지(http://docs.meba.kr/s-plus/api/base/delivery/) 참고 바랍니다.
    adData.setApiModule(AdConfig.NOT_USED, AdConfig.NOT_USED);
    adManInterActivity = new AdManPage(c);
    adManInterActivity.setAutoFinish(AdConfig.USED); //클릭시 자동 종료 미사용 : AdConfig.NOT_USED 사용 : AdConfig.USED(default)
    adManInterActivity.setData(adData, new AdListener() {
        //광고 호출 성공
        @Override
        public void onAdSuccessCode(Object v, String id, String type, String status, String jsonDataString) {
            if(AdConfig.USED.equals(adData.getApiModule())){
                Toast.makeText(c, jsonDataString, Toast.LENGTH_SHORT).show();
                MzLog.e("apimodeJson : "+jsonDataString);
            }
        }

        //광고 호출 실패 에러
        @Override
        public void onAdFailCode(Object v, String id, String type, String status, String jsonDataString) {
            
        }
        //광고 호출 실패 에러(웹뷰 에러)
        @Override
        public void onAdErrorCode(Object v, String id, String type, String status, String failingUrl) {
            
        }
        //광고에서 발생하는 이벤트
        @Override
        public void onAdEvent(Object v, String id, String type, String status, String jsonDataString) {
            if(AdEvent.Type.CLICK.equals(type)){
                destroyInter();
            }else if(AdEvent.Type.CLOSE.equals(type)){
                destroyInter();
            }            
        }
        // 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
        @Override
        public void onPermissionSetting(Object v, String id) {
            // isPermission값이 미사용으로 설정한다면 이벤트가 발생하지 않습니다.
        }
    });
    //요청 메서드
    adManInterActivity.request(new Handler());
}
Inter (Full Screen)

outlayout의 full screen은 전면광고를 전체화면으로 보여주는 방식으로 adData.setIsInLayout(AdConfig.NOT_USED); adData.setPopup(AdConfig.NOT_USED);메서드를 사용하시면 됩니다.

private AdManPage adManInterActivity = null;

public void destroyInter() {
    if (adManInterActivity != null) {
        adManInterActivity.onDestroy();
        adManInterActivity = null;
    }
}
//Sample source Navimanager.java
public void requestInter(final Context c, final int p, final int m, final int s) {
    AdData adData = new AdData();
    String appName = "appname";
    adData.major("testInter", AdConfig.API_INTER, p, m, s, "http://www.storeurl.com", "packagename", appName, 0, 0);
    //유저 나이 레벨 필수
    adData.setUserAgeLevel(0);
    //퍼미션 사용 여부
    adData.isPermission(AdConfig.NOT_USED);
    //팝업 사용 여부
    adData.setPopup(AdConfig.NOT_USED);
    //특정 뷰에 넣을지 여부
    adData.setIsInLayout(AdConfig.NOT_USED);
    //API MODE사용시 통신만 처리하며 응답건에 대한 처리를 별도 진행하셔야 합니다. 가이드 페이지(http://docs.meba.kr/s-plus/api/base/delivery/) 참고 바랍니다.
    adData.setApiModule(AdConfig.NOT_USED, AdConfig.NOT_USED);
    adManInterActivity = new AdManPage(c);
    adManInterActivity.setAutoFinish(AdConfig.USED); //클릭시 자동 종료 미사용 : AdConfig.NOT_USED 사용 : AdConfig.USED(default)
    adManInterActivity.setData(adData, new AdListener() {
        //광고 호출 성공
        @Override
        public void onAdSuccessCode(Object v, String id, String type, String status, String jsonDataString) {
            if(AdConfig.USED.equals(adData.getApiModule())){
                Toast.makeText(c, jsonDataString, Toast.LENGTH_SHORT).show();
                MzLog.e("apimodeJson : "+jsonDataString);
            }
        }

        //광고 호출 실패 에러
        @Override
        public void onAdFailCode(Object v, String id, String type, String status, String jsonDataString) {
            
        }
        //광고 호출 실패 에러(웹뷰 에러)
        @Override
        public void onAdErrorCode(Object v, String id, String type, String status, String failingUrl) {
            
        }
        //광고에서 발생하는 이벤트
        @Override
        public void onAdEvent(Object v, String id, String type, String status, String jsonDataString) {
            if(AdEvent.Type.CLICK.equals(type)){
                destroyInter();
            }else if(AdEvent.Type.CLOSE.equals(type)){
                destroyInter();
            }            
        }
        // 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
        @Override
        public void onPermissionSetting(Object v, String id) {
            // isPermission값이 미사용으로 설정한다면 이벤트가 발생하지 않습니다.
        }
    });
    //요청 메서드
    adManInterActivity.request(new Handler());
}

Ending Banner


private AdManView adManEnding = null;

public void destroyEnding() {
    if(adManEnding != null){
        adManEnding.onDestroy();
    }

    //엔딩배너에 사용한 ui제거
}

public void requestEnding(final Context c, final int p, final int m, final int s, final int w, final int h) {
    AdData adData = new AdData();
    String appName = "appname";
    int width = w;//(int) MZDisplayUtil.convertPixelsToDp(c, h); 샘플앱에 있는 메서드입니다. 사용하지마시기 바랍니다.
    int height = h;//(int) MZDisplayUtil.convertPixelsToDp(c, h); 샘플앱에 있는 메서드입니다. 사용하지마시기 바랍니다.
    adData.major("testInter", AdConfig.API_ENDINNG, p, m, s, "http://www.storeurl.com", "packagename", appName, width, height);
    //유저 나이 레벨 필수
    adData.setUserAgeLevel(0);
    //퍼미션 사용 여부
    adData.isPermission(AdConfig.NOT_USED);
    //API MODE사용시 통신만 처리하며 응답건에 대한 처리를 별도 진행하셔야 합니다. 가이드 페이지(http://docs.meba.kr/s-plus/api/base/delivery/) 참고 바랍니다.
    adData.setApiModule(AdConfig.NOT_USED, AdConfig.NOT_USED);
    adManEnding = new AdManView(c);
    adManEnding.setData(adData, new AdListener() {
        @Override
        public void onAdSuccessCode(Object v, String id, final String type, final String status, final String jsonDataString) {
            ((Activity) c).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if(AdConfig.USED.equals(adData.getApiModule())){
                        Toast.makeText(c, jsonDataString, Toast.LENGTH_SHORT).show();
                        MzLog.e("apimodeJson : "+jsonDataString);
                    }else{
                        ((Activity) c).runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                if (AdResponseCode.Status.SUCCESS.equals(status)) {
                                    showEndingBanner(c, w, h);
                                }
                            }
                        });
                    }
                }
            });
        }

        //광고 호출 실패 에러
        @Override
        public void onAdFailCode(Object v, String id, String type, String status, String jsonDataString) {
            
        }
        //광고 호출 실패 에러(웹뷰 에러)
        @Override
        public void onAdErrorCode(Object v, String id, String type, String status, String failingUrl) {
            
        }
        //광고에서 발생하는 이벤트
        @Override
        public void onAdEvent(Object v, String id, String type, String status, String jsonDataString) {
            if(AdEvent.Type.CLICK.equals(type)){
                destroyEnding();
            }else if(AdEvent.Type.CLOSE.equals(type)){
                destroyEnding();
            }            
        }
        // 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
        @Override
        public void onPermissionSetting(Object v, String id) {
            // isPermission값이 미사용으로 설정한다면 이벤트가 발생하지 않습니다.
        }
    });
    //요청 메서드
    adManEnding.request(new Handler());
}

Movie

public void requestMovie(final Context c, final int p, final int m, final int s, final RelativeLayout bannerArea, final int w, final int h, String autoPlay, final String autoReplay, String clickFullArea, String muted, String soundBtnShow, String clickBtnShow, String skipBtnShow, String showClose) {
    AdData adData = new AdData();
    String appName = "appname";
    int width = w;//(int) MZDisplayUtil.convertPixelsToDp(c, h); 샘플앱에 있는 메서드입니다. 사용하지마시기 바랍니다.
    int height = h;//(int) MZDisplayUtil.convertPixelsToDp(c, h); 샘플앱에 있는 메서드입니다. 사용하지마시기 바랍니다.
    adData.major("movie", AdConfig.API_MOVIE, p, m, s, "http://www.storeurl.com", "packagename" appName, width, height);
    //유저 나이 레벨 필수
    adData.setUserAgeLevel(0);
    //무비광고의 세팅값
    adData.movie(autoPlay, autoReplay, clickFullArea, muted, soundBtnShow, clickBtnShow, skipBtnShow);
    //닫기버튼 사용 여부
    adData.setIsCloseShow(showClose);
    //퍼미션 사용 여부
    adData.isPermission(AdConfig.NOT_USED);
    final AdManView movieView = new AdManView(c);
    movieView.setData(adData, new AdListener() {
        @Override
        public void onAdSuccessCode(Object v, String id, final String type, final String status, String jsonDataString) {
            ((Activity) c).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (AdResponseCode.Status.SUCCESS.equals(status)) {
                        movieView.addBannerView(bannerArea);
                    }
                }
            });
        }

        //광고 호출 실패 에러
        @Override
        public void onAdFailCode(Object v, String id, String type, String status, String jsonDataString) {
            if(movieView!=null){
                movieView.onDestroy();
            }            
        }
        //광고 호출 실패 에러(웹뷰 에러)
        @Override
        public void onAdErrorCode(Object v, String id, String type, String status, String failingUrl) {
            if(movieView!=null){
                movieView.onDestroy();
            }            
        }
        //광고에서 발생하는 이벤트
        @Override
        public void onAdEvent(Object v, String id, String type, String status, String jsonDataString) {
            if(AdEvent.Type.CLICK.equals(type)){
                if(movieView!=null){
                    movieView.onDestroy();
                }
                bannerArea.removeAllViews();
            }else if(AdEvent.Type.CLOSE.equals(type)){
                if(movieView!=null){
                    movieView.onDestroy();
                }
                bannerArea.removeAllViews();
            }else if(AdEvent.Type.SKIP.equals(type)){

            }else if(AdEvent.Type.ENDED.equals(type)){
                if(movieView!=null){
                    movieView.onDestroy();
                }
                bannerArea.removeAllViews();
            }else if(AdEvent.Type.IMP.equals(type)){

            }else if(AdEvent.Type.START.equals(type)){

            }else if(AdEvent.Type.FIRSTQ.equals(type)){

            }else if(AdEvent.Type.MIDQ.equals(type)){

            }else if(AdEvent.Type.THIRDQ.equals(type)){

            }else if(AdEvent.Type.COMPLETE.equals(type)){

            }           
        }
        // 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
        @Override
        public void onPermissionSetting(Object v, String id) {
            // isPermission값이 미사용으로 설정한다면 이벤트가 발생하지 않습니다.
        }
    });
    //요청 메서드
    movieView.request(new Handler());

}

공통 사항

Method - 광고연동 시 사용하는 메서드입니다.

메서드                       설명
AdManView ( Context context )                                                                     광고 생성자(전면팝업을 제외하고 사용합니다.)
AdManPage ( Context context )                                                                     광고 생성자(전면팝업으로 보일 때 사용합니다.)
setData ( AdData adData, AdListener adListener ) 광고세팅 메서드
request( Handler handler )                            광고로직 시작
onDestroy( )                              광고로직 종료
addBannerView(ViewGroup bannerArea)                                                                            특정영역에 광고 넣는 메서드

AdData - 광고 삽입 때 사용하는 데이터입니다.

메서드                                                                                                                                   설명       사용 가능 범위
major(String id, String apiMode, int publisher,
int media, int section, String storeUrl,
String appId, String appName, int adAreaWidth, int adAreaHeight )
필수값 세팅 메서드 공통
setUserAgeLevel(int userAgeLevel)                                   필수값 유저의 나이 레벨            공통
minor(String userGender, String userAge,
String account, String userEmail)
                                                        
옵션값 세팅 메서드 공통
movie(String autoPlay, String autoReplay,
String clickFullArea, String muted,
String soundBtnShow, String clickBtnShow, String skipBtnShow)
                                                        
옵션값 세팅 메서드 동영상
isPermission(String isReadPhone)                                퍼미션 사용 여부
(AdConfig.NOT_USED, AdConfig.USED)            
공통
setApiModule(String isApimode, String isAsset)                                api 응답문의 사용자가 직접 컨트롤
(AdConfig.NOT_USED, AdConfig.USED)
*API Mode 사용 시 SDK는 통신만 처리하며, 응답(화면 UI, 동작 등) 내용은 매체에서 별도 구현 필요.
(참고: http://docs.meba.kr/s-plus/api/base/delivery/)            
동영상 제외
setKeyword(String keyword)                                 키워드값을 전달
구분자는 ^로 사용
keyword값은 인코딩
공통
setExternal(String external)                               확장 파라미터 사용시 (추가적인 파라미터 사용 시 가이드 받으셔야 합니다.)             공통
setIsInLayout(String isInLayout)                                                       특정레이아웃 삽입 사용 여부
(AdConfig.NOT_USED, AdConfig.USED)        
전면
setPopup(String isPopup)                                                           팝업스타일 사용 여부
(AdConfig.NOT_USED, AdConfig.USED)            
전면
setAutoFinish(String autoFinish)                                                           클릭시 자동 종료
(AdConfig.NOT_USED, AdConfig.USED[default])(#common_method_adConfig)            
전면
setBackgroundColor(String color)                                                       팝업 background 색상
(default : #88000000)
전면
setDefaultBackgroundColor(String color)                                            광고background 색상
(default : #000000)
공통
setIsCloseShow(String isCloseShow)                         close button 사용 여부
(AdConfig.NOT_USED, AdConfig.USED)           
동영상

major - 필수값 세팅 메서드

인자값             설명
String id                매체에서 사용할 광고 영역의 고유 id
ex) bannerid, interbannerid
String apiMode 광고 타입
int publisher                         퍼블리셔 코드
int media                           미디어 코드
int section                            섹션 코드
String storeUrl           스토어 url
String appId                               패키지명
String appName                        앱명
int adAreaWidth                     노출되는 광고 영역 사이즈 넓이
int adAreaHeight                       노출되는 광고 영역 사이즈 높이

ageLevel - user의 나이 레벨

상수                 설명
0                   어린이 (만13세 미만)
1                                     청소년, 성인 (만13세 이상)
-1                                    알수없음

movie - 옵션값 세팅 메서드

인자값         설명
String autoPlay       자동 플레이
(AdConfig.NOT_USED, AdConfig.USED)
String autoReplay                       자동 리플레이 설정
(AdConfig.NOT_USED, AdConfig.USED)
String clickFullArea               화면 전체 클릭 설정 여부
(AdConfig.NOT_USED, AdConfig.USED)
String muted                    음소거로 시작할지 여부
(AdConfig.NOT_USED, AdConfig.USED)
String soundBtnShow             음소거 버튼 노출 여부
(AdConfig.NOT_USED, AdConfig.USED)
String clickBtnShow             광고더보기버튼 노출 여부
(AdConfig.NOT_USED, AdConfig.USED)
String skipBtnShow              스킵버튼 노출 여부
(AdConfig.NOT_USED, AdConfig.USED)

AdConfig - 광고 세팅에 사용하는 값입니다.

상수 설명
AdConfig.SDK_VERSION               sdk version
AdConfig.SDK_RELEASEDATE       sdk release date
AdConfig.API_BANNER                apiMode에 전달하는 값 : 띠배너
AdConfig.API_INTER                     apiMode에 전달하는 값 : 전면배너
AdConfig.API_ENDING                apiMode에 전달하는 값 : 종료배너
AdConfig.API_MOVIE                     apiMode에 전달하는 값 : 영상광고
AdConfig.USED                      isPermission, setIsInLayout, setIsCloseShow, setPopup 등의 메서드 사용유무에서 설정하는 값
AdConfig.NOT_USED                  isPermission, setIsInLayout, setIsCloseShow, setPopup 등의 메서드 사용유무에서 설정하는 값

AdListener 활용 방법

    //광고 호출 성공
    @Override
    public void onAdSuccessCode(Object v, String id, final String type, final String status, final String jsonDataString) {
        if(AdResponseCode.Type.HOUSE.equals(type)){
            //광고 성공 : 무료
        }else{
            //광고 성공 : 유료
        }
    }
    //광고 호출 실패 에러
    @Override
    public void onAdFailCode(Object v, String id, String type, String status, String jsonDataString) {
        if(AdResponseCode.Status.NOAD.equals(status)){
            //광고소진
        }else if(AdResponseCode.Status.TIMEOUT.equals(status)){
            //네트워크 타임아웃
        }else if(AdResponseCode.Status.ERROR_PARSING.equals(status)){
            //파싱 에러
        }else if(AdResponseCode.Status.DUPLICATIONCALL.equals(status)){
            //중복호출
        }else if(AdResponseCode.Status.ERROR.equals(status)){
            //예외적이 오류
        }else if(AdResponseCode.Status.ERROR_NOTSUPPORT_BROWSER.equals(status)){
            //미지원 브라우져
        }else if(AdResponseCode.Status.ERROR_NOTSUPPORT_IOS.equals(status)){
            //미지원 Ios version
        }else if(AdResponseCode.Status.ERROR_NOTSUPPORT_ANDROID.equals(status)){
            //미지원 Android version
        }else if(AdResponseCode.Status.NEEDSYNC.equals(status)){
            //ajax error
        }else if(AdResponseCode.Status.DEVICE_NETWORK_ERROR.equals(status)){
            //단말기 네트워크 상태 에러
        }else if(AdResponseCode.Status.DEVICE_RENDERING_TIMEOUT.equals(status)){
            //광고 랜더링 타임아웃
        }else if(AdResponseCode.Status.DEVICE_SETTING_ERROR.equals(status)){
            //광고 데이터 잘못설정 에러
        }else if(AdResponseCode.Status.DEVICE_AD_INTERVAL.equals(status)){
            //광고 호출 이후에 설정된 시간 이내 호출 에러
        }else if(AdResponseCode.Status.APP_LIFECYCLE_BACK.equals(status)){
            //백그라운드 호출시 발생하는 에러
        }
    }
    //광고 호출 실패 에러(웹뷰 에러)
    @Override
    public void onAdErrorCode(Object v, String id, String type, String status, String failingUrl) {
        int errorCode = Integer.valueOf(type);
        switch (errorCode) {
            case WebViewClient.ERROR_AUTHENTICATION:
                //서버에서 사용자 인증 실패
                break;
            case WebViewClient.ERROR_BAD_URL:
                //잘못된 URL
                break;
            case WebViewClient.ERROR_CONNECT:
                //서버로 연결 실패
                break; 
            case WebViewClient.ERROR_FAILED_SSL_HANDSHAKE:
                //SSL handshake 수행 실패
                break;
            case WebViewClient.ERROR_FILE:
                //일반 파일 오류
                break;
            case WebViewClient.ERROR_FILE_NOT_FOUND:
                //파일을 찾을 수 없습니다
                break;
            case WebViewClient.ERROR_HOST_LOOKUP:
                //서버 또는 프록시 호스트 이름 조회 실패
                break;
            case WebViewClient.ERROR_IO:
                //서버에서 읽거나 서버로 쓰기 실패
                break;
            case WebViewClient.ERROR_PROXY_AUTHENTICATION:
                //프록시에서 사용자 인증 실패
                break;
            case WebViewClient.ERROR_REDIRECT_LOOP:
                //너무 많은 리디렉션
                break;
            case WebViewClient.ERROR_TIMEOUT:
                //연결 시간 초과
                break;
            case WebViewClient.ERROR_TOO_MANY_REQUESTS:
                //페이지 로드중 너무 많은 요청 발생
                break;
            case WebViewClient.ERROR_UNKNOWN:
                //일반 오류
                break;
            case WebViewClient.ERROR_UNSUPPORTED_AUTH_SCHEME:
                //지원되지 않는 인증 체계
                break;
            case WebViewClient.ERROR_UNSUPPORTED_SCHEME:
               //URI가 지원되지 않는 방식
                break;
        }
    }
    //광고에서 발생하는 이벤트
    @Override
    public void onAdEvent(Object v, String id, String type, String status, String jsonDataString) {
        if(AdEvent.Type.CLICK.equals(type)){
            //광고 클릭 이벤트
        }else if(AdEvent.Type.CLOSE.equals(type)){
            //광고 닫기 이벤트
        }else if(AdEvent.Type.COMPLETE.equals(type)){
            //동영상 q5 트래킹
        }else if(AdEvent.Type.IMP.equals(type)){
            //동영상 노출 트래킹
        }else if(AdEvent.Type.SKIP.equals(type)){
            //동영상 스킵 이벤트
        }else if(AdEvent.Type.START.equals(type)){
            //동영상 q1 이벤트
        }else if(AdEvent.Type.FIRSTQ.equals(type)){
            //동영상 q2 이벤트
        }else if(AdEvent.Type.MIDQ.equals(type)){
            //동영상 q3 이벤트
        }else if(AdEvent.Type.THIRDQ.equals(type)){
            //동영상 q4 이벤트
        }else if(AdEvent.Type.OBJSHOW.equals(type)){
            //사용 안함
        }else if(AdEvent.Type.OBJHIDE.equals(type)){
            //사용 안함
        }else if(AdEvent.Type.ENDED.equals(type)){
            //동영상 광고 종료
        }
    }

AdListener 설명

메서드 설명
onAdSuccessCode(Object v, String id, String type, String status, String jsonDataString) 광고 성공 이벤트
onAdFailCode(Object v, String id, String type, String status, String jsonDataString) 에러 발생시 발생 되는 이벤트
onAdErrorCode(Object v, String id, String type, String status, String failingUrl) 광고가 보여지는 웹뷰영역 이벤트
( WebViewClient 참고 )
onAdEvent(Object v, String id, String type, String status, String jsonDataString) 광고에서 일어나는 이벤트

Success type Code

Type 설명
AdResponseCode.Type.HOUSE 무료 광고
AdResponseCode.Type.GUARANTEE 유료 광고

onAdFailCode status Code

Status                                        설명
AdResponseCode.Status.SUCCESS               성공
AdResponseCode.Status.NOAD                  광고소진
AdResponseCode.Status.NEEDSYNC              ajax error
AdResponseCode.Status.TIMEOUT                네트워크 타임아웃
AdResponseCode.Status.ERROR_PARSING         파싱 에러
AdResponseCode.Status.DUPLICATIONCALL             중복호출
AdResponseCode.Status.ERROR                   예외적이 오류
AdResponseCode.Status.ERROR_NOTSUPPORT_BROWSER 미지원 브라우저
AdResponseCode.Status.ERROR_NOTSUPPORT_IOS 미지원 iOS version
AdResponseCode.Status.ERROR_NOTSUPPORT_ANDROID 미지원 Android version
AdResponseCode.Status.DEVICE_NETWORK_ERROR 단말기 네트워크 상태 에러
AdResponseCode.Status.DEVICE_RENDERING_TIMEOUT 광고 랜더링 타임아웃
AdResponseCode.Status.DEVICE_SETTING_ERROR 광고 데이터 잘못 설정 에러
AdResponseCode.Status.DEVICE_AD_INTERVAL   광고 호출 이후에 설정된 시간 이내 호출 에러
AdResponseCode.Status.APP_LIFECYCLE_BACK 백그라운드 호출시 발생하는 에러

onAdEvent type Code

Status                설명
AdEvent.Type.CLICK 광고 클릭 이벤트
AdEvent.Type.CLOSE    광고 닫기 이벤트
AdEvent.Type.IMP      동영상 노출 이벤트
AdEvent.Type.SKIP    동영상 스킵 이벤트
AdEvent.Type.START        동영상 q1 이벤트
AdEvent.Type.FIRSTQ   동영상 q2 이벤트
AdEvent.Type.MIDQ 동영상 q3 이벤트
AdEvent.Type.THIRDQ 동영상 q4 이벤트
AdEvent.Type.COMPLETE 동영상 q5 이벤트
AdEvent.Type.ENDED 동영상 종료 이벤트

Q&A

광고 노출 여부 확인

No 설명
1 Q. SDK 적용 후 광고가 노출이 안 되는 경우 및 확인 절차
A. SDK는 XML 및 Java코드로 구현 할 수 있기 때문에 구현된 방식에 정확한 코드가 설정 되어 있는지 확인 해주시면 됩니다.
2 Q. 상용 물량 세팅 이후에 광고가 안 보이거나 하우스 광고만 노출 될 경우
A. 대부분의 광고 세팅 후에 광고가 노출되지 않는 현상은 코드를 잘못 설정하거나
테스트 코드로 세팅 할 경우 발생되기 때문에 설정방식을 확인 하시기 바랍니다.
이후에도 상용 물량이 안 나올 경우 문의사항 연락 주시기 바랍니다.

No ad 처리 방법(패스백)

No 설명
1 Q. No ad 처리 방법에 대한 문의
A. TARGETPICK SDK 해당 ID의 광고가 존재하지 않거나 물량을 소진했을 경우 또는
 타켓팅에 의해 시간, 앱 종류, 카테고리, 날짜에 따라서도 노출 가능한 광고의 수가 달라질 수 있습니다.
 각 등록한 리스너에 광고의 NO AD같은경우 “AdResponseCode.Status.NOAD”으로 콜백을 호출 해주고 있습니다.
 일정 시간 후 다시 광고 요청을 하거나 콜백 받은 부분에서 이후 진행 로직을 진행해 주시면 됩니다.
2 Q. No ad 캠페인 세팅 후 리포트 수치가 잡히는 이유
A. No ad 캠페인 세팅을 해도 리포트 수치 발생은 정상이며, 이는 실제 노출이 아닌 인벤토리 체크를 위한 호출 수치 입니다.

문의처

구분 부서 이름 이메일 전화번호
제휴 문의     모바일 영업팀 김정혁 차장 jeonghyeok.kim@cj.net 02-6484-3856
ID발급 및 광고 세팅 문의          모바일 영업팀 이선민 차장 sunmin.lee1@cj.net 02-6484-3461

업데이트: