# iOS の詳細設定

> ユーザー・セグメント、カスタム・パラメータ、価格帯など、iOSの詳細設定を構成して、広告の配信とMonetizationを最適化します。

## セグメントの定義##define-segments

特定のオーディエンスに合わせて広告の配信方法をカスタマイズできるようになりました。ユーザーの詳細をサーバーに通知して、ユーザーが属するセグメントに応じてSDKが広告を配信するようにする必要があります。

LevelPlay プラットフォームは、データをサーバーに送信してユーザーセグメントのアウトラインを作成する 3 つの方法をサポートしています。

* **カスタムセグメント**: ユーザーの詳細をサーバーに伝えることなく、定義済みの条件でカスタムセグメントを作成し、LevelPlay プラットフォームでそのユーザーセグメントの広告設定を調整できます。
* **ユーザープロパティ**: SDKによって収集されないユーザーデータ(例えば、レベル、支払い状態、作成日など)は、APIを介してリレーする必要があります。（サポートされているセグメント プロパティの全リストと以下のセクションの説明を参照してください）。指示に従ってこれらの詳細を送信し、LevelPlay プラットフォームで定義したセグメントに関連する広告設定を SDK が適用できるようにします。
* **デバイスプロパティ**: LevelPlay SDK は、デバイスモデル、デバイス製造元、アプリケーションバージョン、OS など、ユーザーのデバイスに関連する特定の標準パラメータを自動的に収集します。このデータを当社に送信する必要はありません

**LPMSegment** API を使用して、セッション中にセグメント化を変更できます。これは次にロードされる広告に影響し、各広告単位をロードする前に呼び出すことでウォーターフォールに動的に影響します。LevelPlay のセグメント化の詳細については、[こちら](/grow/levelplay/platform/settings/segments.md)を参照してください。

### Pass ユーザープロパティ##pass-user-properties

LevelPlay プラットフォームでセグメントを定義したら、サーバーにユーザーの詳細情報を通知する必要があります。LevelPlay には、API でユーザーをセグメントにアトリビュートするように設定できる、範囲な標準ユーザープロパティが用意されています。

まず、セグメントを初期化します。

