# 기본 설정

## 1. 라이브러리 추가

미디에이션 진행 여부에 따라 라이브러리를 기본/미디에이션 중 선택하여 진행

### - 라이브러리(기본) 다운로드

{% embed url="<https://bitbucket.org/mezzomediaadtech/android-v3-studio_version>" %}

```
git clone https://mezzomedia_adtech@bitbucket.org/mezzomediaadtech/android-v3-studio_version.git
```

<figure><img src="/files/oFGH1J5QjlJotzBO1rIT" alt=""><figcaption></figcaption></figure>

### - 라이브러리( 미디에이션 ) 다운로드&#x20;

build.gradle에 아래와 같이 추가하면 mezzo android sdk 다운로드

```
dependencies {
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'io.github.mezzo-platform:mezzo-sdk:3.1.1'
}
```

<figure><img src="/files/EkNAkN5IZyVsrFx09T9y" alt="" width="309"><figcaption></figcaption></figure>

## 2. Gradle 설정

### - build.gradle

* 프로젝트 영역

<pre class="language-java"><code class="lang-java"><strong>allprojects {
</strong>    repositories {
        mavenCentral()
    }
}
</code></pre>

* 프로젝트 영역

{% code fullWidth="false" %}

```java
dependencies {
    implementation files('libs/manlibray.jar')
}
```

{% endcode %}

## 3. 매니페스트 퍼미션 설정

### - Permission

* 네트워크 사용

{% code title="Network permission" overflow="wrap" lineNumbers="true" %}

```java
<!-- 권한 : NetworkInterface 목적 : IP 주소 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 권한 : ConnectivityManager 목적 : 통신 연결이 Mobile or Wifi 여부 파악 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```

{% endcode %}

* 단말기 정보( TelephonyManager의 망 사업자의 MNC, MCC ) 사용

{% code title="Telephony permission" lineNumbers="true" %}

```java
<!-- 권한 : 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"/>
```

{% endcode %}

* 광고 ID

{% code title="Uses permission" lineNumbers="true" %}

```java
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
```

{% endcode %}

### - Application

* android:configChanges 설정 - 연속된 onCreate 호출로 자원 낭비 방지 값 설정 (테스트앱 기준)
* http 트래킹 및 이미지 로드 옵션 - android:usesCleartextTraffic=”true” 삽입

{% code title="application" lineNumbers="true" %}

```java
<application
    android:usesCleartextTraffic="true"...>
    <activity
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"...>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />...
        </intent-filter>
    </activity>
</application>
```

{% endcode %}

## 4. 공통 코드

### - 광고 설정의 데이터 구성 클래스

* 객체 선언

{% code title="데이터 초기화" lineNumbers="true" %}

```java
import com.mmc.man.data.AdData;
AdData adData = new AdData();
```

{% endcode %}

* 필수 값 세팅

{% code title="데이터 필수 값" lineNumbers="true" %}

```java
adData.major(id, apiMode, publisher, media, section, storeUrl, appId, appName, adWidth, adHeight);
```

{% endcode %}

<table data-header-hidden><thead><tr><th width="143"></th><th width="131"></th><th width="298"></th><th></th></tr></thead><tbody><tr><td><strong>parameter</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>id</td><td>string</td><td>매체에서 사용할 광고 영역의 고유 id</td><td><br></td></tr><tr><td>apiMode</td><td>string</td><td><p>광고 타입</p><p>AdConfig.API_BANNER</p><p>AdConfig.API_INTER</p><p>AdConfig.API_ENDING</p><p>AdConfig.API_MOVIE</p></td><td><br></td></tr><tr><td>publisher</td><td>int</td><td>퍼블리셔 코드</td><td><br></td></tr><tr><td>media</td><td>int</td><td>미디어 코드</td><td><br></td></tr><tr><td>section</td><td>int</td><td>섹션 코드</td><td><br></td></tr><tr><td>storeUrl</td><td>string</td><td>스토어 url</td><td><br></td></tr><tr><td>appId</td><td>string</td><td>패키지명</td><td><br></td></tr><tr><td>appName</td><td>string</td><td>앱 명</td><td><br></td></tr><tr><td>adWidth</td><td>int</td><td>노출되는 광고 영역 넓이 사이즈</td><td><br></td></tr><tr><td>adHeight</td><td>int</td><td>노출되는 광고 영역 높이 사이즈 </td><td><br></td></tr></tbody></table>

* 앱 사용자 나이 레벨 세팅

{% code title="데이터 앱 사용자 나이" lineNumbers="true" %}

```java
adData.setUserAgeLevel(0);
```

{% endcode %}

<table data-header-hidden><thead><tr><th></th><th></th><th width="217"></th><th></th></tr></thead><tbody><tr><td><strong>value</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>0</td><td>int</td><td>어린이 (만13세 미만)</td><td><br></td></tr><tr><td>1</td><td>int</td><td>청소년, 성인 (만13세 이상)</td><td><br></td></tr><tr><td>-1</td><td>int</td><td>알 수 없음</td><td><br></td></tr></tbody></table>

