> 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/sdk/ios/ios-2.x.x/undefined-6.md).

# 네이티브 광고

## 1. 인스턴스 생성

<mark style="color:red;">`AdPopcornSSPNativeAd`</mark>를 생성합니다.  storyboard에 AdPopcornSSPNativeAd 영역 지정 후 아래 스크린샷과 같이 Outlet 연결합니다.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
#import <AdPopcornSSP/AdPopcornSSPNativeAd.h>

@property (strong, nonatomic) IBOutlet AdPopcornSSPNativeAd *adPopcornSSPNativeAd;
```

{% endtab %}

{% tab title="Swift" %}

```swift
class ViewController: UIViewController, APSSPNativeAdDelegate
{	
    // AdPopcornSSPNativeAd
    var apSSPNativeAdRenderer: APSSPNativeAdRenderer!
    @IBOutlet var adPopcornSSPNativeAd: AdPopcornSSPNativeAd!
    @IBOutlet var apSSPIconImageView: UIImageView!
    @IBOutlet var apSSPTitleView: UILabel!
    @IBOutlet var apSSPDescView: UILabel!
    @IBOutlet var apSSPMainImageView: UIImageView!
    @IBOutlet var apSSPNativeAdView: UIView!
}
```

{% endtab %}
{% endtabs %}

<figure><img src="/files/6LtQnUgO29ANJ0iKjLCw" alt=""><figcaption><p>AdPopcornSSPNativeAd 생성</p></figcaption></figure>

{% tabs %}
{% tab title="Objective-C" %}
ViewController.m을 수정하여 생성한 인스턴스에 setPlacementInfoWithAppkey API를 이용하여 아래와 같이 AppKey , PlacementId , ViewController를 설정 합니다.

```objectivec
@implementation AdPopcornSSPNativeViewController	
	- (void)viewDidLoad
	{	
		[super viewDidLoad];	
		[_adPopcornSSPNativeAd setPlacementInfoWithAppKey:@“발급받은앱키” placementId:@“발급받은 네이티브 PlacementId” viewController:self]; 
		_adPopcornSSPNativeAd.delegate = self;
	}
@end
```

{% endtab %}

{% tab title="Swift" %}
ViewController.swift을 수정하여 생성한 인스턴스에 setPlacementInfoWithAppkey API를 이용하여 아래와 같이 AppKey , PlacementId , ViewController를 설정 합니다.

```swift
class ViewController: UIViewController, APSSPNativeAdDelegate
{	
    // AdPopcornSSPNativeAd
    var apSSPNativeAdRenderer: APSSPNativeAdRenderer!
    @IBOutlet var adPopcornSSPNativeAd: AdPopcornSSPNativeAd!
    @IBOutlet var apSSPIconImageView: UIImageView!
    @IBOutlet var apSSPTitleView: UILabel!
    @IBOutlet var apSSPDescView: UILabel!
    @IBOutlet var apSSPMainImageView: UIImageView!
    @IBOutlet var apSSPNativeAdView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
	adPopcornSSPNativeAd.setPlacementInfoWithAppKey("YOUR_APP_KEY", 
	placementId: "YOUR_PLACEMENT_Id", viewController: self)
        adPopcornSSPNativeAd.delegate = self

        apSSPNativeAdRenderer = APSSPNativeAdRenderer.init()
        apSSPNativeAdRenderer.apSSPNativeAdView = apSSPNativeAdView
        apSSPNativeAdRenderer.titleLabel = apSSPTitleView
        apSSPNativeAdRenderer.descLabel = apSSPDescView
        apSSPNativeAdRenderer.mainImageView = apSSPMainImageView
        apSSPNativeAdRenderer.iconImageView = apSSPIconImageView
        adPopcornSSPNativeAd.setApSSPRenderer(apSSPNativeAdRenderer, superView: apSSPNativeAdView)   
    }
}
```

{% endtab %}
{% endtabs %}

## 2. 네이티브 레이아웃 구성

네이티브 레이아웃의 구성은 미디에이션 사용 여부에 따라 달라지게 됩니다.

아래 두 링크를 참고하여서 레이아웃을 구성 부탁 드립니다.

[**\[네이티브 광고 레이아웃 구성 가이드\]**](/ssp-sdk/sdk/ios/ios-2.x.x/undefined-6/undefined.md)

[**\[네이티브 동영상 레이아웃 가이드\]**](/ssp-sdk/sdk/ios/ios-2.x.x/undefined-6/undefined-1.md)

{% hint style="danger" %}
애드팝콘 SSP v2.3.2 버전부터는 Admob v8.10.0 과 호환성을 유지하기 위해 애드몹 native 레이아웃을 구성하는 내용이 변경되었습니다. 이에 미디에이션 레이아웃 구성 가이드 내 AdMob 부분을 반드시 체크해 주시기 바랍니다.
{% endhint %}

### 1) Placement ID 변경

네이티브 인스턴스 생성 시 사용한 placementID를 변경하고자 할 경우, 아래와 같은 방식으로 변경합니다.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
_adPopcornSSPNativeAd.placementId = @"변경하고자 할 ID";
```

