# iOS용 고급 설정

> 사용자 세그먼트, 커스텀텀 파라미터, 단가 등 iOS용 고급 설정을 설정 광고 게재와 수익화 최적화합니다.

## 세그먼트 정의##define-segments

이제 특정 잠재 고객에 맞게 광고를 게재하는 방법을 커스터마이즈 수 있습니다. 사용자 속한 세그먼트 따라 광고를 게재할 수 있도록 SDK에 사용자 세부 정보를 서버에 알려야 합니다.

레벨플레이 플랫폼은 서버에 데이터를 전달하는 다음 세 가지 메서드를 지원하여 사용자 세그먼트 설명합니다.

* **커스텀 세그먼트**: 사용자 세부 정보를 서버로 전달하지 않고도 사전 정의된 조건으로 커스텀 세그먼트를 생성하고 레벨플레이 플랫폼에서 해당 사용자 세그먼트에 맞춤형 광고 설정을 구성할 수 있습니다.
* **사용자 속성**: SDK에서 수집하지 않는 사용자 데이터(예: 수준, 결제 상태 또는 생성 날짜)는 API를 통해 전달되어야 합니다. (다음 섹션 지원되는 세그먼트 프로퍼티의 전체 목록과 설명을 참조하십시오.) 이 지침에 따라 SDK가 레벨플레이 플랫폼에서 정의한 세그먼트에 관련 광고 설정을 적용할 수 있도록 이 세부 정보를 전송합니다.
* **기기 속성**: 레벨플레이 SDK는 기기 모델, 기기 제조사, 앱 버전, OS와 같은 사용자의 기기에 관련된 특정 표준 파라미터를 자동으로 수집합니다. 이 데이터를 전달할 필요가 없습니다.

세션 중에 **LPMSegment** API를 사용하여 세분화를 변경할 수 있습니다. 이는 다음 로드된 광고에 영향을 미치며 각 광고 유닛을 로드하기 전에 호출되어 워터폴에 동적으로 영향을 미칠 수 있습니다. 레벨플레이 세분화에 대한 자세한 내용은 [여기](/grow/levelplay/platform/settings/segments.md)에서 확인할 수 있습니다.

### 사용자 프로퍼티 전달##pass-user-properties

레벨플레이 플랫폼에서 세그먼트를 정의한 후 서버에 사용자 세부 정보를 알려야 합니다. 레벨플레이 API 세그먼트 사용자 속성 위해 설정할 수 있는 다양한 표준 사용자 프로퍼티를 제공합니다.

먼저 세그먼트 초기화합니다.

1. **Objective-C**

   ```objective-c
   LPMS 세그먼트 *세그먼트 = [[LPMS 세그먼트 할당]init];
   ```

2. **Swift**

   ```swift
   let 세그먼트: LPMSegment = LPMSegment()
   ```

세그먼트를 지지대 어떤 프로퍼티를 서버에 보낼지 정의합니다. 다음 방법 중 **하나**를 통해 이 정보를 전송할 수 있습니다.

1. 사용자 속한 세그먼트 익숙하다면 세그먼트 이름을 입력합니다.

   1. **Objective-C**

      ```objective-c
      [segment setSegmentName:YOUR_SEGMENT_NAME];
      ```

   2. **Swift**

      ```swift
      segment.segmentName = "YOUR_SEGMENT_NAME"
      ```

