# 기본 설정

## 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="https://583392291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxdbgD34XdoBdrVCIm02M%2Fuploads%2F91mYzDPq3wD3vJvHfMfS%2F%E1%84%85%E1%85%A1%E1%84%8B%E1%85%B5%E1%84%87%E1%85%B3%E1%84%85%E1%85%A5%E1%84%85%E1%85%B5%E1%84%8E%E1%85%AE%E1%84%80%E1%85%A1.png?alt=media&#x26;token=866c101a-234d-4f5a-bd59-eb04f9450c46" 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="https://583392291-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxdbgD34XdoBdrVCIm02M%2Fuploads%2FZUozAmRtpAvgWxEoWxO2%2F%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%20%EA%B2%BD%EB%A1%9C%20%EC%83%98%ED%94%8C.png?alt=media&#x26;token=a4f37f54-cea1-4d35-bdae-1f48ba04cbaa" 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>
