# 배너 광고

## 1. 배너 뷰 인스턴스 생성

배너 view 인스턴스를 생성하는 방식은 xml 방식과 코드 방식 2가지를 지원합니다.

### 1) XML 방식

배너 광고가 노출될 뷰를 사용 중이신 <mark style="color:red;">`Layout.xml`</mark> 파일에 추가합니다.

{% code title="XML" %}

```xml
<LinearLayout 
	android:layout_width="match_parent" 
	android:layout_height="wrap_content" 
	android:background="#ffffff" 
	android:orientation="vertical">	
	<!-- AdPOPcorn SSP Banner View -->			
	<com.igaworks.ssp.part.banner.AdPopcornSSPBannerAd	
		android:layout_width="match_parent"	
		android:layout_height="wrap_content" 
		android:layout_gravity="center_horizontal"	
		android:id="@+id/banner"/>
</LinearLayout>
```

{% endcode %}

xml 에서 형성된 인스턴스를 추가합니다.

{% tabs %}
{% tab title="JAVA" %}

```java
private AdPopcornSSPBannerAd bannerAd; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
      bannerAd = (AdPopcornSSPBannerAd )findViewById(R.id.banner);
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
var bannerAd : AdPopcornSSPBannerAd? = null

override fun onCreate(savedInstanceState: Bundle?) { 
      bannerAd = findViewById<AdPopcornSSPBannerAd>(R.id.banner)
}
```

{% endtab %}
{% endtabs %}

### 2) 코드 방식

아래 코드를 추가하여 인스턴스를 생성합니다.

{% tabs %}
{% tab title="JAVA" %}

```java
private AdPopcornSSPBannerAd bannerAd; 

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

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
var bannerAd : AdPopcornSSPBannerAd? = null

override fun onCreate(savedInstanceState: Bundle?) { 
      bannerAd = AdPopcornSSPBannerAd(this@MainActivity)
}
```

{% endtab %}
{% endtabs %}

## 2. 배너 광고 Placement ID 설정