2. 사용자 세부 정보를 보내주십시오. 설명은 아래 표를 참조하십시오.

   1. **Objective-C**

      ```objective-c
      // 사용자 레벨 설정
      [세그먼트 setLevel:USER_LEVEL];
      // 사용자 유료 상태 설정
      [세그먼트 setPaying:USER_PAYING];
      // 사용자 총 인앱 구매 이력 설정
      [세그먼트 setIapTotal:YOUR_IAP_TOTAL];
      // 사용자 생성 날짜 설정
      [세그먼트 setUserCreationDate:YOUR_DATE];
      ```

   2. **Swift**

      ```swift
      // 사용자 총 인앱 구매를 설정합니다.
      segment.iapTotal = USER_IAP_TOTAL
      // 사용자 레벨 설정
      segment.level = USER_LEVEL
      // 사용자 유료 상태 설정
      segment.paying = USER_PAYING_STATUS
      // 사용자 생성 날짜 설정
      segment.userCreationDate = NSDate() as Date!
      ```

   또한 세그먼트 최대 5개의 커스텀 사용자 프로퍼티를 설정할 수 있습니다.

   1. **Objective-C**

      ```objective-c
      [세그먼트 setCustomValue:YOUR_CUSTOM_VALUE forKey:YOUR_ 커스텀_KEY];
      ```

   2. **Swift**

      ```swift
      segment.setCustomValue("CUSTOM_VALUE", forKey: "CUSTOM_KEY")
      ```

   다음으로, 세그먼트를 기반으로 광고 유닛을 게재하려면 다음 함수 세그먼트 이름 또는 사용자 프로퍼티로 완성하여 호출.

   1. **Objective-C**

      ```objective-c
      [LevelPlay setSegment:YOUR_SEGMENT];
      ```

   2. **Swift**

      ```swift
      LevelPlay.setSegment(YOUR_SEGMENT);
      ```

### 지원되는 세그먼트 프로퍼티##supported-segment-properties

| **세그먼트 속성**      | **Type**                 | **제한**                                        | **설명**                                                        |
| ---------------- | ------------------------ | --------------------------------------------- | ------------------------------------------------------------- |
| segmentName      | 문자열                      | - 영숫자 - 최대 32자                                | 레벨플레이 계정에 있는 세그먼트 특정 이름입니다.                                   |
| 지급               | 부울                       | 예 또는 아니요                                      | - 사용자 인앱 구매에 비용을 지출한 경우 true, 사용자 인앱 구매에 비용을 지출하지 않은 경우 false |
| iap\_total       | 더블                       | 1-999999.99                                   | 사용자 인앱 구매에 지출한 총 금액입니다.                                       |
| userCreationDate | NSDate                   | 0보다 작을 수 없음                                   | 사용자 앱을 설치한 날짜                                                 |
| 커스텀 파라미터         | key=string, value=string | - 레벨플레이 최대 5개의 커스텀 파라미터 - 영숫자 - 최대 32개의 문자 지원 | 서버에 디스패치 추가 데이터                                               |

### 사용자 세그먼트 이름 얻기##obtainthe-user's-segment-name

1. 세그먼트 이름 프로토콜을 준수하도록 클래스에서 이 인터페이스를 채택하고 세그먼트 이름 `LPMSegmentDelegate` 수신을 활성화합니다.

2. 다음 델리게이트에 등록하여 사용자 속한 세그먼트 이름을 받으십시오. 그러면 SDK가 델리게이트에게 이벤트 알립니다.

   1. **Objective-C**

      ```objective-c
      [레벨플레이 setSegmentDelegate:자체];
      ```

   2. **Swift**

      ```swift
      LevelPlay.setSegmentDelegate(self)
      ```

   델리게이트 콜백 구현합니다. 예제는 아래와 같습니다.

   1. **Objective-C**

      ```objective-c
      - (void)didReceiveSegment:(NSString *) 세그먼트;
      ```

   2. **Swift**

      ```swift
      func didReceiveSegment(_ 세그먼트: 문자열!)
      ```

## 보상형 광고 서버 간 콜백에 대한 커스텀 파라미터##custom-parameters-for-rewarded-server-to-server-callbacks

레벨플레이 SDK 8.11.0부터 S2S(서버 간) 콜백으로 서버로 전송되는 보상형 광고 광고 유닛에 대한 커스텀 파라미터를 전달 수 있습니다. 키 `LevelPlay_Rewarded_Server_Params`와 JSON 문자열 값으로 `setMetaData`를 사용하여 파라미터를 설정합니다.

