Android SDK Guide

14 분 소요

Geonjin Mun

현재 버젼은 108 입니다.

Sample Project

Android Studio Version
Bitbucket
git clone https://mezzomedia_adtech@bitbucket.org/mezzomediaadtech/android-studio_version.git
Eclipse Version
Bitbucket
git clone https://mezzomedia_adtech@bitbucket.org/mezzomediaadtech/android-eclipse_version.git

Intro

광고의 구성

구분 샘플 설명
띠 배너 일반적인 바(Bar) 형태의 배너입니다.
대부분 하단에 위치하지만, 퍼블리셔의 조정에 따라 상단 또는 중간에도 게재할 수 있습니다.
전면 배너 앱 실행 시, 전면에 광고가 게시되며, 퍼블리셔의 조정에 따라 노출 영역을 조정할 수 있습니다.
전면동영상 배너 앱 실행 시, 전면동영상 광고가 게시됩니다.
종료(엔딩) 배너 앱 종료 시, 전면에 광고가 게시되며, 광고물 하단에 앱 종료 유/무 확인 Dialog를 보여줍니다.
동영상 동영상 콘텐츠 재생 전 Pre-Roll 형태로 재생되는 동영상 광고입니다.
전면확장 앱 실행 시, 전면광고가 게시되고, 남은 영역에는 좌측상단 1pixel기준의 색상이 채워집니다.

공통 세팅

SDK 라이브러리 적용

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

AndroidManifest.xml 설정

com.mapps.android.view.InterstitialView 를 Activity로 등록 합니다.
android.permission는 광고 SDK 광고 삽입을 위해 필요한 권한 설정입니다.
광고를 삽입할 해당 Activity의 속성에 android:configChanges=”orientation|keyboard”를 삽입해야 합니다.
 (연속된 OnCreate 호출로 인한 네트웍 자원 낭비 방지용)
android9(API 28)부터 강화된 네트워크 보안정책으로 인해 application에 값(android:usesCleartextTraffic=”true”)을 삽입합니다.
 광고 이미지url load, 트래킹요소, resource가 http 구성될 수 있으므로 해당옵션을 삽입합니다.
android8(API 27)에서 Translucent나 Floating activity를 사용하고자 할 때  android:screenOrientation=”portrait”를 activity style에 설정하면 오류가 납니다. 스타일을 버전별로 만들어서 적용하고 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mplus.sdk.sample.release " android:versionCode="1" android:versionName="1.0">
<!--광고 이미지url load, 트래킹요소, resource가 http 구성될 수 있으므로 해당옵션을 삽입(android:usesCleartextTraffic="true") -->
	<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" android:usesCleartextTraffic="true">
		<activity android:name=". MainActivity" android:label="@string/app_name" android:configChanges="orientation|keyboard">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
		<activity android:name="com.mapps.android.view.InterstitialView" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:screenOrientation="portrait" />
	</application>
<!--네트워크 사용 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--위치값 사용 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--단말기 정보( TelephonyManager의 망 사업자의 MNC, MCC ) 사용 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
	<uses-permission android:name="android.permission.GET_TASKS" />
</manifest>

Res/attrs.xml 파일 생성 및 설정

<?xml version="1.0" encoding="UTF-8"?>
<resources>
	<declare-styleable name="com.mapps.android.view.AdView">
		<attr name="locationType" format="integer" />
		<attr name="backgroundStretch" format="integer" />
		<attr name="publisherCode" format="string" />
		<attr name="mediaCode" format="string" />
		<attr name="sectionCode" format="string" />
		<attr name="mediaType" format="string" />
		<attr name="storeurl" format="string" />
	</declare-styleable>
	<declare-styleable name="com.mapps.android.view.EndingAdView">
		<attr name="pCode" format="string" />
		<attr name="mCode" format="string" />
		<attr name="sCode" format="string" />
		<attr name="media_Type" format="string" />
		<attr name="store_url" format="string" />
	</declare-styleable>
