> 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-3.1.0+/undefined.md).

# 기본설정

## SDK 설치 방법

{% content-ref url="/pages/lc6Ls5WNRpGB85I0fVlt" %}
[CocoaPod 설치](/ssp-sdk/sdk/ios/ios-3.1.0+/undefined/cocoapod.md)
{% endcontent-ref %}

{% content-ref url="/pages/Bfi9zJfHz2OL6gVo18ED" %}
[SPM 설치](/ssp-sdk/sdk/ios/ios-3.1.0+/undefined/spm.md)
{% endcontent-ref %}

***

## 프레임워크 Import

> APSSPSDK는 순수 Swift로 작성되었으며, Objective-C에서도 사용 가능합니다.

{% tabs %}
{% tab title="Swift" %}

```swift
import APSSPSDK
```

{% endtab %}

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

```objc
@import APSSPSDK;
```

{% endtab %}
{% endtabs %}

***

## IDFA 설정

IDFA(Identifier for Advertisers)는 Apple이 iOS 기기에 부여하는 광고 식별자입니다. \
사용자 맞춤형 광고를 제공하고 광고 성과를 측정하기 위해 사용됩니다.

AdSupport Framework를 Dependencies에 추가합니다.

{% hint style="danger" %}
AdSupport Framework가 추가되지 않으면 애드팝콘 SSP 서비스가 정상 동작하지 않습니다.
{% endhint %}

***

## iOS 14+ IDFA 사용 동의 설정 (ATT)

iOS 14부터 앱이 IDFA에 접근하려면 사용자에게 명시적으로 <mark style="color:red;">**추적 허용을 요청**</mark>해야 합니다. \
App Tracking Transparency(ATT) framework를 Dependencies에 추가하고, `Info.plist`에 `NSUserTrackingUsageDescription` 키를 추가합니다.

```xml
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>
```

<figure><img src="/files/BSCUShxq0jrt9aiOKyju" alt=""><figcaption><p>This identifier will be used to deliver personalized ads to you.</p></figcaption></figure>

{% tabs %}
{% tab title="Swift" %}

```swift
import AppTrackingTransparency
import AdSupport

func requestIDFA() {
    ATTrackingManager.requestTrackingAuthorization { status in
        // 승인 여부 결과를 받은 후, 광고 로드를 시작합니다.
    }
}
```

{% endtab %}

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

```objc
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>

- (void)requestIDFA {
    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
        // 승인 여부 결과를 받은 후, 광고 로드를 시작합니다.
    }];
}
```

{% endtab %}
{% endtabs %}

***

## 통합 SDK 초기화

{% hint style="info" %}
Swift SDK는 **통합 초기화**를 지원합니다.\
&#x20;`APSSPAds.initializeSDK(with:completion:)` 호출 시 서버에서 내려온 키 정보를 기반으로 설치된 미디에이션 네트워크 SDK를 자동 초기화합니다.
{% endhint %}

`APSSPInitializationSettings` 객체를 생성하여 `initializeSDK`를 호출합니다.

{% tabs %}
{% tab title="Swift" %}

```swift
import APSSPSDK

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        let settings = APSSPInitializationSettings(appKey: "YOUR_APP_KEY")
        settings.logType = .all
        // settings.adInspectorEnabled = true

        APSSPAds.initializeSDK(with: settings) {
            // 초기화 완료 후 광고 요청을 시작합니다.
        }

        return true
    }
}
```

{% endtab %}

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

```objc
@import APSSPSDK;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    APSSPInitializationSettings *settings = [[APSSPInitializationSettings alloc] initWithAppKey:@"YOUR_APP_KEY"];
    settings.logType = APSSPLogTypeAll;
    // settings.adInspectorEnabled = YES;
    // settings.mediationProvider = APSSPMediationProviderAdPopcornSSP;

    [APSSPAds initializeSDKWith:settings completion:^{
        // 초기화 완료 후 광고 요청을 시작합니다.
    }];

    return YES;
}

@end
```

{% endtab %}
{% endtabs %}

### APSSPInitializationSettings 프로퍼티