아래 코드를 추가하여 배너 광고의 PLACEMENT ID 를 설정합니다. 배너 광고 PLACEMENT ID 는 [애드팝콘 SSP 콘솔 페이지](https://www.console.adpopcorn.com/)에서 생성이 가능합니다.

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.setPlacementId("배너광고_PLACEMENT_ID");
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.placementId = "배너광고_PLACEMENT_ID"
```

{% endtab %}
{% endtabs %}

## 3. 배너 광고 요청 사이즈 설정

배너 사이즈는 3 가지 옵션으로 <mark style="color:red;">`AdSize enum class`</mark> 로 전달하며 사이즈는 AdSize.BANNER\_320x50 / AdSize.BANNER\_300x250 / AdSize.BANNER\_320x100으로 설정 가능합니다.

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

{% hint style="danger" %}
AdSize.BANNER\_ADAPTIVE\_SIZE의 경우 네이버 애드 매니저 이미지형 배너 전용 사이즈 입니다. 해당 사이즈 사용하고자 하는 경우에는 사업팀(<monetize@adpopcorn.com>)에 문의해 주시기 바랍니다.
{% endhint %}

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.setAdSize(AdSize.BANNER_320x50);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.setAdSize(AdSize.BANNER_320x50)
```

{% endtab %}
{% endtabs %}

## 4. 배너 광고 요청 갱신주기 설정

AdPopcorn 에서 제공하는 배너 광고에 대한 갱신주기를 설정합니다. 설정가능 범위는 15\~300초 사이이며 -1 로 설정 시 자동으로 갱신되지 않습니다.

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

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.setRefreshTime(50);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.setRefreshTime(50)
```

{% endtab %}
{% endtabs %}

## 5. 네트워크 스케쥴 타임아웃 설정

AdPopcornSSP 에서 제공하는 배너 광고에 대한 네트워크 스케쥴 타임아웃을 설정합니다.

배너 광고 로딩 시 각 네트워크 별로 타임아웃 시간을 주어 해당 시간 안에 광고를 받지 못할 경우 , 다음 네트워크로 넘어가게 됩니다.

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

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.setNetworkScheduleTimeout(10);
```

{% endtab %}

{% tab title="Kotiln" %}

```kotlin
bannerAd?.setNetworkScheduleTimeout(10)
```

{% endtab %}
{% endtabs %}

## 6. 배너 광고 애니메이션

AdPopcornSSP 에서 제공하는 배너 광고는 총 7가지의 애니메이션을 추가할 수 있습니다.

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

<table><thead><tr><th width="388">parameter</th><th>설명</th></tr></thead><tbody><tr><td>BannerAnimType.NONE</td><td>배너 애니메이션 없음</td></tr><tr><td>BannerAnimType.FADE_IN</td><td>페이드 인 애니메이션</td></tr><tr><td>BannerAnimType.SLIDE_LEFT</td><td>왼쪽으로 슬라이드 애니메이션</td></tr><tr><td>BannerAnimType.SLIDE_RIGHT</td><td>오른쪽으로 슬라이드 애니메이션</td></tr><tr><td>BannerAnimType.TOP_SLIDE</td><td>윗쪽으로 슬라이드 애니메이션</td></tr><tr><td>BannerAnimType_BOTTOM_SLIDE</td><td>아래쪽으로 슬라이드 애니메이션</td></tr><tr><td>BannerAnimType_CIRCLE</td><td>배너 회전 애니메이션</td></tr></tbody></table>

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.setBannerAnimType(BannerAnimType.SLIDE_LEFT);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.setBannerAnimType(BannerAnimType.SLIDE_LEFT)
```

{% endtab %}
{% endtabs %}

## 7. 배너 배경색 채우기

AdPopcornSSP 에서 제공하는 배너 광고는 배너 광고가 나오는 뷰의 빈 공간에 배경색을 채울 수 있습니다.&#x20;

{% hint style="info" %}
Default 값은 true (=배경 채우기) 입니다.
{% endhint %}

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.setAutoBgColor(false);  
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.setAutoBgColor(false) 
```

{% endtab %}
{% endtabs %}

## 8. 배너 뷰 광고 요청

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

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.loadAd();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.loadAd()
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
loadAd 호출에 대한 결과로 광고 수신에 실패한 경우에는 loadAd 재호출을 하시면 안됩니다. 과도한 광고 요청 api 호출은 block 사유가 됩니다.
{% endhint %}

## 9. 배너 뷰 광고 중단

배너 광고 노출을 더 이상 하고 싶지 않은 시점에 호출합니다. 일반적으로 배너가 노출된 activity 나 fragment 가 destroy 할 때 호출합니다.

{% hint style="danger" %}
단, onPause 상태 진입 시 stopAd 를 호출할 경우 클릭 리포트 수치가 누락되는 경우가 발생하므로 해당 배너 뷰가 포함된 activity 나 fragment 가 destroy 상태 진입 시에 호출 해주세요.
{% endhint %}

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.stopAd();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.stopAd()
```

{% endtab %}
{% endtabs %}

## 10. 배너 광고 로드 여부 체크

배너 광고 로드 시 광고 유/무를 파악할때 호출 합니다.&#x20;

* <mark style="color:red;">`true`</mark>: 광고 로드 성공&#x20;
* <mark style="color:blue;">`false`</mark>: 광고 로드 실패

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.isDisplayed();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd.isDisplayed()
```

{% endtab %}
{% endtabs %}

## 11. 이벤트 리스너

배너 광고를 불러올 때 발생하는 이벤트에 대한 리스너를 설정합니다. 제공되는 리스너와 구현 예시는 다음과 같습니다.

| 이벤트 리스너                  | 설명                                                         |
| ------------------------ | ---------------------------------------------------------- |
| OnBannerAdReceiveSuccess | 배너 광고 로딩 성공                                                |
| OnBannerAdReceiveFailed  | 배너 광고 로딩 실패. [에러코드 값](/ssp-sdk/sdk/android/undefined-9.md) |
| OnBannerAdClicked        | 배너 클릭 시                                                    |

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd.setBannerEventCallbackListener(new IBannerEventCallbackListener(){	
    @Override	
    public void OnBannerAdReceiveSuccess() { 
    }	

    @Override	
    public void OnBannerAdReceiveFailed(SSPErrorCode sspErrorCode) { 
    }

    @Override	
    public void OnBannerAdClicked() { 
    }
});
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
bannerAd?.setBannerEventCallbackListener(object: IBannerEventCallbackListener{

    override fun OnBannerAdReceiveSuccess() {
    }

    override fun OnBannerAdReceiveFailed(sspErrorCode: SSPErrorCode) {
    }

    override fun OnBannerAdClicked () {
    }
})
```

{% endtab %}
{% endtabs %}

## 12. 배너 광고 미디에이션 옵션

애드팝콘 SSP 에서 제공하는 Cauly, Mopub, Mezzo Media 에 대한 옵션을 설정 할 수 있습니다.

### Cauly

<table data-full-width="false"><thead><tr><th width="300">option</th><th width="314">설명</th><th>default</th></tr></thead><tbody><tr><td>AdPopcornSSPBannerAd,MediationExtraData.CAULY_DYNAMIC_RELOAD_INTERVAL</td><td>광고 노출 주기를 카울리측에서 컨트롤 함</td><td>true</td></tr><tr><td>AdPopcornSSPBannerAd.MediationExtraData.CAULY_RELOAD_INTERVAL</td><td>광고노출 주기를 매체에서 컨트롤 함 (CAULY_DAYNAMIC_RELOAD_INTERVAL 를 False 로 변경 시 사용 가능)</td><td>20 (설정범위10~120)</td></tr><tr><td>AdPopcornSSPBannerAd.MediationExtraData.CAULY_THREAD_PRIORITY</td><td>스레드 우선순위 설정 </td><td> 5 (설정범위 1~10)</td></tr></tbody></table>

### Mezzo Media

<table data-full-width="false"><thead><tr><th>option</th><th>설명</th></tr></thead><tbody><tr><td>AdPopcornSSPBannerAd.MediationExtraData.MEZZO_STORE_URL</td><td>앱의 Store URL</td></tr><tr><td>AdPopcornSSPBannerAd.MediationExtraData.MEZZO_IS_USED_BACKGROUND_CHECK</td><td>백그라운드에서 배너가 동작할 수 있게 체크 하는 옵션</td></tr><tr><td>AdPopcornSSPBannerAd.MediationExtraData.MEZZO_AGE_LEVEL</td><td>메조 연령 정보를 세팅하는 옵션(기본값은 -1)</td></tr></tbody></table>

{% hint style="warning" %}
메조 가이드에 따르면, 알 수 없음 = -1, 어린이(13세 미만) = 0, 청소년 및 성인(만 13세 이상) = 1로 정의하고 있으니, 매체 측에서 유저의 연령 정보를 알고 계신 경우, <mark style="color:red;">`MEZZO_AGE_LEVEL`</mark> 옵션 값을 설정하시기 바랍니다
{% endhint %}

아래는 옵션 설정 예시 입니다.

{% tabs %}
{% tab title="JAVA" %}

```java
bannerAd = (AdPopcornSSPBannerAd) findViewById(R.id.banner_container_2);

HashMap bannerMediationExtras = new HashMap<>();
bannerMediationExtras.put(AdPopcornSSPBannerAd.MediationExtraData.CAULY_DYNAMIC_RELOAD_INTERVAL, true);
bannerMediationExtras.put(AdPopcornSSPBannerAd.MediationExtraData.CAULY_RELOAD_INTERVAL, 40);
bannerMediationExtras.put(AdPopcornSSPBannerAd.MediationExtraData.MEZZO_STORE_URL, "");
bannerMediationExtras.put(AdPopcornSSPBannerAd.MediationExtraData.MEZZO_IS_USED_BACKGROUND_CHECK, false);
bannerMediationExtras.put(AdPopcornSSPBannerAd.MediationExtraData.MEZZO_AGE_LEVEL, 1);
bannerAd.setMediationExtras(bannerMediationExtras)
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
var bannerMediationExtras:HashMap<String, Any> = HashMap()
bannerMediationExtras[AdPopcornBannerAd.MediationExtraData.CAULY_DYNAMIC_RELOAD_INTERVAL] = true
bannerMediationExtras[AdPopcornBannerAd.MediationExtraData.CAULY_RELOAD_INTERVAL] = 40
bannerMediationExtras[AdPopcornBannerAd.MediationExtraData.MEZZO_STORE_URL] = ""
bannerMediationExtras[AdPopcornBannerAd.MediationExtraData.MEZZO_IS_USED_BACKGROUND_CHECK] = false
bannerMediationExtras[AdPopcornBannerAd.MediationExtraData.MEZZO_AGE_LEVEL] = 1
bannerAd?.setMediationExtras(bannerMediationExtras)
```

{% endtab %}
{% endtabs %}


---

# 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://adpopcornssp.gitbook.io/ssp-sdk/sdk/android/undefined-1.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.