* 퍼미션 사용 여부 - 매니페스트 파일에 정의한 READ\_PHONE\_STATE, READ\_BASIC\_PHONE\_STATE의 사용 여부를 코드에 세팅

{% code title="데이터 퍼미션 사용 여부" lineNumbers="true" %}

```java
adData.isPermission(AdConfig.NOT_USED);
```

{% endcode %}

<table data-header-hidden><thead><tr><th width="234"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>value</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>AdConfig.USED</td><td>String</td><td>사용</td><td><br></td></tr><tr><td>AdConfig.NOT_USED</td><td>String</td><td>미사용</td><td><br></td></tr></tbody></table>

### - 광고 요청

* 광고 요청을 위한 객체 선언

{% code title="배너, 동영상" lineNumbers="true" %}

```java
import com.mmc.man.view.AdManView;
AdManView bannerView = new AdManView(context);
```

{% endcode %}

{% code title="전면배너(팝업)" lineNumbers="true" %}

```java
import com.mmc.man.view.AdManPage;
AdManPage bannerView = new AdManPage(context);
```

{% endcode %}

<table data-header-hidden><thead><tr><th></th><th width="126"></th><th width="265"></th><th></th></tr></thead><tbody><tr><td><strong>parameter</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>context</td><td>Context</td><td>activity Context값 사용</td><td><br></td></tr></tbody></table>

* 광고 요청 시 세팅한 데이터 및 리스너 등록

<pre class="language-java" data-title="데이타 및 리스너 등록" data-line-numbers><code class="lang-java">import com.mmc.man.AdListener;
 
bannerView.setData(adData, new AdListener() {
    //광고 호출 성공 및 광고 소진 (정상 결과값)
    @Override
    public void onAdSuccessCode(Object v, String id, final String type, final String status, final String 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) {
    }
    // 광고 퍼미션(위치) 설정 요청 이벤트 - 사용자 단말기 설정 페이지에 있는 앱 권한을 받기 위한 이벤트입니다.
    @Override
<strong>    public void onPermissionSetting(Object v, String id) {
</strong>  
    }
});
</code></pre>

<table data-header-hidden><thead><tr><th width="168"></th><th width="94"></th><th></th><th></th></tr></thead><tbody><tr><td><strong>parameter</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>id</td><td>string</td><td>매체 광고요청 시 사용된 고유id</td><td><br></td></tr><tr><td>jsonDataString</td><td>string</td><td>광고 세부 정보 (미사용)</td><td><br></td></tr><tr><td>status</td><td>string</td><td>성공여부</td><td>AdResponseCode.Status.SUCCESS  // 성공</td></tr><tr><td>type</td><td>string</td><td>광고 타입 </td><td><p>AdResponseCode.Type.HOUSE //무료 광고</p><p>AdResponseCode.Type.GUARANTEE //유료 광고</p></td></tr><tr><td>v</td><td>object</td><td>광고 요청 객체를 리턴</td><td><br></td></tr></tbody></table>

* 광고 실패 결과

  <table data-header-hidden><thead><tr><th width="130"></th><th width="97"></th><th width="187"></th><th></th></tr></thead><tbody><tr><td><strong>parameter</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>v</td><td>object</td><td>광고 요청 객체를 리턴</td><td><br></td></tr><tr><td>id</td><td>string</td><td>매체 광고요청 시 사용된 고유id</td><td><br></td></tr><tr><td>type</td><td>string</td><td>광고 에러 타입</td><td><p>//전반적인 에러</p><p>AdResponseCode.Type.ERROR </p><p></p><p>//단말기 네트워크 에러</p><p>AdResponseCode.Type.DEVICE_NETWORK_ERROR</p><p></p><p>//광고 소재 랜더링 에러</p><p>AdResponseCode.Type. DEVICE_RENDERING_TIMEOUT</p><p></p><p>//필수값여부 에러</p><p>AdResponseCode.Type. DEVICE_SETTING_ERROR </p><p></p><p>//앱 백그라운드에서 호출 시 에러</p><p>AdResponseCode.Type. APP_LIFECYCLE_BACK </p></td></tr><tr><td>status</td><td>string</td><td>광고 에러 상세 코드</td><td><p>// 광고소진</p><p>AdResponseCode.Status.NOAD </p><p></p><p>// 네트워크 지연으로 인한 타임아웃</p><p>AdResponseCode.Status.TIMEOUT </p><p></p><p>// 잘못된 소재로 인한 파싱 에러</p><p>AdResponseCode.Status.ERROR_PARSING </p><p></p><p>// 중복 호출 에러</p><p>AdResponseCode.Status.DUPLICATIONCALL </p><p></p><p>// ssl 오류 webview error</p><p>AdResponseCode.Status.ERROR_SSL_EXFIRED </p><p></p><p>// 미지원 브라우져</p><p>AdResponseCode.Status.ERROR_NOTSUPPORT_BROWSER </p><p></p><p>// 미지원 안드로이드 버전</p><p>AdResponseCode.Status.ERROR_NOTSUPPORT_ANDROID </p><p></p><p>AdResponseCode.Status.NEEDSYNC // 요청 싱크에러</p><p></p><p>// 소재 레더링 지연 에러</p><p>AdResponseCode.Status.DEVICE_RENDERING_TIMEOUT </p><p></p><p>// 매체 광고 데이타 객체 잘못된 세팅</p><p>AdResponseCode.Status.DEVICE_SETTING_ERROR </p></td></tr><tr><td>jsonDataString</td><td>string</td><td>광고 세부 정보 (미사용)</td><td><br></td></tr></tbody></table>