<table><thead><tr><th width="193.43658447265625">프로퍼티</th><th width="214.5565185546875">타입</th><th width="139.12158203125">기본값</th><th>설명</th></tr></thead><tbody><tr><td><code>appKey</code></td><td>String</td><td>(필수)</td><td>발급받은 앱 키</td></tr><tr><td><code>mediationProvider</code></td><td>APSSPMediationProvider</td><td>.adPopcornSSP</td><td>광고 중개 방식</td></tr><tr><td><code>logType</code></td><td>APSSPLogType</td><td>.none</td><td>로그 레벨</td></tr><tr><td><code>adInspectorEnabled</code></td><td>Bool</td><td>false</td><td>광고 검사기 활성화</td></tr><tr><td><code>tagForChildDirectedTreatment</code></td><td>Bool</td><td>false</td><td>COPPA 아동 대상 설정</td></tr></tbody></table>

### APSSPLogType

SDK 내부 로그 출력 레벨을 설정합니다.

<table><thead><tr><th width="122.6197509765625">Swift</th><th width="269.1136474609375">Objective-C</th><th>설명</th></tr></thead><tbody><tr><td><code>.all</code></td><td><code>APSSPLogTypeAll</code></td><td>모든 로그 출력 (네트워크 + 정보 + 에러)</td></tr><tr><td><code>.network</code></td><td><code>APSSPLogTypeNetwork</code></td><td>네트워크 요청/응답 로그만 출력</td></tr><tr><td><code>.info</code></td><td><code>APSSPLogTypeInfo</code></td><td>정보성 로그 출력</td></tr><tr><td><code>.error</code></td><td><code>APSSPLogTypeError</code></td><td>에러 로그만 출력</td></tr><tr><td><code>.none</code></td><td><code>APSSPLogTypeNone</code></td><td>로그 출력 안 함 (기본값)</td></tr></tbody></table>

{% hint style="info" %}
개발/디버깅 시에는 `.all`로 설정하고, 릴리즈 빌드에서는 `.none`으로 설정하는 것을 권장합니다.
{% endhint %}

## UID 2.0 설정

UID 2.0(Unified ID 2.0)은 쿠키 없이도 광고 타겟팅을 가능하게 하는 오픈소스 식별 프레임워크입니다. 이메일 또는 전화번호를 해시화하여 개인정보를 보호하면서도 광고 매칭을 수행합니다.

쿠팡 DSP로부터 높은 단가의 광고를 제공받기 위해 UID 2.0 설정을 진행합니다.

{% tabs %}
{% tab title="Swift" %}

```swift
// identityType: 0 = Email, 1 = PhoneNumber
APSSPAds.setUIDIdentifier(identityType: 0, identifier: "test_uid@adpopcorn.com")
```

{% endtab %}

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

```objc
// identityType: 0 = Email, 1 = PhoneNumber
[APSSPAds setUIDIdentifierWithIdentityType:0 identifier:@"test_uid@adpopcorn.com"];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
UID 2.0 설정은 선택사항이지만, 설정 시 쿠팡 DSP 등에서 더 높은 단가의 광고를 받을 수 있습니다.
{% endhint %}

***

## 유저 식별값 설정

리워드 비디오 / 비디오 믹스 시청 완료 시 유저를 식별하기 위해 사용됩니다.

{% tabs %}
{% tab title="Swift" %}

```swift
APSSPAds.setUSerID(usn: "TEST_USN")
```

{% endtab %}

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

```objc
[APSSPAds setUSerIDWithUsn:@"TEST_USN"];
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**주의사항**

1. 1명의 유저는 1개의 고유한 유저식별값을 가져야 하며, 가변적인 값을 사용해서는 안 됩니다.
2. 개인정보(이메일, 이름, 전화번호 등)가 포함되어서는 안 됩니다.
3. 한글, 특수문자, 공백이 포함된 경우 반드시 URL 인코딩 처리를 해야 합니다.
   {% endhint %}

***

## GDPR 설정

EU의 GDPR (General Data protection Regulation) 법안에 대응하기 위해 아래 API를 추가 합니다.

GDPR 동의 여부 세팅을 위해 아래의 API가 추가 되었습니다. 기본 값은 <mark style="color:red;">**YES(true)**</mark> 이고 GDPR 동의가 필요한 유저에 한해 아래 API를 호출하시기 바랍니다.

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

```objectivec
[APSSPAds setGdprConsentAvailable:NO];
```

{% endtab %}

{% tab title="Swift" %}

```swift
APSSPAds.setGdprConsentAvailable(false)
```

{% endtab %}
{% endtabs %}

## COPPA 설정

COPPA(Children's Online Privacy Protection Act)는 미국의 아동 온라인 개인정보 보호법입니다. 13세 미만 아동을 대상으로 하는 앱의 경우, 이 설정을 활성화하면 아동에게 적합하지 않은 광고(행동 기반 타겟팅 광고 등)가 제한됩니다.

{% tabs %}
{% tab title="Swift" %}

```swift
APSSPAds.tagForChildDirectedTreatment(true)
```

{% endtab %}

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

```objc
[APSSPAds tagForChildDirectedTreatment:YES];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
아동 대상 앱이 아닌 경우 별도 설정이 필요 없습니다 (기본값: false).
{% endhint %}

* google families policy : <https://play.google.com/about/families/#!?zippy_activeEl=designed-for-families#designed-for-families>
* coppa : <https://www.ftc.gov/tips-advice/business-center/privacy-and-security/children's-privacy>

***

## 사용자 정보 설정 (선택)

{% tabs %}
{% tab title="Swift" %}

```swift
APSSPAds.setAge(25)
APSSPAds.setGender(.male)
```

{% endtab %}

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

```objc
[APSSPAds setAge:25];
[APSSPAds setGender:APSSPGenderMale];
```

{% endtab %}
{% endtabs %}

<table><thead><tr><th width="171.63458251953125">Swift</th><th>Objective-C</th><th>설명</th></tr></thead><tbody><tr><td><code>.female</code></td><td><code>APSSPGenderFemale</code></td><td>여성</td></tr><tr><td><code>.male</code></td><td><code>APSSPGenderMale</code></td><td>남성</td></tr><tr><td><code>.unknown</code></td><td><code>APSSPGenderUnknown</code></td><td>미설정</td></tr></tbody></table>

***

## CS 페이지 호출

리워드 비디오 관련 CS 접수 페이지를 노출합니다.

{% tabs %}
{% tab title="Swift" %}

```swift
APSSPAds.presentCSViewController(self, userID: "usn")
```

{% endtab %}

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

```objc
[APSSPAds presentCSViewController:self userID:@"usn"];
```

{% endtab %}
{% endtabs %}

***

## Ad Inspector (광고 검사기)

Ad Inspector는 광고 로드/노출 상태, 미디에이션 waterfall 순서, 에러 정보를 실시간으로 확인할 수 있는 디버깅 도구입니다. 활성화하면 화면에 플로팅 버튼이 표시되며, 탭하면 검사기 화면이 열립니다.

<div><figure><img src="/files/Deca5INRAjM5vvTqCJd5" alt="" width="188"><figcaption></figcaption></figure> <figure><img src="/files/kN6hBcQlB2emIwNtPzIS" alt="" width="188"><figcaption></figcaption></figure></div>

### 초기화 시 활성화

{% tabs %}
{% tab title="Swift" %}

```swift
let settings = APSSPInitializationSettings(appKey: "YOUR_APP_KEY")
settings.adInspectorEnabled = true
APSSPAds.initializeSDK(with: settings)
```

{% endtab %}

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

```objc
APSSPInitializationSettings *settings = [[APSSPInitializationSettings alloc] initWithAppKey:@"YOUR_APP_KEY"];
settings.adInspectorEnabled = YES;
[APSSPAds initializeSDKWith:settings completion:nil];
```

{% endtab %}
{% endtabs %}

### 런타임에 on/off

{% tabs %}
{% tab title="Swift" %}

```swift
APSSPAds.setAdInspectorEnabled(true)   // 활성화
APSSPAds.setAdInspectorEnabled(false)  // 비활성화
```

{% endtab %}

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

```objc
[APSSPAds setAdInspectorEnabled:YES];   // 활성화
[APSSPAds setAdInspectorEnabled:NO];    // 비활성화
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Ad Inspector는 개발/QA 단계에서만 사용하고, 릴리즈 빌드에서는 반드시 비활성화하세요.
{% endhint %}