</resources>

배너광고에 사용되는 resource입니다.
declare-styleable의 name을 com.mapps.android.view.AdView로 설정 합니다.
attr atribute를 설정 합니다.

이름 설명
publisherCode 퍼블리셔 코드로 메조미디어 사업부에서 발급 받으실 수 있습니다.
mediaCode 미디어 코드로 메조미디어 사업부에서 발급 받으실 수 있습니다.
sectionCode 섹션 코드로 메조미디어 사업부에서 발급 받으실 수 있습니다.
backgroundStretch 광고 영역의 Background영역을 해당 광고 색으로 모두 Paint 되는 형태입니다.
locationType 광고영역의 위치를 선택하는 기능입니다.
mediaType 광고 타입을 선택하는 기능입니다.
( 0번 : Html형 노출 형태 1번 : Image형 노출 형태 )
storeurl app store url

종료배너광고에 사용되는 resource입니다.
declare-styleable의 name을 com.mapps.android.view.EndingAdView로 설정 합니다.
attr atribute를 설정 합니다.

이름 설명
pCode 퍼블리셔 코드로 메조미디어 사업부에서 발급 받으실 수 있습니다.
mCode 미디어 코드로 메조미디어 사업부에서 발급 받으실 수 있습니다.
sCode 섹션 코드로 메조미디어 사업부에서 발급 받으실 수 있습니다.
media_Type 광고 타입을 선택하는 기능입니다.
( 0번 : Html형 노출 형태 1번 : Image형 노출 형태 )
store_url app store url

SDK guide

띠배너

Layout 에서 세팅한 방식

SDK App ID 입력
광고 삽입 하고자 하는 해당 Activity에 다음과 같은 코드를 설정 합니다.

이름 설명
xmlns:app 프로젝트 해당 패키지 이름을 설정 합니다.
android:id 반드시 설정 하여야 하며 unique한 id값으로 설정 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_light" android:orientation="vertical">
	<LinearLayout android:id="@+id/layout_gallery" android:layout_width="fill_parent" android:layout_height="50dp" android:orientation="vertical" />
	<com.mapps.android.view.AdView xmlns:app="http://schemas.android.com/apk/res/com.mplus.sdk.sample.release" android:id="@+id/ad" android:layout_width="match_parent" android:layout_height="20dp" app:backgroundStretch="0" app:locationType="0" app:mediaCode="201" app:mediaType="1" app:publisherCode="101" app:sectionCode="308" />
	<SurfaceView android:layout_width="0px" android:layout_height="0px" />
</RelativeLayout>

광고 삽입을 한 해당 Activity에 com.mapps.android.view를 import 합니다.
Acitivity의 OnPause,OnResume을 override 합니다.
설정한 android:id값을 근거로 AdView의 object를 얻어온 이후에 OnPause와 OnResume에 StopService와 StartService함수를 호출 합니다.
여러 개의 광고를 삽입 하였을 경우 각각의 id에 맞게 설정 하여야 합니다.

package com.mplus.sdk.sample.release;

import com.mapps.android.view.AdView;
import com.mz.common.listener.AdListener;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.LinearLayout;