* 커스텀 파라미터는 **서버 간** 완료 콜백과 함께만 작동합니다. 파라미터는 콜백 일부로 수신됩니다.
* 두 개 이상의 커스텀 파라미터 삽입할 수 있습니다.

**예:**

1. **Objective-C**

   ```objective-c
   NSDictionary *params = @{ @"key1": @"value1", @"key2": @"value2" };
   NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:nil];
   NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
   [LevelPlay setMetaDataWithKey:@"LevelPlay_Rewarded_Server_Params" value:jsonString];
   ```

2. **Swift**

   ```swift
   let params = ["key1": "value1", "key2": "value2"]
   if let jsonData = try? JSONSerialization.data(withJSONObject: params),
      let jsonString = String(data: jsonData, encoding: .utf8) {
       LevelPlay.setMetaData(withKey: "LevelPlay_Rewarded_Server_Params", value: jsonString)
   }
   ```

## 가격 단계 설정##price-floor-configuration

Floor 설정 API 사용하면 특정 광고 유닛의 단가를 설정할 수 있습니다. 사용자 가격 한도를 설정하면 타게팅 효율성을 높이고 지연 줄이고 광고 성과를 최적화할 수 있습니다. 광고 오브젝트 생성할 때 단가를 할당해야 하며, 해당 오브젝트 모든 후속 로드에 적용됩니다.

> **Note:**
>
> 이 기능의 최소 SDK 버전은 8.9.0입니다.

| 프로퍼티 | Type   | 설명                                             |
| ---- | ------ | ---------------------------------------------- |
| 단가   | double | 기존 인스턴스와 입찰자에 적용되는 최소 eCPM을 정의하는 USD 기준 가격입니다. |

### 인터스티셜 광고 예시##interstitial-ads-example

1. **Objective-C**

   ```objective-c
   // 가격 한도 설정 정의
   LPMInterstitialAdConfig *adConfig = [[[LPMInterstitialAdConfigBuilder 새로운] setBidFloor:1.23] 빌드]; // USD 단위로 가격 한도 설정
   // 인터스티셜 광고 광고 유닛에 설정 적용합니다.
   LPMInterstitialAd *interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
   ```

2. **Swift**

   ```swift
   // 가격 한도 설정 정의
   let adConfig = LPMInterstitialAdConfigBuilder()
       .set(bidFloor: 1.23) // USD 기준 가격 한도 설정
       .build()
   // 인터스티셜 광고 광고 유닛에 설정 적용합니다.
   let interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId", config: adConfig)
   ```

전체 인터스티셜 광고 구현은 [여기](/grow/levelplay/sdk/ios/interstitial-integration.md)에서 사용할 수 있습니다.

### 보상형 광고 예시##rewarded-ads-example

1. **Objective-C**

   ```objective-c
   // 가격 한도 설정 정의
   LPMRewardedAdConfig *adConfig = [[[LPMRewardedAdConfigBuilder 새로운] setBidFloor:1.23] 빌드]; // USD 기준 가격 한도 설정
   // 보상형 광고 유닛에 설정 적용
   LPMRewardedAd *rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
   ```

2. **Swift**

   ```swift
   // 가격 한도 설정 정의
   let adConfig = LPMRewardedAdConfigBuilder()
       .set(bidFloor: 1.23) // USD 기준 가격 한도 설정
       .build()
   // 보상형 광고 유닛에 설정 적용
   let rewardedAd = LPMRewardedAd(adUnitId: "adUnitId", config: adConfig)
   ```

전체 보상형 광고 구현은 [여기](/grow/levelplay/sdk/ios/rewarded-ads-integration.md)에서 사용할 수 있습니다.

### 배너 광고 예시##banner-ads-example