* android webview 에러 결과

{% code title="Webveiw 에러" lineNumbers="true" %}

```java
onAdErrorCode(v, id, type, status, failingUrl)
```

{% endcode %}

<table data-header-hidden><thead><tr><th width="129"></th><th width="88"></th><th></th><th></th></tr></thead><tbody><tr><td><strong>parameter</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>v</td><td>object</td><td>광고 요청 객체를 리턴</td><td><br></td></tr><tr><td>id</td><td>string</td><td>매체 광고요청 시 사용된 고유id</td><td><br></td></tr><tr><td>type</td><td>string</td><td>ERROR_* 값에 해당하는 오류 코드입니다.</td><td>( WebViewClient 참고 ) onReceivedError error code</td></tr><tr><td>status</td><td>string</td><td>오류를 설명하는 문자열입니다.</td><td>( WebViewClient 참고 ) onReceivedError description code</td></tr><tr><td>failingUrl</td><td>string</td><td>로드에 실패한 URL입니다.</td><td>( WebViewClient 참고 ) onReceivedError failingUrl code</td></tr></tbody></table>

* 이벤트 코드&#x20;

{% code title="이벤트" lineNumbers="true" %}

```java
onAdEvent(v, id, type, status, jsonDataString)
```

{% endcode %}

<table data-header-hidden><thead><tr><th width="131"></th><th width="85"></th><th width="240"></th><th></th></tr></thead><tbody><tr><td><strong>parameter</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>v</td><td>object</td><td>광고 요청 객체를 리턴</td><td><br></td></tr><tr><td>id</td><td>string</td><td>매체 광고요청 시 사용된 고유id</td><td><br></td></tr><tr><td>type</td><td>string</td><td>광고 이벤트 타입</td><td><p>//광고 클릭 이벤트</p><p>AdEvent.Type.CLICK    <br></p><p>//광고 닫기 이벤트</p><p>AdEvent.Type.CLOSE</p><p></p><p>//동영상 노출 이벤트<br>AdEvent.Type.IMP        <br></p><p>//동영상 스킵 이벤트</p><p>AdEvent.Type.SKIP       <br></p><p>//동영상 q1 이벤트</p><p>AdEvent.Type.START      <br></p><p>//동영상 q2 이벤트</p><p>AdEvent.Type.FIRSTQ      <br></p><p>//동영상 q3 이벤트</p><p>AdEvent.Type.MIDQ    <br></p><p>//동영상 q4 이벤트</p><p>AdEvent.Type.THIRDQ    <br></p><p>//동영상 q5 이벤트</p><p>AdEvent.Type.COMPLETE    <br></p><p>//동영상 종료 이벤트</p><p>AdEvent.Type.ENDED   </p></td></tr><tr><td>status</td><td>string</td><td>광고 에러 상세 코드 (미사용)</td><td><br></td></tr><tr><td>jsonDataString</td><td>string</td><td>광고 세부 정보 (미사용)</td><td><br></td></tr></tbody></table>

* 광고 요청 메서드(최종) - 메인 쓰레드 접근을 위한 핸들러 전달

{% code title="" lineNumbers="true" %}

```java
bannerView.request(new Handler());
```

{% endcode %}

## 5. AdConfig 설명

<table data-header-hidden><thead><tr><th width="298"></th><th></th><th width="197"></th><th></th></tr></thead><tbody><tr><td><strong>value</strong></td><td><strong>type</strong></td><td><strong>contents</strong></td><td><strong>etc</strong></td></tr><tr><td>AdConfig.SDK_VERSION</td><td>String</td><td>sdk version</td><td><br></td></tr><tr><td>AdConfig.SDK_RELEASEDATE</td><td>String</td><td>sdk 배포 일자</td><td><br></td></tr><tr><td>AdConfig.API_BANNER</td><td>String</td><td>apiMode 띠배너</td><td><br></td></tr><tr><td>AdConfig.API_INTER</td><td>String</td><td>apiMode 전면배너</td><td><br></td></tr><tr><td>AdConfig.API_ENDING</td><td>String</td><td>apiMode 종료배너</td><td><br></td></tr><tr><td>AdConfig.API_MOVIE</td><td>String</td><td>apiMode 영상</td><td><br></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.targetpick.io/android-sdk/setting_mediation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