public class BannerSample extends Activity implements AdListener {
	private AdView m_adView = null;
	private LinearLayout bLayout = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_banner);
		createBannerXMLMode();
	}

	private void createBannerXMLMode() {
		m_adView = (AdView) findViewById(R.id.ad);
		m_adView.setUserAge("1");
		m_adView.setUserGender("3");
		m_adView.setEmail("few.com");
		m_adView.setAccount("id");
		m_adView.setUserAgeLevel("0");
		m_adView.setStoreurl("http://store.url");
		m_adView.setKeyword("");
		m_adView.setExternal("");
		m_adView.setLoaction(false);
		m_adView.setAdListener(this);
	}

	@Override
	protected void onResume() {
		super.onResume();
		if (m_adView != null)
			m_adView.StartService();
	}

	@Override
	protected void onPause() {
		super.onPause();
		if (m_adView != null)
			m_adView.StopService();
	}

	@Override
	protected void onDestroy() {
		m_adView = null;
		if (bLayout != null)
			bLayout.removeAllViews();

		super.onDestroy();
	}

	public void onInterClose(View v) {

	}

	public void onAdClick(View v) {

	}

	public void onChargeableBannerType(View v, boolean bcharge) {
		Utils.onChargeableBannerType(bcharge);
	}

	public void onFailedToReceive(View v, int errorCode) {
		// 광고 수신 성공한 경우 호출됨.수신값 0은 성공을 의미함
		Utils.customErrorMsg(errorCode, new Handler() {
			@Override
			public void dispatchMessage(Message msg) {
				String log = String.valueOf(msg.obj);
				Utils.log(log);
			}
		});
	}
}

유저의 정보를 입력 받아, 해당 목적에 맞는 데이터를 수집할 수 있습니다.(Option)
User info를 참고하십시오.

m_adView.setUserAge("1");
m_adView.setUserGender("3");
m_adView.setEmail("few.com");
m_adView.setAccount("id");
m_adView.setLoaction(false);
m_adView.setUserAgeLevel("0");
m_adView.setStoreurl("http://store.url");
m_adView.setKeyword("");
m_adView.setExternal("");
Java 에서 세팅한 방식

해당 Activity 소스 추가

public class BannerSample extends Activity implements AdListener {
	AdView m_adView = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_banner);
		String p = "100";
		String m = "200";
		String s = "300";
		createBannerJavaCodeView(p, m, s, AdInfoKey.TYPE_HTML);
	}

	public void createBannerJavaCodeView(String p, String m, String s, int type) {
		if (m_adView == null) {
			try {
				m_adView = new AdView(BannerSample.this, 0, 0, type);//context값은 activity context를 적용합니다.
				m_adView.setAdViewCode(p, m, s);
				m_adView.setUserAge("1");
				m_adView.setUserGender("3");
				m_adView.setEmail("few.com");
				m_adView.setAccount("id");
				m_adView.setUserAgeLevel("0");
				m_adView.setStoreurl("http://store.url");
				m_adView.setKeyword("");
				m_adView.setExternal("");
				m_adView.setLoaction(false);
				m_adView.setAdListener(this); // 리스너 등록
				bLayout = (LinearLayout) findViewById(R.id.layout_gallery);
				bLayout.addView(m_adView);
			} catch (Exception e) {
				m_adView = null;
				e.printStackTrace();
			}
		}
	}
	@Override
	protected void onResume() {
		super.onResume();
		if (m_adView != null)
			m_adView.StartService();
	}

	@Override
	protected void onPause() {
		super.onPause();
		if (m_adView != null)
			m_adView.StopService();
	}

	@Override
	protected void onDestroy() {
		m_adView = null;
		if (bLayout != null) {
			bLayout.removeAllViews();
		}
		super.onDestroy();
	}

	public void onChargeableBannerType(View v, boolean bcharge) {
		// 수신된 광고가 무료 광고인 경우 bcharge 값이 false 임.
		if (m_adView == v) {
			if (bcharge) {
				Log.v("ADSDK", "-------> chargeable advertise !!!");
			} else {
				Log.v("ADSDK", "-------> Non chargeable advertise !!");
			}
		}
	}

	public void onFailedToReceive(View v, int errorCode) {
		// 광고 수신 성공한 경우 호출됨.수신값 0은 성공을 의미함
		if (m_adView == v) {
			Log.e("ADSDK", "-------> errorCode=" + errorCode);
			final int errcode = errorCode;
			handler.post(new Runnable() {
				public void run() {
					showErrorMsg(errcode);
				}
			});
		}
	}

	private void showErrorMsg(int errorCode) {
		String log;
		switch (errorCode) {
			case AdInfoKey.AD_SUCCESS:
				log = "[ " + errorCode + " ] " + "광고 성공";
				break;
			case AdInfoKey.AD_ID_NO_AD:
				log = "[ " + errorCode + " ] " + "광고 소진";
				break;
			case AdInfoKey.NETWORK_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)네트워크";
				break;
			case AdInfoKey.AD_SERVER_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)서버";
				break;
			case AdInfoKey.AD_API_TYPE_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)API 형식 오류";
				break;
			case AdInfoKey.AD_APP_ID_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)ID 오류";
				break;
			case AdInfoKey.AD_WINDOW_ID_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)ID 오류";
				break;
			case AdInfoKey.AD_ID_BAD:
				log = "[ " + errorCode + " ] " + "(ERROR)ID 오류";
				break;
			case AdInfoKey.AD_CREATIVE_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)광고 생성 불가";
				break;
			case AdInfoKey.AD_ETC_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)예외 오류";
				break;
			case AdInfoKey.CREATIVE_FILE_ERROR:
				log = "[ " + errorCode + " ] " + "(ERROR)파일 형식";
				break;
			case AdInfoKey.AD_INTERVAL:
				log = "[ " + errorCode + " ] " + "광고 요청 어뷰징";
				break;
			case AdInfoKey.AD_TIMEOUT:
				log = "[ " + errorCode + " ] " + "광고 API TIME OUT";
				break;
			case AdInfoKey.AD_ADCLICK:
				log = "[ " + errorCode + " ] " + "광고 클릭";
				break;
			case AdInfoKey.AD_BACKGROUND_CALL
				// 백그라운드에서 잘못된 호출
				break;					
			default:
				log = "[ " + errorCode + " ] " + "etc";
				break;
		}
		debug(log );
	}

	private void debug(String msg) {
		Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
	}
	public void onInterClose(View v) {
		// 전면 close
	}
	public void onAdClick (View v) {
		//광고 클릭
	}
}
Method