{% endtab %}

{% tab title="Swift" %}

```swift
adPopcornSSPNativeAd.placementId = "변경하고자 할 ID"
```

{% endtab %}
{% endtabs %}

## 3. 네이티브 광고 요청

네이티브 인스턴스와 asset의 적절한 배치가 완료 된 경우 , 광고 요청 <mark style="color:red;">`loadRequest`</mark> API를 호출 하여 광고를 받아 옵니다.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
[_sspNativeAd loadRequest];
```

{% endtab %}

{% tab title="Swift" %}

<pre class="language-swift"><code class="lang-swift"><strong>adPopcornSSPNativeAd.loadRequest()
</strong></code></pre>

{% endtab %}
{% endtabs %}

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

광고 수신이 정상적으로 완료 된 경우 아래 스크린샷과 같이 광고가 노출 됩니다.

<figure><img src="/files/uwpciNj3ic34eCz48ip9" alt="" width="563"><figcaption></figcaption></figure>

## 4. 네이티브 광고 중단

네이티브 광고 노출을 중단하고자 할 경우, <mark style="color:red;">`stopAd`</mark> API를 호출해 주며, 광고 영역을 hidden 처리해 줍니다.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
[_sspNativeAd stopAd];
_sspNativeAd.hidden = YES;
```

{% endtab %}

{% tab title="Swift" %}

<pre><code><strong>adPopcornSSPNativeAd.stopAd()
</strong></code></pre>

{% endtab %}
{% endtabs %}

## 5. No Ad 시, 광고 영역 처리

기본적으로 애드팝콘 SDK에서는 네이티브 광고 No Ad 시, view 영역을 hidden 시켜줍니다.

