> For the complete documentation index, see [llms.txt](https://adpopcornssp.gitbook.io/ssp-sdk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://adpopcornssp.gitbook.io/ssp-sdk/undefined-2/extra-guide/undefined-1/ssp-sdk-for-onestore.md).

# 애드팝콘 SSP SDK for Onestore

이 가이드는 애드팝콘 SSP Android SDK에서 원스토어 전용으로 사용되는 광고 타입 연동을 위한 가이드 문서입니다.

{% hint style="info" %}
애드팝콘 SSP v3.0.12부터 지원하는 기능이므로, 연동 전 반드시 버전 확인을 부탁 드립니다.
{% endhint %}

## 1. SDK Grandle 설치

gradle을 이용하여 SDK 설정이 가능합니다.

{% tabs %}
{% tab title="프로젝트 수준 build.gradle 예시" %}

```java
allprojects {
    repositories {
        mavenCentral()
    }
}
```

{% endtab %}

{% tab title="앱 수준 build.gradle 예시" %}

```java
dependencies {
    implementation 'com.igaworks.ssp:IgawAdPopcornSSP:3.0.13'
}
```

{% endtab %}
{% endtabs %}

## 2. SDK 수동 다운로드 및 설치

위 Gradle 설정을 이용하지 않고 수동으로 SDK 다운로드 하고자 할 경우 아래 다운로드 링크를 통해 최신 안드로이드 SDK 패키지를 다운로드 합니다.

[**\[애드팝콘 SSP SDK 다운로드\]**](https://github.com/IGAWorksDev/AdPopcornSDK/blob/master/AdPopcornSSP/01-android-sdk/AdPopcornSSP_v3.0.13a.zip?raw=true)

다운로드 받은 .zip 파일을 압축해제하여 <mark style="color:red;">`AdPopcornSSP~*.aar`</mark> 파일을 안드로이드 스튜디오 프로젝트로 복사한 후 gradle 을 업데이트합니다.

<figure><img src="https://50533756-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fqmkw7pJLtjFGD5fwChbN%2Fuploads%2FYNUHGiHdqJPiqF8qJnBP%2Fimage.png?alt=media&amp;token=c9051733-6617-46a4-9b37-1f70a95bf369" alt="" width="375"><figcaption></figcaption></figure>

SDK 복사 후 아래와 같이 build.gradle 에 dependiencies 를 추가하고 업데이트 합니다.

```
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile(name: 'AdPopcornSSP_3.0.13a', ext: 'aar')
    repositories { flatDir { dirs 'libs' } }
}
```

## 3. 매니페스트 설정

애드팝콘 SSP를 이용하기 위한 내용을 <mark style="color:red;">`AndroidManifest.xml`</mark> 파일에 추가합니다.

### 1) 앱 키 추가

[애드팝콘 SSP 콘솔 페이지](https://www.console.adpopcorn.com/) 앱 등록 후 발급받은 앱 키를 \<application>\</application>  태그 안에 추가합니다.

{% code title="XML" %}

```xml
<application>
... 
<meta-data android:name="adpopcorn_ssp_app_key" android:value="이곳에_앱키를_입력하세요" /> 
...
</application>
```

{% endcode %}

### 2) 퍼미션 추가

\<manifest>\</manifest> 태그 안에 필수 퍼미션을 추가합니다.

{% code title="XML" %}

```xml
<manifest>
... 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
...
</manifest>
```

{% endcode %}

## 4. 필수 연동

애드팝콘 SSP에서는 광고 타입 별 연동을 진행하기 전에 기본 API를 이용하여 초기화 작업을 해야 합니다.

### 1) SSP SDK 초기화

<mark style="color:red;">`init API`</mark>를 어플리케이션 실행 후 최초로 로드되는 activity 혹은 SSP 광고를 노출하고자 하는 activity에서 호출하여 SDK를 초기화합니다.&#x20;

단, init 중복 호출 시, 그 사이에 세팅된 광고가 초기화 됨으로 중복 호출을 방지하고자 할 때에는 <mark style="color:red;">`isInitialized`</mark> API를 통해 초기화 작업이 완료된 상태인지 체크하시기 바랍니다.

{% code title="JAVA" %}

```java
if(AdPopcornSSP.isInitialized(MyDisplayAdSampleActivity.this){
	// Already SSP SDK initialized
}
else{
	AdPopcornSSP.init(MyDisplayAdSampleActivity.this);
}
```

{% endcode %}

### 2) 리소스 해제

<mark style="color:red;">`destroy API`</mark>를 이용하여 어플리케이션이 종료될 때 메모리에 할당된 SSP 관련 리소스(View,Memory)를 해제합니다.

앱이 종료될 때 호출되는 activity의 <mark style="color:red;">`onDestroy()`</mark>에서 호출합니다.

{% code title="JAVA" %}

```java
@Override
protected void onDestroy() {	
		// TODO Auto-generated method stub	
		super.onDestroy();	

		AdPopcornSSP.destroy();
}
```

{% endcode %}

### 3) 안드로이드 9.0 HTTP 통신 대응

Android P 부터 일반 텍스트 트래픽(암호화 되지 않은 HTTP)은 기본적으로 차단 됩니다.

SSP에서 취급하는 광고는 기본적으로 HTTPS를 사용하고 있으나 미디에이션 광고에서는 HTTPS 사용 여부를 확신할 수 없기 때문에 <mark style="color:red;">`AndroidManifest.xml`</mark>파일에 아래 설정을 추가 부탁 드립니다.

{% code title="XML" %}

```xml
<manifest> 
<application android:networkSecurityConfig="@xml/network_security_config"> 
     ... 
</application>
</manifest>
```

{% endcode %}

### 4) 네트워크 보안 구성 파일 추가

네트워크 보안 구성 기능은 <mark style="color:red;">`res/xml/network_security_config.xml`</mark> 파일에 아래 설정을 추가 부탁 드립니다.

{% code title="XML" %}

```xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config> <base-config cleartextTrafficPermitted="true" />
</network-security-config>
```

{% endcode %}

## 5. 원스토어 광고

원스토어 광고는 원스토어 커스텀 대응을 위해 생성한 광고 형식입니다.

### 1) 원스토어 광고 인스턴스 생성

{% code title="JAVA" %}

```java
import com.igaworks.ssp.part.custom.OneStoreAd;
import com.igaworks.ssp.part.custom.listener.ICustomAdListener;
import com.igaworks.ssp.part.custom.listener.IOneStoreAdEventCallbackListener;

private OneStoreAd onestoreAd; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
      onestoreAd= new OneStoreAd (context);
}
```

{% endcode %}

### 2) Placement ID 설정

아래 코드를 추가하여 광고의 PLACEMENT ID 를 설정합니다.

{% code title="JAVA" %}

```java
onestoreAd.setPlacementId("원스토어AD_PLACEMENT_ID");
```

{% endcode %}

### 3) BappList 설정

아래 코드를 추가하여 해당 광고 지면에서 block할 app List를 설정합니다.

{% code title="JAVA" %}

```java
List<String> bappList = new ArrayList<String>();
bappList.add("com.test1");
bappList.add("com.test2");
oneStoreAd.setBAppList(bappList);
```

{% endcode %}

### 4) BcatList 설정

아래 코드를 추가하여 해당 광고 지면에서 block할 category List를 설정합니다.

{% code title="JAVA" %}

```java
List<String> bcatList= new ArrayList<String>();
bcatList.add("IAB23");
bcatList.add("IAB25");
oneStoreAd.setBCatList(bcatList);
```

{% endcode %}

### 5) Tag ID 설정

아래 코드를 추가하여 해당 광고 지면의 tagId를 설정합니다.

{% hint style="info" %}
Default 값은 placementId 입니다.
{% endhint %}

{% code title="JAVA" %}

```java
// default : placementId
oneStoreAd.setTagId("testTag");
```

{% endcode %}

### 6) 광고 요청 개수(Plcmtcnt) 설정

아래 코드를 추가하여 해당 광고 지면에서 요청할 광고 수를 설정합니다.

{% hint style="info" %}
Default 값은 20 입니다.
{% endhint %}

{% code title="JAVA" %}

```java
oneStoreAd.setPlcmtcnt(10);
```

{% endcode %}

### 7) 이벤트 리스너

원스토어 광고 요청 후 발생하는 이벤트에 대한 리스너를 설정합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

<table><thead><tr><th width="184">이벤트</th><th width="183">설명</th><th>비고</th></tr></thead><tbody><tr><td>OnLoadSuccess</td><td>광고 로딩 성공</td><td>광고 로딩 성공 시, 미리 협의한 대로, onestore의 AID 정보를 List 형태로 전달함.</td></tr><tr><td>OnLoadFailed</td><td>광고 로딩 실패</td><td>전달되는 에러코드는 아티클 하단의 테이블 참고</td></tr></tbody></table>

### 8) 광고 요청

원스토어 광고 노출을 원하는 시점에 <mark style="color:red;">`loadAd()`</mark> API 를 호출하여 서버에 광고를 요청합니다.

{% code title="JAVA" %}

```java
oneStoreAd.loadAd();
```

{% endcode %}

### 9) 광고 노출 수집

광고 로딩 성공 후, 전달 받은 AID에 해당하는 광고가 노출될 경우, 각 광고마다 <mark style="color:red;">`impression`</mark> API를 호출하여, 노출이 정상적으로 집계 되도록 합니다.

{% code title="JAVA" %}

```java
oneStoreAd.onImpression("노출된 AID");
```

{% endcode %}

### 10) 광고 클릭 수집

유저가 광고를 클릭 한 경우, 클릭된 광고의 AID에 대해 <mark style="color:red;">`click`</mark> API를 호출하여, 클릭이 정상적으로 집계 되도록 합니다.

{% code title="JAVA" %}

```java
oneStoreAd.onClick("클릭된 AID");
```

{% endcode %}

### 11) 샘플 코드

{% code title="JAVA" %}

```java
import com.igaworks.ssp.part.custom.OneStoreAd;
import com.igaworks.ssp.part.custom.listener.ICustomAdListener;
import com.igaworks.ssp.part.custom.listener.IOneStoreAdEventCallbackListener;

private OneStoreAd onestoreAd; 
private List<String> mOnestoreAIDList;

public class MainActivity extends Activity{
		@Override 
		protected void onCreate(Bundle savedInstanceState) { 			
			onestoreAd= new OneStoreAd (context);
				
			onestoreAd.setPlacementId("원스토어AD_PLACEMENT_ID");
		
			List<String> bappList = new ArrayList<String>();
       		        bappList.add("com.test1");
		        bappList.add("com.test2");
	                oneStoreAd.setBAppList(bappList);
		
		        List<String> bcatList = new ArrayList<String>();
		        bcatList.add("IAB23");
		        bcatList.add("IAB25");
		        oneStoreAd.setBCatList(bcatList);
		
		        oneStoreAd.setEventListener(new IOneStoreAdEventCallbackListener(){
		             @Override
		             public void OnLoadSuccess(List<String> onestoreAIDList) {
		                  Log.d("Sample", "OnLoadSuccess");
				  mOnestoreAIDList = onestoreAIDList;
		             }
		
		             @Override
		             public void OnLoadFailed(SSPErrorCode errorCode) {
		             Log.d("Sample", "OnLoadFailed");
		             }
		         });
				
		         oneStoreAd.loadAd();
				
				
		         // AID List의 0 번째 index의 광고가 클릭된 시점
		         oneStoreAd.onClick(mOnestoreAIDList.get(0));
		}
		
		private void impression(int index){
			 // AID List의 index 번째 광고가 노출된 시점
			 oneStoreAd.onImpression(mOnestoreAIDList.get(index));
		}
		
		
		private void click(int index){
			 // AID List의 index 번째 광고가 클릭된 시점
			 oneStoreAd.onClick(mOnestoreAIDList.get(index));
		}
}
```

{% endcode %}

## 6. 응답 에러 코드&#x20;

<table><thead><tr><th width="128">Code</th><th>Message</th><th>설명</th></tr></thead><tbody><tr><td>200</td><td>Exception</td><td>일반 SDK 에러</td></tr><tr><td>1000</td><td>Invalid Parameter</td><td>잘못된 파라미터</td></tr><tr><td>9999</td><td>Unknown Server Error</td><td>알려지지 않은 서버 에러</td></tr><tr><td>2000</td><td>Invalid App Key</td><td>잘못된 앱키</td></tr><tr><td>2030</td><td>Invalid Placement Id</td><td>잘못된 지면 키</td></tr><tr><td>2100</td><td>Empty Campaign</td><td>광고 없음</td></tr><tr><td>5001</td><td>Load Ad Failed</td><td>광고 로드 실패</td></tr><tr><td>5002</td><td>No Ad</td><td>광고 없음</td></tr></tbody></table>