AdView

인자 설명
context activity Context값을 적용합니다.
backstretch 광고 영역의 Background영역을 해당 광고 색으로 모두 Paint 되는 형태입니다.
( 0번 : 투명으로 처리 1번 : BackgroundStretch 되는 형태 )
locationType 광고영역의 위치를 선택하는 기능입니다.
( 0번 : center 1번 : left 2번 : right )
media_type 광고 타입을 선택하는 기능입니다.
( 0번 : Html형 노출 형태 1번 : Image형 노출 형태 )

전면배너

Java 에서 세팅한 방식
AdInterstitialView m_interView = new AdInterstitialView ();
m_interView. setAdViewCode ("34", "227", "480");
m_interView.setUserAge("10");
m_interView.setViewStyle(VIEWSTYLE.NONE);
m_interView.setUserGender("1");
m_interView.setLoaction(true);
m_interView.setAccount("test");
m_interView.setEmail("test@mezzomediaco.kr");
m_interView.setUserAgeLevel("0");
m_interView.setStoreurl("http://store.url");
m_interView.setKeyword("");
m_interView.setExternal("");
m_interView.ShowInterstitialView();
Method
메서드 설명
setAdViewCode (String publisher, String media, String section) 발급 받은 코드 MANPLUS광고 코드를 참고하십시오.
setViewStyle(int viewStyle) setViewStyle를 참고하십시오.
ShowInterstitialView() 전면광고를 구동하는 메서드
onDestroy() 전면광고를 정지하는 메서드

setViewStyle

이름 설명
VIEWSTYLE.RESIZE 팝업형태
VIEWSTYLE.NONE 전체 화면 확장형태 default값

종료배너

Java 에서 세팅한 방식
FrameLayout ending_ad = (FrameLayout) findViewById(R.id.ending_ad);

