> 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/adfit-bizboard-android.md).

# 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-10.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> 으로 문의 주시기 바랍니다.