1. **Objective-C**

   ```objective-c
   // 가격 한도 설정 정의
   LPMBannerAdViewConfig *adConfig = [[[LPMBannerAdViewConfigBuilder 새로운] setBidFloor:1.23] 빌드]; // USD 단위로 가격 한도 설정
   // 배너 광고 유닛에 설정 적용
   LPMBannerAdView *bannerAd = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
   ```

2. **Swift**

   ```swift
   // 가격 한도 설정 정의
   let adConfig = LPMBannerAdViewConfigBuilder()
       .set(bidFloor: 1.23) // USD 기준 가격 한도 설정
       .build()
   // 배너 광고 유닛에 설정 적용
   let bannerAd = LPMBannerAdView(adUnitId: "adUnitId", config: adConfig)
   ```

전체 배너 광고 구현은 [여기](/grow/levelplay/sdk/ios/banner-integration.md)에서 사용할 수 있습니다.

## 레벨플레이 SDK 오류 코드##levelplay-sdk-error-codes

레벨플레이 SDK 연동의 실패에 대한 설명을 제공하는 오류 피드백 메커니즘을 제공합니다. 무언가 잘못되었거나 연동의 한 부분이 올바르게 완료되지 않은 경우 이러한 오류가 표시됩니다.

레벨플레이 오류 오브젝트에는 **오류 코드**와 **메시지가** 있습니다. 다음은 가능한 모든 오류와 함수에 따라 해당 메시지.

| 오류 코드 | 광고 단위                 | 설명                                                                                               |
| ----- | --------------------- | ------------------------------------------------------------------------------------------------ |
| 508   | 해당 없음                 | * Mediation/네트워크의 초기 실패
* Demand Only 모드가 아닌 API 호출
* Demand Only 모드에서 비요청 전용 API 호출             |
| 509   | 인터스티셜 광고, 보상형 동영상     | **Show Fail**: 표시할 광고가 없습니다                                                                      |
| 510   | 인터스티셜 광고, 보상형 비디오, 배너 | **로드 실패**: 서버 응답 실패                                                                              |
| 520   | 인터스티셜 광고, 보상형 동영상     | **Show Fail**: 인터넷 연결 없음. ShouldTrackNetworkState가 활성화되어 있고, 사용 가능한&#xA;**Show Fail**: 인터넷 연결 없음 |
| 524   | 인터스티셜 광고, 보상형 동영상     | **Show Fail**: %@ 플레이스먼트가 속도별로 정의된 한도에 도달했습니다.&#xA;**Show Fail**: 플레이스먼트 %@가 한도에 도달했습니다.         |
| 526   | 인터스티셜 광고, 보상형 동영상     | **Show Fail**: 광고 유닛이 세션당 일일 한도에 도달했습니다                                                          |
| 604   | Banner                | 로드할 수 없습니다                                                                                       |
| 605   | 배너                    | 예기치 않은 예외                                                                                        |
| 606   | Banner                | 첫 번째 로드 시 모든 네트워크에 배너 채우지 않음                                                                     |
| 1007  | 인터스티셜 광고, 보상형 동영상     | **경매 실패**: 경매 요청에 필요한 모든 정보가 포함되지 않았습니다                                                          |
| 1022  | 보상형 비디오               | **Show Fail**: 다른 RV가 표시되는 동안 RV를 표시할 수 없습니다                                                     |
| 1023  | 보상형 비디오               | **Show Fail**: 표시할 수 있는 광고가 없을 때 호출되는 RV 표시                                                      |
| 1035  | 인터스티셜 광고              | **빈 폭포**                                                                                         |
| 1036  | 인터스티셜 광고              | **Show Fail**: 다른 인터스티셜 광고가 표시되는 동안 인터스티셜 광고를 표시할 수 없습니다                                         |
| 1037  | 인터스티셜 광고              | **로드 실패**: 다른 인터스티셜 광고가 표시되는 동안 인터스티셜 광고를 로드할 수 없습니다                                             |
| 1039  | 인터스티셜 광고              | 호출하는 동안 인터스티셜 광고                                                                                 |