m_flexibleAD = new EndingAdView(Activity.this, mediaType);//context값은 activity context를 적용합니다.
m_flexibleAD.setAdViewCode(p, m, s);
m_flexibleAD.setBannerSize(250, 300);
m_flexibleAD.setAccount("id");
m_flexibleAD.setEmail("few.com");
m_flexibleAD.setUserAgeLevel("0");
m_flexibleAD.setStoreurl("http://store.url");
m_flexibleAD.setKeyword("");
m_flexibleAD.setExternal("");
ending_ad.addView(m_flexibleAD);

if (m_flexibleAD != null) {
	m_flexibleAD.startEndingAdView();
}
Method
메서드 설명
setAdViewCode (String publisher, String media, String section) 발급 받은 코드 MANPLUS광고 코드를 참고하십시오.
setBannerSize(int w, int h) 배너 영역의 사이즈
startEndingAdView() 종료배너 구동 메서드
onDestroy() 종료배너 정지하는 메서드

동영상

Java 에서 세팅한 방식
// player 정의
private void createAdPlayer(){
	adPlayer = (AdVideoPlayer)findViewById(R.id.ad_player);
	adPlayer. setCateContent("","");
	adPlayer.setLoaction(true);
	adPlayer.setAccount("id");
	adPlayer.setEmail("app@mezzomediaco.kr");
	adPlayer.setUserAgeLevel("0");
	adPlayer.setStoreurl("http://store.url");
	adPlayer.setKeyword("");
	adPlayer.setExternal("");
	adPlayer.setAdVideoPlayerErrorListener (this);
	adPlayer.setAdVideoPlayerListener (this);
	adPlayer.setVideoMode(AdVideoPlayer.MODE_NORMAL);
	adPlayer.showAd();
}

// Activity Life cycle에 따른 Player 정의
@Override
protected void onDestroy() {
	super.onDestroy();

	if(adPlayer!=null)
		adPlayer.onDestory();
}
@Override
protected void onPause() {
	super.onPause();
	bActivate = false;

	if(adPlayer!=null)
		adPlayer.onPause();
}
@Override
protected void onResume() {
	super.onResume();

	if(!bActivate) {
		if(adPlayer!=null)
			adPlayer.onResume();
	}
}

@Override
public void onBackPressed() {
	super.onBackPressed();

	if(adPlayer!=null)
		adPlayer.onBackPressed();
}
<FrameLayout android:id="@+id/layout_player" android:layout_width="match_parent" android:layout_height="match_parent"	android:layout_weight="1" android:background="#000000">
	<VideoView android:id="@+id/videoViewExample" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible" android:layout_gravity="center" />
	<com.mapps.android.main.AdVideoPlayer android:id="@+id/ad_player" android:layout_width="match_parent" android:layout_height="match_parent"/>
</FrameLayout>

플레이어를 갖고 있는 액티비티 라이프 사이클에 따라 AdVideoPlayer 클래스의 onPause,onResume등을 호출 해주시면 됩니다
본 플레이어 영상 재생은 onAdPlayerReceive 에서 실행 하시면 됩니다.

메서드
메서드 설명
setAdViewCode (String publisher, String media, String section) 발급 받은 코드 MANPLUS광고 코드를 참고하십시오.
setEmail(String str) 유저의 이메일을 설정합니다.
setLoaction(Boolean is) GPS를 선택 하는 기능입니다.(GPS_USE는 위치정보 사용 여부를 말하며 false으로 설정시 GPS를 사용하지 않습니다)
setVideoMode(int mode) ScreenMode를 참고하십시오.
setCateContent(String cate, String content) 카테고리 이름과 카테고리 값을 설정
setAdVideoPlayerErrorListner (AdVideoPlayerErrorListener listener) VideoView의 Error Event
showAd(); 광고 시작 함수
getVideoCurrentDuration() 광고 재생중 호출시 현재 재생시간을 리턴. 재생시간 sec = millisec /1000
onResume() activity에서 resume이벤트 시 호출
onPause() activity에서 onPause이벤트 시 호출
onBackPressed() activity에서 onBackPressed이벤트 시 호출

