> 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/reward-banner/reward-banner-ios.md).

# Reward Banner 스크립트 iOS

{% hint style="warning" %}
애드팝콘 SSP에서 제공하는 스크립트 만을 노출 시키기 위한 웹 뷰를 구성 한 뒤, 아래와 같이 설정하여 해당 웹 뷰에서 클릭을 체크 후 리워드를 지급합니다.
{% endhint %}

{% hint style="danger" %} <mark style="color:red;">반드시 다른 웹뷰와 분리하여 웹뷰를 생성해야만 광고에 대한 클릭 처리가 정확히 됩니다.</mark>
{% endhint %}

## 1. WebView 추가

오직 Reward Banner 광고 만을 위한 WebView를 추가합니다.

{% code title="Objective-C" %}

```swift

@interface MainViewController() <WKUIDelegate, WKNavigationDelegate>
{
	WKWebView *_webView;
}

- (void)viewDidLoad 
{
	WKWebView *_webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, width, height) configuration:nil];
	[self.view addSubView:_webView];
}
```

{% endcode %}

## 2. WebView 세팅 및 랜딩

### 1) 광고 설정 순서

{% code title="Objective-C" %}

```swift
@interface MainViewController() <WKUIDelegate, WKNavigationDelegate>
{
	WKWebView *webView;
}

- (void)viewDidLoad 
{
	WKWebView *_webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, width, height) configuration:nil];
	
	[self.view addSubView:_webView];
	[self initializeWebViewSetting];
	[self loadscript];
}
```

{% endcode %}

### 2) WebView 관련 설정

webView 관련 설정을 아래와 같이 진행합니다. (<mark style="color:red;">`initializeWebViewSetting`</mark>)

{% code title="Objective-C" %}

```swift
- (void)initializeWebViewSetting
{
    _webView.UIDelegate = self;
    _webView.navigationDelegate = self;
}
```

{% endcode %}

### 3) script 로드

애드팝콘 사업실로 부터 전달받은 아래 형태의 script를 webview에 로드합니다.(<mark style="color:red;">`loadScript`</mark>)

{% code title="HTML" %}

```html
<iframe class="adpopcorn-ads" src="https://ssp.igaw.io/sdk/html/mediation_v2.html?{파라미터}" width="{WIDTH}" height="{HEIGHT}" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>
```

{% endcode %}

{% code title="Objective-C" %}

```swift
- (void)loadscript
{
	NSString *idfa = [self getIDFA];
	NSString *script = @"<iframe class=\"ads\" src=\"https://ssp.igaw.io/sdk/html/mediation_v2.html?{파라미터}\" width=\"320px\" height=\"100px\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" scrolling=\"no\"></iframe>";
	script = [scriptstringByReplacingOccurrencesOfString:@"{idfa}" withString:idfa];
	[webView loadData:[script dataUsingEncoding:NSUTF8StringEncoding] MIMEType:@"text/html" characterEncodingName:@"UTF-8" baseURL:[[NSURL alloc] initWithString:@"https://ssp.igaw.io"]];
}
```

{% endcode %}

* **iOS 파라미터 정의**

{% hint style="info" %}
광고 물량은 전달 가능한 파라미터 범위에 따라 달라질 수 있습니다. 가능한 범위 내 최대한 전달해주시길 바랍니다.
{% endhint %}

<table><thead><tr><th width="239">Parameter</th><th width="72">필수</th><th width="95">Type</th><th width="91">Default</th><th>설명</th></tr></thead><tbody><tr><td>app_key</td><td><mark style="color:red;">Y</mark></td><td>string</td><td></td><td>매체용으로 발급된 광고 앱 키</td></tr><tr><td>placement_id</td><td><mark style="color:red;">Y</mark></td><td>string</td><td></td><td>매체용으로 발급된 광고 지면 아이디</td></tr><tr><td>idfa</td><td><mark style="color:red;">Y</mark></td><td>string</td><td></td><td>iOS 광고 식별자</td></tr><tr><td>idfv</td><td>N(<mark style="color:red;">Y</mark>)</td><td>string</td><td></td><td>벤더 식별자(단, 광고 추적 미동의로 idfa를 전달할 수 없는 경우 idfv 값을 필수로 전달해야 한다)</td></tr><tr><td>network</td><td>N</td><td>string</td><td>""</td><td>네트워크 (mobile or wifi)</td></tr><tr><td>carrier</td><td>N</td><td>string</td><td>""</td><td>통신사</td></tr><tr><td>model</td><td>N</td><td>string</td><td>""</td><td>모델명</td></tr><tr><td>manufacturer</td><td>N</td><td>string</td><td>""</td><td>제조사</td></tr><tr><td>os_version</td><td>N</td><td>string</td><td>"0"</td><td>플랫폼 OS 버전</td></tr><tr><td>skip_mediation</td><td>N</td><td>boolean</td><td>false</td><td>미디에이션 광고 skip 여부<br>(true 전달시, 기본 설정 광고 노출)</td></tr></tbody></table>

단, script의 idfa 매크로 값에는 IDFA를 치환하여 전달해 주시면 됩니다.

IDFA를 가져오는 방법은 아래의 링크를 참고해 주시기 바랍니다.

{% hint style="info" %}
광고 ID 가져오기[https://app.gitbook.com/o/Wbl9N95bxJ97LxKz90xs/s/qmkw7pJLtjFGD5fwChbN/\~/changes/48/ios/undefined#id-1-idfa](/ssp-sdk/sdk/ios/ios-2.x.x/undefined.md#id-1-idfa)
{% endhint %}

### 4) 클릭 발생 시 리워드 지급

<mark style="color:red;">`WKNavigationDelegate. WKUIDelegate`</mark> 델리게이트를 설정하여, 클릭 동작을 체크하고 리워드를 지급합니다.

{% code title="Objective-C" %}

```objectivec
#pragma mark WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    NSString *requestString = navigationAction.request.URL.absoluteString;
    if(navigationAction.navigationType == WKNavigationTypeLinkActivated)
    {
        decisionHandler(WKNavigationActionPolicyCancel);
        NSURL *requestURL = [NSURL URLWithString:requestString];
        if(@available(iOS 10, *))
        {
	// RCPC 리워드 지급 or 이미 지급 된 경우 바로 랜딩
            [[UIApplication sharedApplication] openURL:requestURL options:@{} completionHandler:^(BOOL success) {
                if (success) {
                    [_webView stopLoading];
                }
            }];
        }
        else
        {
            [[UIApplication sharedApplication] openURL:requestURL];
            [_webView stopLoading];
        }
        return;
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}

#pragma mark WKUIDelegate
- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
    NSString *requestString = navigationAction.request.URL.absoluteString;
    if(navigationAction.navigationType == WKNavigationTypeLinkActivated ||
       navigationAction.navigationType == WKNavigationTypeOther)
    {
        NSURL *requestURL = [NSURL URLWithString:requestString];
	// RCPC 리워드 지급 or 이미 지급 된 경우 바로 랜딩
        if(@available(iOS 10, *))
        {
            [[UIApplication sharedApplication] openURL:requestURL options:@{} completionHandler:^(BOOL success) {
                if (success) {
                    [_webView stopLoading];
                }
            }];
        }
        else
        {
            [[UIApplication sharedApplication] openURL:requestURL];
            [_webView stopLoading];
        }
    }
    return nil;
}
```

{% endcode %}
