Android SDK Guide (version3.0.0)
현재 버전은 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 |