공통 사항

User info

띠배너, 전면배너, 종료배너, 동영상배너에는 다음과 같은 공통 함수들이 있습니다.
 다음 함수들은 타겟팅을 위한 정보를 서버로 전송하는 함수로써 필수사항은 아니며 필요에 따라 세팅 해주시면 됩니다.

메서드 설명
setUserAge(String str) 유저의 나이를 설정합니다.
setUserGender(String str) 유저의 성별을 설정합니다.
( 1 : 남자, 2 : 여자 )
setAccount(String str) 유저의 계정을 설정합니다.
setEmail(String str) 유저의 이메일을 설정합니다.
setLoaction(Boolean is) GPS를 선택 하는 기능입니다.
( GPS_USE는 위치정보 사용 여부를 말하며 false으로 설정시 GPS를 사용하지 않습니다 )
setUserAgeLevel(String str) 유저의 나이 레벨
( 0 : 어린이(만13세 미만), 1 : 청소년/성인(만13세 이상), -1 : 알수없음 )
setStoreurl(String str) store url
setKeyword(String str) 키워드값을 전달
구분자는 ^로 사용
keyword값은 인코딩
setExternal(String str) 확장 파라미터 사용시
( 추가적인 파라미터 사용 시 가이드 받으셔야 합니다. )
광고 코드

광고 삽입되는 메서드에 공통된 사항입니다.

인자 설명
publisher 퍼블리셔 코드
media 미디어 코드
section 섹션 코드
Screen Mode

동영상 광고 화면 모드입니다..

화면모드 설명
AdVideoPlayer.MODE_NORMAL 4:3화면
AdVideoPlayer.MODE_WIDE 16:9 화면
AdVideoPlayer.MODE_STRETCH 부모View 크기에 맞춤
AdVideoPlayer.MODE_ORIGNAL 영상 실제 사이즈
AdListener 활용 방법
package com.mezzo.samplesdk;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import com.mapps.android.view.AdView;
import com.mapps.android.listner.AdListner;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class BannerSample extends Activity implements AdListener {
	private AdView m_adlayout = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_banner);
		m_adlayout= (AdView)findViewById(R.id.ad);
		m_adlayout.setAdListener(this);
	}
	@Override
	protected void onPause() {
		super.onPause();

		if(m_adlayout !=null)
			m_adlayout.StopService();
	}
	@Override
	protected void onResume() {
		super.onResume();

		if(m_adlayout !=null)
			m_adlayout.StartService();
	}
	public void onChargeableBannerType(View v, boolean bcharge) {
		/*
		* (value값이 bcharge 값이 true이면 상업용 광고 false면 무료광고입니다)
		*/
		if(m_adlayout == v) {
			if(bcharge) {
				Log.v("ADSDK", "-------> chargeable advertise !!!");
			} else {
				Log.v("ADSDK", "-------> Non chargeable advertise !!");
			}
		}
	}
	public void onFailedToReceive(View v, int errorCode) {
		if(m_adlayout == v) {
			switch(errorCode) {
				case AdInfoKey.AD_SUCCESS:
					// 광고 성공
					break;
				case AdInfoKey. AD_ID_NO_AD:
					// 광고 소진
					break;
				case AdInfoKey. NETWORK_ERROR:
					// (ERROR)네트워크
					break;
				case AdInfoKey. AD_SERVER_ERROR:
					// (ERROR)서버
					break;
				case AdInfoKey. AD_API_TYPE_ERROR:
					// (ERROR)API 형식 오류
					break;
				case AdInfoKey. AD_APP_ID_ERROR:
					//(ERROR)ID 오류
					break;
				case AdInfoKey. AD_WINDOW_ID_ERROR:
					//(ERROR)ID 오류
					break;
				case AdInfoKey. AD_ID_BAD:
					//(ERROR)ID 오류
					break;
				case AdInfoKey. AD_CREATIVE_ERROR:
					//(ERROR)광고 생성 불가
					break;
				case AdInfoKey. AD_ETC_ERROR:
					//(ERROR)예외 오류
					break;
				case AdInfoKey. CREATIVE_FILE_ERROR:
					//(ERROR)파일 형식
					break;
				case AdInfoKey. AD_INTERVAL:
					// 광고 요청 어뷰징
					break;
				case AdInfoKey. AD_TIMEOUT:
					// 광고 API TIME OUT
					break;
				case AdInfoKey. AD_ADCLICK:
					// 광고 클릭
					break;
				case AdInfoKey.AD_BACKGROUND_CALL
					// 백그라운드에서 잘못된 호출
					break;					
				default:
					break;
			}
		}
	}
	public void onAdClick (boolean b) {
		//광고 클릭
	}

	public void onInterClose (View view) {
		//전면상품 닫기 이벤트
	}
}

