> 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-7.md).

# 모달 광고

## 1. 인스턴스 생성

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

{% tabs %}
{% tab title="Objective-C" %}
MainViewController.m에 AdPopcornSSPModalAd.h 를 import 하고 인스턴스 변수를 선언합니다.

```objectivec
#import <AdPopcornSSP/AdPopcornSSPModalAd.h>					
@interface AdPopcornSSPModalAd() <APSSPModalAdDelegate>	
{										
    AdPopcornSSPModalAd *_sspModalAd;					
} 										
@end	

```

{% endtab %}

{% tab title="Swift" %}
MainViewController.swift 에 AdPopcornSSPModalAd 인스턴스 변수를 선언합니다.

```swift
class MainViewController: UIViewController, APSSPModalAdDelegate
{	
    // AdPopcornSSPModalAd
    var sspModalAd: AdPopcornSSPModalAd!
}

```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Objective-C" %}
MainViewController.m 을 수정하여 생성한 인스턴스를 구현합니다.

```objectivec
@implementation MainViewController 

- (void)viewDidLoad { 
   [super viewDidLoad]; 
    
   _sspModalAd = [[AdPopcornSSPModalAd alloc] initWithKey:@"YOUR_APP_KEY" placementId:@"YOUR_PLACEMENT_ID" viewController:self];
   _sspModalAd.delegate = self;
   _sspModalAd.closeBtnType = 0;
   [_sspModalAd loadRequest];
}
@end
```

{% endtab %}

{% tab title="Swift" %}
MainViewController.swift 을 수정하여 생성한 인스턴스를 구현합니다.

```swift
class MainViewController: UIViewController, APSSPModalAdDelegate
{	
    // AdPopcornSSPModalAd
    var sspModalAd: AdPopcornSSPModalAd!
    override func viewDidLoad() {
        super.viewDidLoad()
	sspModalAd = AdPopcornSSPModalAd(key: "YOUR_APP_KEY", placementId: "YOUR_PLACEMENT_ID", viewController: self)
	sspModalAd.delegate = self
    }
}

```

{% endtab %}
{% endtabs %}

{% hint style="info" %}