이러한 기능이 필요하지 않을 경우, 아래 API를 통해 hidden 되지 않도록 설정하여 줍니다.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
[_adPopcornSSPNativeAd noAdViewHidden:NO];
```

{% endtab %}

{% tab title="Swift" %}

<pre><code><strong>adPopcornSSPNativeAd.noAdViewHidden(true)
</strong></code></pre>

{% endtab %}
{% endtabs %}

## 6. 델리게이트 설정

네이티브광고에서 발생하는 이벤트에 대한 델리게이트를 제공합니다.

델리게이트를 사용하기 위해서는 APSSPNativeAdDelegate를 추가하여야 합니다.

{% tabs %}
{% tab title="Objective-C" %}
\_sspNativeAd 인스턴스에 delegate를 설정하고 구현하여야 합니다.

<table><thead><tr><th width="303">delegate</th><th>설명</th></tr></thead><tbody><tr><td>APSSPNativeAdLoadSuccess</td><td>네이티브 광고 로드 성공</td></tr><tr><td>APSSPNativeAdLoadFail, error</td><td>네이티브 광고 로드 실패. <a href="/pages/qEliH2tRuJF6CW2rnJU1">에러코드 값</a></td></tr><tr><td>APSSPNativeAdImpression</td><td>네이티브 광고 화면 노출</td></tr><tr><td>APSSPNativeAdClicked</td><td>네이티브 광고 클릭</td></tr><tr><td>APSSPNativeAdHidden</td><td>네이티브 광고를 닫았을 경우(NAM 미디에이션 광고일 경우에만 발생)</td></tr></tbody></table>
{% endtab %}

{% tab title="Swift" %}
adPopcornSSPNativeAd 인스턴스에 delegate를 설정하고 구현하여야 합니다.

<table><thead><tr><th width="290">delegate</th><th>설명</th></tr></thead><tbody><tr><td>apsspNativeAdLoadSuccess</td><td>네이티브 광고 로드 성공</td></tr><tr><td>apsspNativeAdLoadFail(error)</td><td>네이티브 광고 로드 실패. <a href="/pages/qEliH2tRuJF6CW2rnJU1">에러코드 값</a></td></tr><tr><td>apsspNativeAdImpression</td><td>네이티브 광고 화면 노출</td></tr><tr><td>apsspNativeAdClicked</td><td>네이티브 광고 클릭</td></tr><tr><td>apsspNativeAdHidden</td><td>네이티브 광고를 닫았을 경우(NAM 미디에이션 광고일 경우에만 발생)</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
#import <AdPopcornSSP/AdPopcornSSPNativeAd.h>	
@interface AdPopcornSSPNativeViewController () <APSSPNativeAdDelegate>	
{	
} 
@property (strong, nonatomic) IBOutlet AdPopcornSSPNativeAd *adPopcornSSPNativeAd; 

@end	
@implementation AdPopcornSSPNativeViewController	

- (void)viewDidLoad
{	
    [super viewDidLoad];	
    [_adPopcornSSPNativeAd setPlacementInfoWithAppKey:@"발급받은앱키" placementId:@"발급받은 네이티브 PlacementId" viewController:self]; 
    _adPopcornSSPNativeAd.delegate = self; 
} 

#pragma AdPopcornSSPNativeAdDelegate 
- (void)AdPopcornSSPLoadNativeAdFailedWithError:(AdPopcornSSPError *)error 
{ 
} 

- (void)APSSPNativeAdLoadSuccess:(AdPopcornSSPNativeAD *)native Ad 
{ 
} 

- (void)APSSPNativeAdLoadFail:(AdPopcornSSPNativeAD *)nativeAd error:(AdPopcornSSPError) error 
{ 		
}

- (void)APSSPNativeAdImpression:(AdPopcornSSPNativeAd *)nativeAd 
{ 
}

- (void)APSSPNativeAdClicked:(AdPopcornSSPNativeAd *)nativeAd 
{ 
}

- (void)APSSPNativeAdHidden:(AdPopcornSSPNativeAd *)nativeAd 
{ 
}
@end
```

{% endtab %}

{% tab title="Swift" %}

```swift
class ViewController: UIViewController, APSSPNativeAdDelegate
{	
    // AdPopcornSSPNativeAd
    var apSSPNativeAdRenderer: APSSPNativeAdRenderer!
    @IBOutlet var adPopcornSSPNativeAd: AdPopcornSSPNativeAd!
    @IBOutlet var apSSPIconImageView: UIImageView!
    @IBOutlet var apSSPTitleView: UILabel!
    @IBOutlet var apSSPDescView: UILabel!
    @IBOutlet var apSSPMainImageView: UIImageView!
    @IBOutlet var apSSPNativeAdView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        adPopcornSSPNativeAd.setPlacementInfoWithAppKey("YOUR_APP_KEY", 
	placementId: "YOUR_PLACEMENT_Id", viewController: self)
	adPopcornSSPNativeAd.delegate = self

        apSSPNativeAdRenderer = APSSPNativeAdRenderer.init()
        apSSPNativeAdRenderer.apSSPNativeAdView = apSSPNativeAdView
        apSSPNativeAdRenderer.titleLabel = apSSPTitleView
        apSSPNativeAdRenderer.descLabel = apSSPDescView
        apSSPNativeAdRenderer.mainImageView = apSSPMainImageView
        apSSPNativeAdRenderer.iconImageView = apSSPIconImageView
        adPopcornSSPNativeAd.setApSSPRenderer(apSSPNativeAdRenderer, superView: apSSPNativeAdView)   
    }

    // Native Delegate
    func apsspNativeAdLoadSuccess(_ nativeAd: AdPopcornSSPNativeAd!) {
    }
    func apsspNativeAdLoadFail(_ nativeAd: AdPopcornSSPNativeAd!, error: AdPopcornSSPError!) {
    }
    func apsspNativeAdImpression(_ nativeAd: AdPopcornSSPNativeAd!) {
    }
    func apsspNativeAdClicked(_ nativeAd: AdPopcornSSPNativeAd!) {
    }
    func apsspNativeAdHiden(_ nativeAd: AdPopcornSSPNativeAd!) {
    }
}
```

{% endtab %}
{% endtabs %}