1. **Objective-C**

   ```objective-c
   LPMSegment *セグメント = [[LPMSegment alloc]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
      // ユーザーレベルの設定
      [segment setLevel:USER_LEVEL];
      // ユーザーの支払い状態の設定
      [セグメント setPaying:ユーザー_支払い];
      // ユーザーの合計アプリ内課金履歴の設定
      [segment setIapTotal:YOUR_IAP_TOTAL];
      // ユーザー作成日の設定
      [segment 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
      [segment setCustomValue:YOUR_CUSTOM_VALUE forKey:YOUR_CUSTOM_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

| **セグメントプロパティ**   | **型**                    | **制限**                                                     | **説明**                                                                         |
| ---------------- | ------------------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------ |
| segmentName      | String                   | - 英数字 - 最大 32 文字                                           | LevelPlay アカウントのセグメントの指定された名前                                                  |
| 支払い              | Boolean                  | Yes または No                                                 | - ユーザーがアプリケーション内課金にお金を使ったことがない場合は true - ユーザーがアプリケーション内課金にお金を使ったことがない場合は false |
| iap\_total       | ダブル                      | 1-999999.99                                                | ユーザーがアプリケーション内課金に費やした金額の合計                                                     |
| userCreationDate | NSDate                   | 0 より小さい値にすることはできません                                        | ユーザーがアプリケーションをインストールした日付                                                       |
| カスタムパラメーター       | key=string, value=string | - LevelPlay は、最大 5 つのカスタムパラメーター (英数字 - 最大 32 文字) をサポートします。 | サーバにディスパッチする追加データ                                                              |

### ユーザーのセグメント名の取得##obtainthe-user's-segment-name

1. クラスでこのインターフェースを使用して、セグメント名プロトコルに準拠し、セグメント名`LPMSegmentDelegate`の受信を有効にします。

2. 以下のデリゲートに登録して、ユーザーが属するセグメント名を取得します。その後、SDKはデリゲートにイベントを通知します。

   1. **Objective-C**

      ```objective-c
      [LevelPlay setSegmentDelegate:self];
      ```

   2. **Swift**

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

   デリゲートコールバックの実装:例を次に示します。

   1. **Objective-C**

      ```objective-c
      - (void)didReceiveSegment:(NSString *)segment;
      ```

   2. **Swift**

      ```swift
      func didReceiveSegment(_ segment:文字列!)
      ```

## リワードサーバーからサーバーへのコールバックのカスタムパラメーター##custom-parameters-for-rewarded-server-to-server-callbacks

LevelPlay 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

フロア設定 API では、特定の広告単位に下限を設定できます。ユーザーごとに最低価格を設定することで、ターゲティングの効率を高め、待ち時間を削減し、広告パフォーマンスを最適化できます。価格下限は広告オブジェクトの作成時に割り当てる必要があり、そのオブジェクトのその後のすべてのロードに適用されます。

> **Note:**
>
> この特徴の最小 SDK バージョンは 8.9.0 です。

| プロパティ | 型      | 説明                                      |
| ----- | ------ | --------------------------------------- |
| 入札フロア | double | 従来のインスタンスと入札者に適用される最小 eCPM を定義する米ドルの価格。 |

### インタースティシャル広告の例##interstitial-ads-example

1. **Objective-C**

   ```objective-c
   // 価格下限設定の定義
   LPMInterstitialAdConfig *adConfig = [[LPMInterstitialAdConfigBuilder new] setBidFloor:1.23] ビルド]; // 米ドルで最低価格を設定
   // 設定をインタースティシャル広告単位に適用
   LPMInterstitialAd *interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
   ```

2. **Swift**

   ```swift
   // 価格下限設定の定義
   let adConfig = LPMInterstitialAdConfigBuilder()
       .set(bidFloor:1.23) // 米ドルでの価格下限の設定
       .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 new] setBidFloor:1.23] ビルド]; // 米ドルで下限価格を設定
   // リワード型広告単位に設定を適用
   LPMRewardedAd *rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
   ```

2. **Swift**

   ```swift
   // 価格下限設定の定義
   let adConfig = LPMRewardedAdConfigBuilder()
       .set(bidFloor:1.23) // 米ドルでの価格下限の設定
       .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 new] setBidFloor:1.23] ビルド]; // 米ドルで下限価格を設定
   // バナー広告単位に設定を適用
   LPMBannerAdView *bannerAd = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId" config:adConfig];
   ```

2. **Swift**

   ```swift
   // 価格下限設定の定義
   let adConfig = LPMBannerAdViewConfigBuilder()
       .set(bidFloor:1.23) // 米ドルでの価格下限の設定
       .build()
   // バナー広告単位に設定を適用
   let bannerAd = LPMBannerAdView(adUnitId: "adUnitId", config: adConfig)
   ```

バナー広告の完全な実装は[、こちら](/grow/levelplay/sdk/ios/banner-integration.md)で利用できます。

## LevelPlay SDK のエラーコード##levelplay-sdk-error-codes

LevelPlay は、SDK インテグレーションで障害が発生した場合に説明を提供するエラーフィードバックメカニズムを提供します。これらのエラーは、問題が発生したときやインテグレーションのアスペクトが正しく完了しなかったときに発生します。

LevelPlay Error オブジェクトには、**エラー コード**と**メッセージ**が含まれます。以下は、考えられるすべてのエラーと、その機能に基づくメッセージです。

| エラーコード | 広告ユニット                | 説明                                                                                                             |
| ------ | --------------------- | -------------------------------------------------------------------------------------------------------------- |
| 508    | N/A                   | * メディエーション/ネットワークの初期化失敗
* Demand Only API を非 Demand Only モードで呼び出す
* Demand Only モードで Demand Only 以外の API を呼び出す |
| 509    | インタースティシャル、動画リワード     | **Show Fail**:No ads to show                                                                                   |
| 510    | インタースティシャル、動画リワード、バナー | **ロード失敗**:サーバー反応失敗                                                                                             |
| 520    | インタースティシャル、動画リワード     | **Show Fail**:インターネット接続なし。TrackNetworkState が有効になっている必要があります。&#xA;**Show Fail**:インターネット接続なし                    |
| 524    | インタースティシャル、動画リワード     | **Show Fail**:配置%@ はペースごとに定義された制限に達しました&#xA;**Show Fail**:配置%@ が制限に達しました                                       |
| 526    | インタースティシャル、動画リワード     | **Show Fail**:広告単位がセッションあたりの 1 日の上限に達しました                                                                      |
| 604    | バナー                   | 配置に上限があるためロードできません                                                                                             |
| 605    | バナー                   | バナーのロード中に予期しない例外が発生しました                                                                                        |
| 606    | バナー                   | 最初のロード時にすべてのネットワークでバナーが埋められない                                                                                  |
| 1007   | インタースティシャル、動画リワード     | **オークション失敗**:オークションリクエストに必要な情報がすべて含まれていませんでした                                                                  |
| 1022   | 動画リワード                | **Show Fail**:別の RV が表示されている間は RV を表示できない                                                                      |
| 1023   | 動画リワード                | **Show Fail**:Show RV called when there are no available ads to show                                           |
| 1035   | インタースティシャル            | **Empty Waterfall**                                                                                            |
| 1036   | インタースティシャル            | **Show Fail**:別のインタースティシャルが表示されている間はインタースティシャルを表示できない                                                          |
| 1037   | インタースティシャル            | **ロード失敗**:別のインタースティシャルが表示されている間はインタースティシャルをロードできません                                                            |
| 1039   | インタースティシャル            | show interstitial                                                                                              |