* YOUR\_APP\_KEY : [애드팝콘 SSP 콘솔 페이지](https://www.console.adpopcorn.com/)에서 앱을 등록하고 발급 받은 앱 키
* YOUR\_PLACEMENT\_ID : [애드팝콘 SSP 콘솔 페이지](https://www.console.adpopcorn.com/)에서 생성한 배너 광고 PlacementId
  {% endhint %}

## 2. 모달 광고 닫기 버튼 타입 설정

모달 광고 닫기 버튼의 타입을 설정할 수 있습니다.

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

```objectivec
_sspModalAd.closeBtnType = 0 // 기본값 : 0
```

{% endtab %}

{% tab title="Swift" %}

```swift
sspModalAd.setCloseBtnType(0) // 기본값 : 0
```

{% endtab %}
{% endtabs %}

Default 값은 0 이며, 지원하는 닫기 버튼의 형태는 총 2가지입니다.

<table><thead><tr><th width="136" align="center">value</th><th>설명</th></tr></thead><tbody><tr><td align="center">0</td><td>광고 닫기 (기본 값)</td></tr><tr><td align="center">1</td><td>오늘 하루 안보기 (00시 기준으로 리셋)</td></tr></tbody></table>

## 3. 모달 광고 요청

<mark style="color:red;">`loadRequest`</mark> API를 호출하여모달 광고를 요청합니다.

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

```objectivec
[_sspModalAd loadRequest];
```

{% endtab %}

{% tab title="Swift" %}

```swift
sspModalAd.loadRequest()
```

{% endtab %}
{% endtabs %}

## 4. 모달 광고 노출

모달 광고를 성공적으로 로드 한 뒤, 아래 API를 호출하여 모달 광고를 노출하여 줍니다.

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

```objectivec
[_sspModalAd presentFromViewController:viewController];
```

{% endtab %}

{% tab title="Swift" %}

```swift
sspModalAd.present(from:self)
```

{% endtab %}
{% endtabs %}

## 5. 델리게이트 설정

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

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

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

| delegate                    | 설명                                                                 |
| --------------------------- | ------------------------------------------------------------------ |
| APSSPModalAdLoadSuccess     | 모달 광고 로드 성공                                                        |
| APSSPModalAdLoadFail, error | 모달 광고 로드 실패. [에러코드 값](/ssp-sdk/sdk/ios/ios-3.1.0+/undefined-12.md) |
| APSSPModalAdShowSuccess     | 모달 광고 화면 노출 성공                                                     |
| APSSPModalAdShowFail        | 모달 광고 노출 실패                                                        |
| APSSPModalAdClicked         | 모달 광고 클릭                                                           |
| APSSPModalAdClosed          | 모달 광고 닫기                                                           |
| {% endtab %}                |                                                                    |

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

| delegate                    | 설명                                                                 |
| --------------------------- | ------------------------------------------------------------------ |
| apsspModalAdLoadSuccess     | 모달 광고 로드 성공                                                        |
| apsspModalAdLoadFail(error) | 모달 광고 로드 실패. [에러코드 값](/ssp-sdk/sdk/ios/ios-3.1.0+/undefined-12.md) |
| apsspModalAdShowSuccess     | 모달 광고 화면 노출 성공                                                     |
| apsspModalAdShowFail        | 모달 광고 노출 실패                                                        |
| apsspModalAdClicked         | 모달 광고 클릭                                                           |
| apsspModalAdClosed          | 모달 광고 닫기                                                           |
| {% endtab %}                |                                                                    |
| {% endtabs %}               |                                                                    |

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

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

@interface MainViewController() <APSSPModalAdDelegate>
{ 
    AdPopcornSSPModalAd *_sspModalAd;
}
@end

@implementation MainViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    
    _sspModalAd = [[AdPopcornSSPModalAd alloc] initWithKey:@"YOUR_APP_KEY" placementId:@"YOUR_PLACEMENT_ID" viewController:self];
    _sspModalAd.delegate = self;
    _sspModalAd.closeBtnType = 0;
    [_sspModalAd loadRequest];
}
@end

#pragma APSSPModalAdDelegate 
	/*!
 @abstract
 modal 광고 load 완료시(성공시), 호출된다.
 */
- (void)APSSPModalAdLoadSuccess:(AdPopcornSSPModalAd *)modalAd
{
    NSLog(@"APSSPModalAdLoadSuccess : %@", modalAd);
    [modalAd presentFromViewController:self];
}

/*!
 @abstract
 modal 광고 load 실패시, 호출된다.
 */
- (void)APSSPModalAdLoadFail:(AdPopcornSSPModalAd *)modalAd error:(AdPopcornSSPError *)error
{
    NSLog(@"APSSPModalAdLoadFail : %@, error : %@", modalAd, error);
}
/*!
 @abstract
 modal 광고 close시, 호출된다.
 */
- (void)APSSPModalAdClosed:(AdPopcornSSPModalAd *)modalAd
{
    NSLog(@"APSSPModalAdClosed : %@", modalAd);
}

/*!
 @abstract
 modal 광고 클릭시, 호출된다.
 */
- (void)APSSPModalAdClicked:(AdPopcornSSPModalAd *)modalAd
{
    NSLog(@"APSSPModalAdClicked : %@", modalAd);
}

/*!
 @abstract
 modal 광고 show 완료시(성공시), 호출된다.
 */
- (void)APSSPModalAdShowSuccess:(AdPopcornSSPModalAd *)modalAd
{
    NSLog(@"APSSPModalAdShowSuccess : %@", modalAd);
}

/*!
 @abstract
 modal 광고 show 실패시, 호출된다.
 */
- (void)APSSPModalAdShowFail:(AdPopcornSSPModalAd *)modalAd error:(AdPopcornSSPError *)error
{
    NSLog(@"APSSPModalAdShowFail : %@, error : %@", modalAd, error);
}
@end
```

{% endtab %}

{% tab title="Swift" %}

```swift
class MainViewController: UIViewController, APSSPModalAdDelegate
{	
    // AdPopcornSSPModalAd
    var sspModalAd: AdPopcornSSPModalAd!
    override func viewDidLoad() {
        super.viewDidLoad()
	sspModalAd = AdPopcornSSPModalAd(key: "YOUR_APP_KEY", placementId: "YOUR_PLACEMENT_ID", viewController: self)
	sspModalAd.delegate = self
        sspModalAd.loadRequest()
    }
}

// ModalAd Delegate
func apsspModalAdLoadSuccess(_ modalAd: AdPopcornSSPModalAd!) {
    sspModalAd.present(from:self)
}
func apsspModalAdLoadFail(_ modalAd: AdPopcornSSPModalAd!, error: AdPopcornSSPError!) {
}
func apsspModalAdShowSuccess(_ modalAd: AdPopcornSSPModalAd!) {
}
func apsspModalAdShowFail(_ modalAd: AdPopcornSSPModalAd!) {
}
func apsspModalAdClicked(_ modalAd: AdPopcornSSPModalAd!) {
}
func apsspModalAdClosed(_ modalAd: AdPopcornSSPModalAd!) {
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://adpopcornssp.gitbook.io/ssp-sdk/sdk/ios/ios-2.x.x/undefined-7.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
