Android SDK Guide(SPLASH)
현재 버전은 3.0.0 입니다.
Ad type
division | Sample | Explanation |
---|---|---|
스플래시 배너 |
앱 실행 시 스플래시 화면에 노출되는 배너입니다. 배너는 투명 PNG로 제공됩니다. 배너 위치/노출시간/노출방식(모션)은 매체에서 제어합니다. - 하단 위치/3초 이상 노출 권장 - 가로 또는 세로 사이즈 조정 시 비율 유지하여 축소 - 배너가 가려지거나 잘리지 않도록 주의 - SDK 3.0.0버전 이상에서만 사용 가능 |
지원 상품(사이즈)
Product classification | size |
---|---|
스플래시 배너 | 1200x1000 |
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 적용 대상 앱이 android11(API Level 30)이상을 타겟팅 하며, 자동으로 표시되는 앱이 아닌 다른 앱과 상호 작용을 해야 한다면 앱의 매니페스트 파일에 요소를 추가해야 합니다.
<?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"/>
<application
android:usesCleartextTraffic="true"
android:name=".MZApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--SPLASH activity-->
<activity
android:exported="true"
android:name="com.mmc.adman.app.Splash"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
</activity>
</application>
</manifest>
Java source
SPLASH
광고 삽입된 splash 페이지에서 아래 코드를 꼭 시작하셔야 합니다.
private AdManView splashAd = null;
public void destroySplashAd() {
if (splashAd != null) {
splashAd.onDestroy();
splashAd = 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("splashArea_ID", AdConfig.API_INTER, p, m, s, "http://www.storeurl.com", "packagename", appName, 320, 480);
//유저 나이 레벨 필수
adData.setUserAgeLevel(0);
//퍼미션 사용 여부
adData.isPermission(AdConfig.NOT_USED);
adData.setIsInLayout(AdConfig.USED);
splashAd = new AdManView(c);
splashAd.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() {
((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.IMP.equals(type)){
//노출
}
}
// 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
@Override
public void onPermissionSetting(Object v, String id) {
// isPermission값이 미사용으로 설정한다면 이벤트가 발생하지 않습니다.
}
});
//요청 메서드
inlayoutInter.request(new Handler());
}
공통 사항
Method - 광고연동 시 사용하는 메서드입니다.
메서드 | 설명 |
---|---|
AdManView ( Context context ) | 광고 생성자(전면팝업을 제외하고 사용합니다.) |
setData ( AdData adData, AdListener adListener ) | 광고세팅 메서드 |
request( Handler handler ) | 광고로직 시작 |
onDestroy( ) | 광고로직 종료 |
addBannerView(ViewGroup bannerArea) | 특정영역에 광고 넣는 메서드 |
AdData - 광고 삽입 때 사용하는 데이터입니다.
method | Explanation | Usable range |
---|---|---|
major(String id, String apiMode, int publisher, int media, int section, String storeUrl, String appId, String appName, int adAreaWidth, int adAreaHeight ) |
필수값 세팅 메서드 | 공통 |
setUserAgeLevel(int userAgeLevel) | 필수값 유저의 나이 레벨 | 공통 |
isPermission(String isReadPhone) | 퍼미션 사용 여부 (AdConfig.NOT_USED, AdConfig.USED) |
공통 |
setIsInLayout(String isInLayout) | 특정레이아웃 삽입 사용 여부 (AdConfig.NOT_USED, AdConfig.USED) |
스플래시 |
setDefaultBackgroundColor(String color) | 광고background 색상 (default : #000000) |
공통 |
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’s age level
상수 | 설명 |
---|---|
0 | 어린이 (만13세 미만) |
1 | 청소년, 성인 (만13세 이상) |
-1 | 알수없음 |
AdConfig - This is the value used for ad settings.
상수 | 설명 |
---|---|
AdConfig.SDK_VERSION | sdk version |
AdConfig.SDK_RELEASEDATE | sdk release date |
AdConfig.API_INTER | 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.IMP.equals(type)){
//노출 트래킹
}
}
AdListener Explanation
메서드 | 설명 |
---|---|
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.IMP | 노출 이벤트 |
Q&A
광고 노출 여부 확인
No | 설명 |
---|---|
1 | 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 |