# Adfit Bizboard Android 연동 가이드

## 1. AdPopcornSSP / Adfit SDK 다운로드

### 1) SDK gradle 설치

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

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

```java
allprojects {
    repositories {
        mavenCentral()
	google()
        jcenter()
        maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
    }
}
```

{% endtab %}

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

```java
dependencies {
    implementation 'com.igaworks.ssp:IgawAdPopcornSSP:3.1.0'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10'
    implementation 'com.kakao.adfit:ads-base:3.12.7'
}
```

{% endtab %}
{% endtabs %}

## 2. 매니페스트 설정

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

### 1) 앱키 추가

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

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

### 2) 퍼미션 추가

<mark style="color:red;">`<manifest></manifest>`</mark> 태그 안에 필수 퍼미션을 추가합니다.

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

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

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

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

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

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

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

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

## 3. 필수 코드 연동

### 1) SSP SDK 초기화

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

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

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

InAppBidding을 사용하는 매체의 경우 아래 <mark style="color:red;">`init`</mark> API를 사용해, 초기화를 진행해 주어야 합니다.&#x20;

그렇지 않을 경우, InAppBidding을 사용하는 placement 지면에 대한 업데이트가 이루어지지 않아, inAppBidding이 동작하지 않습니다.

```java
if(AdPopcornSSP.isInitialized(MyDisplayAdSampleActivity.this){
      // Already SSP SDK initialized
}
else{
    AdPopcornSSP.init(MyDisplayAdSampleActivity.this, new SdkInitListener() {
      @Override
      public void onInitializationFinished() {
          // init 작업이 완료 된 뒤, 광고 로드 작업을 진행해 주시기 바랍니다.
      }
  });
}
```

### 2) 리소스 해제

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

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

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

## 4. 네이티브 BizBoard 연동

### 1) 네이티브 XML 레이아웃(native\_ad\_mediation\_layout.xml) 설정

AdPopcornSSPNativeAd View 안에 사용하고자 하는 Adfit Bizboard 영역을 지정한 뒤 해당 레이아웃을 원하는 화면(main layout)의 레이아웃에 포함시켜 줍니다.

```xml
<?xml version="1.0" encoding="utf-8"?>
<com.igaworks.ssp.part.nativead.AdPopcornSSPNativeAd
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/adpopcorn_native_ad"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    
    <!-- AdFit BizBoard -->
    <com.kakao.adfit.ads.na.AdFitBizBoardAdTemplateLayout
        android:id="@+id/adFitNativeAdView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.igaworks.ssp.part.nativead.AdPopcornSSPNativeAd>
```

### 2) Placement ID 설정

XML로 생성한(native\_ad\_mediation\_layout.xml) AdPopcornSSPNativeAd에 placement ID 설정

```java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    adPopcornSSPNativeAd = (AdPopcornSSPNativeAd) findViewById(R.id.adpopcorn_native_ad);
    adPopcornSSPNativeAd.setPlacementId("8n12virz5gmkwqr");
}
```

### 3) setAdFitViewBinder API 호출

<mark style="color:red;">`native_ad_mediation_layout.xml`</mark>에서 생성한 Adfit Bizboard 영역 정보를 AdPopcornSSP SDK에 설정해 줍니다.

```java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    adPopcornSSPNativeAd = (AdPopcornSSPNativeAd) findViewById(R.id.adpopcorn_native_ad);
    adPopcornSSPNativeAd.setPlacementId("8n12virz5gmkwqr");

    AdFitViewBinder adFitViewBinder = new AdFitViewBinder.Builder(R.id.adFitNativeAdView)
        .bizBoardAd(true)
        .build();
    adPopcornSSPNativeAd.setAdFitViewBinder(adFitViewBinder);
}
```

{% hint style="danger" %}
AdFitViewBinder Builder 생성 시, <mark style="color:red;">`view id(R.id.adFitNativeAdView)`</mark>는 필수로 넘겨주어야 하며, <mark style="color:red;">`bizBoardAd(true)`</mark>를 반드시 설정해야 합니다.
{% endhint %}

### 4) 광고 요청

<mark style="color:red;">`loadAd`</mark> API를 통해 광고를 요청합니다.

```java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    adPopcornSSPNativeAd = (AdPopcornSSPNativeAd) findViewById(R.id.adpopcorn_native_ad);
    adPopcornSSPNativeAd.setPlacementId("8n12virz5gmkwqr");

    AdFitViewBinder adFitViewBinder = new AdFitViewBinder.Builder(R.id.adFitNativeAdView)
        .bizBoardAd(true)
	.build();
    adPopcornSSPNativeAd.setAdFitViewBinder(adFitViewBinder);
    adPopcornSSPNativeAd.loadAd();
}
```

### 5) 광고 이벤트 리스너

네이티브 광고에서 발생하는 이벤트를 받고자 할 경우 , 이벤트 리스너를 생성하여 전달해 줍니다. 이벤트 리스너를 통해 들어오는 이벤트들을 아래와 같습니다.

| 이벤트 리스너               | 설명                                                             |
| --------------------- | -------------------------------------------------------------- |
| onNativeAdLoadSuccess | 네이티브 광고 요청 성공 시                                                |
| onNativeAdLoadFailed  | 네이티브 광고 요청 실패 시. [에러코드 값](/ssp-sdk/sdk/android/undefined-9.md) |
| onImpression          | 네이티브 광고가 화면에 노출되었을 때                                           |
| onClicked             | 네이티브 광고를 클릭 했을 때                                               |

```java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    adPopcornSSPNativeAd = (AdPopcornSSPNativeAd) findViewById(R.id.adpopcorn_native_ad);
    adPopcornSSPNativeAd.setPlacementId("8n12virz5gmkwqr");
    
    AdFitViewBinder adFitViewBinder = new AdFitViewBinder.Builder(R.id.adFitNativeAdView)
                .bizBoardAd(true)
                .build();
    adPopcornSSPNativeAd.setAdFitViewBinder(adFitViewBinder);
    adPopcornSSPNativeAd.loadAd();

    adPopcornSSPNativeAd.setNativeAdEventCallbackListener (new INativeAdEventCallbackListener () {
		@Override
		public void onNativeAdLoadSuccess () {
		}
		
		@Override
		public void onNativeAdLoadFailed (SSPErrorCode errorCode) {
		}
		
		@Override
		public void onImpression () {
		}
		
		@Override
		public void onClicked () {
		}
     });
}
```

{% hint style="info" %}
Adfit의 경우 onImpression, onClicked 이벤트가 지원되지 않아 발생하지 않습니다.
{% endhint %}

### 6) 네이티브 광고 종료

네이티브 광고 인스턴스를 더 이상 사용하지 않을 경우, <mark style="color:red;">`destroy`</mark> API를 호출하여 줍니다.

```java
adPopcornSSPNativeAd.destroy();
```

### 7) RecyclerView 샘플 앱

{% file src="/files/xp8H9RKjZUE33gAenT9Y" %}
RecyclerView 샘플 앱
{% endfile %}

추가로 궁금하신 사항은 <monetize@adpopcorn.com> 으로 문의 주시기 바랍니다.


---

# 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/undefined-2/extra-guide/adfit-bizboard-android.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.