implements로 AdListner를 추가합니다.
setAdListner를 등록합니다.

AdListener 설명
메서드 설명
onChargeableBannerType(View v, boolean bcharge) 리스너를 등록 했을 경우 넘어오는 이벤트 이며 bcharge가 true면 상업용 광고 false면 무료 광고입니다.
onFailedToReceive(View v, int errorCode) 에러 발생시 발생 되는 이벤트입니다.
Listener Code를 참고하십시오.
onInterClose (View v) 전면광고 close 이벤트
onAdClick(View v) 배너 광고 click 이벤트
Listener Code
Code 설명
0 성공
3 광고 클릭
-100 Network 에러
-200 광고 서버 에러
-300 API 타입 오류
-400 App ID 값 오류
-500 Window ID 값 오류
-600 해당 ID 값이 정상적이지 않음
-700 해당 ID의 광고가 존재하지 않음
-800 예기치 못한 예외 발생
-900 해당 광고소재 오류
-1000 설정된 interval시간에 걸려서 광고 호출 제외
-2000 타임아웃
-3000 광고물예외 발생
-8000 백그라운드에서의 잘못된 호출

Help

Q&A

광고 노출 여부 확인
No 설명
1 Q. SDK 적용 후 광고가 노출이 안 되는 경우 및 확인 절차
A. SDK는 XML 및 Java코드로 구현 할 수 있기 때문에 구현된 방식에 정확한 코드가 설정 되어 있는지 확인 해주시면 됩니다.
2 Q. 상용 물량 세팅 이후에 광고가 안 보이거나 하우스 광고만 노출 될 경우
A. 대부분의 광고 세팅 후에 광고가 노출되지 않는 현상은 코드를 잘못 설정하거나
테스트 코드로 세팅 할 경우 발생되기 때문에 설정방식을 확인 하시기 바랍니다.
이후에도 상용 물량이 안 나올 경우 문의사항 연락 주시기 바랍니다.
No ad 처리 방법(패스백)
No 설명
1 Q. No ad 처리 방법에 대한 문의
A. MANPLUS SDK 해당 ID의 광고가 존재하지 않거나 물량을 소진했을 경우 또는
 타켓팅에 의해 시간, 앱 종류, 카테고리, 날짜에 따라서도 노출 가능한 광고의 수가 달라질 수 있습니다.
 각 등록한 리스너에 광고의 NO AD같은경우 “-700”으로 콜백을 호출 해주고 있습니다.
 일정 시간 후 다시 광고 요청을 하거나 콜백 받은 부분에서 이후 진행 로직을 진행해 주시면 됩니다.
2 Q. No ad 캠페인 세팅 후 리포트 수치가 잡히는 이유
A. No ad 캠페인 세팅을 해도 리포트 수치 발생은 정상이며, 이는 실제 노출이 아닌 인벤토리 체크를 위한 호출 수치 입니다.

문의처

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

업데이트: