# iOS 14+ 대응

### SKAdNetwork 구성

* 사용자의 ATT 동의 여부와 무관하게, 애플에서 공식으로 제공하는 광고 캠페인의 성공을 측정하기 위한 목적으로 SKAdNetwork를 도입하였으며 SKAdNetwork를 사용하기 위해서는 iOS 앱 프로젝트에 있는 Info.plist 파일에 광고 식별자 목록 정보를 아래와 같이 추가합니다.

```xml
<key>SKAdNetworkItems</key>
<array>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>v72qych5uu.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>x8uqf25wch.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>k674qkevps.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>9t245vhmpl.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>2u9pt9hc89.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>22mmun2rn5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>hs6bdukanm.skadnetwork</string>
    </dict>
    
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>uw77j35x4d.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>32z4fx6l9h.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>8s468mfl3y.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>ln5gz23vtd.skadnetwork</string>
    </dict>    
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>5tjdwbrq8w.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>cstr6suwn9.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>4fzdc2evr5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>v9wttpbfk9.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>zq4921623r.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>pwa73g5rt2.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>7ug5zh24hu.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>ns5j362hk7.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>e5fvkxwrpn.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>mqn7fxpca7.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>5a6flpkh64.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>97r2b46745.skadnetwork</string>
    </dict>
</array>
```

### IDFA (Identifier for Advertisers)

* iOS 14.5 이전에는 '광고 추적 제한 (Limit Ad Tracking)'을 활성화하기 전에는 IDFA (Identifier for Advertisers) 값을 가져올 수 있습니다.
* iOS 14.5+ 부터는 사용자 권한 요청을 통해 사용을 허용한 경우에만 IDFA 값을 가져올 수 있습니다.
* 광고 수익이 줄어드는 것을 방지하려면 iOS 14+ 부터는 다음과 같이 변경해야 합니다.

### ATT (AppTrackingTransparency) 사용

* iOS 14.5 이상에서 IDFA 와 같은 식별자에 대한 액세스 및 사용에 대한 권한을 요청하려면 ATT (AppTrackingTransparency) 알림을 사용해야 합니다.
* 자세한 내용은 아래의 단계에 따라 진행해야 합니다.

#### Step 1:Info.plist 파일 적용 (권한 사용에 대한 설명 문구)

* `Info.plist` 파일에 `NSUserTrackingUsageDescription` 키와 권한 사용에 대한 동의를 구하는 메시지를 추가합니다.\
  &#x20;

  <figure><img src="https://raw.githubusercontent.com/wiki/gomfactory/AdPie-iOS-SDK/image/ios_sdk_att_setting.png" alt=""><figcaption></figcaption></figure>

(Example - English)

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

(Example - 한글)

```xml
<key>NSUserTrackingUsageDescription</key>
<string>개인 맞춤 광고를 게재하는 데 사용됩니다.</string>
```

#### Step 2:코드 수정 (권한 요청)

* 기존에 애드파이 SDK 초기화 하기 전에 ATT 알림을 통한 권한을 요청합니다.
* 권한 요청 관련 메소드로 [requestTrackingAuthorizationWithCompletionHandler:](https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorization) 호출을 사용합니다.
* 앞서 설명한 Info.plist 파일에 `NSUserTrackingUsageDescription` 키에 설명 문구를 추가하지 않으면 Crash가 발생하니 유의합니다.

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

```swift
import UIKit
import AdPieSDK
import AppTrackingTransparency

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, 
        didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    {
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {

        func initializeSDK() {
            AdPieSDK.sharedInstance().initWithMediaId("YOUR_MEDIA_ID")
        }
    
        if #available(iOS 14.5, *) {
            ATTrackingManager.requestTrackingAuthorization { _ in
                initializeSDK()
            }
        } else {
            initializeSDK()
        }
    }
}
```

{% endtab %}

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

```objectivec
// AppDelegate.m
#import "AppDelegate.h"
#import <AdPieSDK/AdPieSDK.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    if (@available(iOS 14.5, *)) {
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(_){
            [self initializeSDK];
        }];
    } else {
        [self initializeSDK];
    }
}

- (void)initializeSDK {
    [[AdPieSDK sharedInstance] initWithMediaId:@"YOUR_MEDIA_ID_HERE"];
}

@end
```

{% endtab %}
{% endtabs %}

#### 적용화면

| ![ATT 알림 샘플 (한글)](https://raw.githubusercontent.com/wiki/gomfactory/AdPie-iOS-SDK/image/ios_sdk_att_kor.png) | ![ATT 알림 샘플 (English)](https://raw.githubusercontent.com/wiki/gomfactory/AdPie-iOS-SDK/image/ios_sdk_att_eng.png) |
| ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
|                                                                                                              |                                                                                                                   |


---

# Agent Instructions: 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:

```
GET https://platform-business.gitbook.io/adpie/ios/ios14.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
