# Unity 的高级设置

> 为 Unity 配置高级设置，包括用户细分段、自定义参数和价格下限，以优化广告投放和 Monetization。

## 定义细分段##define-segments

您现在可以轻松定制广告服务方式以适应指定的受众！您需要将用户的详细信息告知我们的服务器，以便 SDK 知道根据用户所属的细分段提供广告服务。

LevelPlay SDK 支持三种方法将数据传输到服务器以概括用户细分段，即：

* **设备属性**：LevelPlay SDK 自动收集与用户设备相关的某些标准参数，例如设备模型、设备制造商、app 版本和操作系统。您无需将此数据传递给我们
* **用户属性**：SDK 未收集的用户数据（例如年龄、性别或创建日期）必须通过 API 进行中继。（请参阅受支持的细分段属性的完整列表以及下一部分中的描述）。按照说明向我们发送这些详细信息，以便我们的 SDK 可以将相关广告设置应用于您在 LevelPlay 平台上定义的细分段
* **自定义细分段**：您可以创建自定义细分段，而无需将用户详细信息传递给我们的服务器，并可为该用户细分段定制广告设置

> **Note:**
>
> \*\*动态细分：\*\*如果使用 LevelPlay SDK 7.2.0，可以使用 LevelPlaySegment API 在会话期间更改细分。这将影响下一个加载的广告，并可在加载每个广告单元之前调用，以动态影响瀑布流。您可以在[此处](/grow/levelplay/platform/settings/segments.md)了解有关 LevelPlay 细分的更多信息。

### 通道用户属性##pass-user-properties

在 LevelPlay 平台上定义细分段后，您需要将用户的详细信息告知我们的服务器。

定义要发送到服务器的属性（这些属性是细分段底部的基础）。您可以通过以下方法之**一**传输此信息：

1. 如果知道用户属于哪个细分段，请创建一个新细分段并设置其名称：

   ```cs
   var segment = new LevelPlaySegment();
   segment.SegmentName = "nameOfSegment";
   ```

2. 否则，向我们发送用户详细信息。LevelPlay 提供了一范围标准用户属性，您可以将其设置为将用户属性 API 中的细分段。向下滚动以查找受支持的用户细分段属性的表。

   ```cs
   var segment = new LevelPlaySegment();
   segment.Level = 5;
   segment.UserCreationDate = 1758100075134;
   segment.IapTotal = 100;
   segment.IsPaying = 1;
   ```

   您还可以为每个细分段设置最多 5 个自定义用户属性：

   ```cs
   var key = "key1";
   var val = "value1";

   var segment = new LevelPlaySegment();
   segment.SetCustom(key, val);
   ```

   最后，调用以下函数，将新创建的细分段传递给它：

   ```cs
   LevelPlay.SetSegment(segment);
   ```

### 支持的用户细分段属性##supported-user-segment-properties

| **细分段属性**        | **Type（类型）**            | **限制**                                | **描述**                                                          |
| ---------------- | ----------------------- | ------------------------------------- | --------------------------------------------------------------- |
| SegmentName      | 字符串                     | 最多 32 个字母数字                           | LevelPlay 帐户中细分段的给定名称                                           |
| IsPaying         | Int                     | 0 或 1                                 | 1 如果用户在 app 内购买上花费了任何资金 0 如果用户在 app 内购买上没有花费任何资金                |
| IapTotal         | 双倍                      | 1-999999.99                           | 用户在 app 内购买方面花费的总金额                                             |
| UserCreationDate | 长                       | 不能小于 0                                | 用户安装 app 的日期，例如 DateTimeOffset.UtcNow\.ToUnixTimeMilliseconds() |
| 自定义参数            | key=string、value=string | LevelPlay 最多支持 5 个自定义参数，字母数字最多 32 个字母 | 要发送到我们服务器的任何其他数据                                                |

## 奖励服务器到服务器回调的自定义参数##custom-parameters-for-rewarded-server-to-server-callbacks

LevelPlay 基于奖励的广告单位支持服务器端事件，以通知您在广告成功完成事件后必须授予用户的奖励。您可以在[此处](/grow/levelplay/platform/settings/server-to-server-callback.md)了解更多信息。

除了服务器参数之外，还可以通过客户端共享运行时自定义参数。要实现此目的，只需使用 setMetadata API 将自定义参数通道到 LevelPlay\_Rewarded\_Server\_Params。在整个会话中，可以多次更新自定义参数以覆盖以前的值。

要重置自定义参数，请将 LevelPlay\_Rewarded\_Server\_Params 设置为空数组。

### 实现代码示例##example-implementation-code

> **Note:**
>
> Min LevelPlay SDK 8.11.0

```cs
LevelPlay.SetMetaData("LevelPlay_Rewarded_Server_Params", new [] { "key1=value1", "key2=value2" });
```

然后，您将收到相应的回调，如下所示：

```text
http://www.mydomain.com/rewardsCallback?appUserId=[USER_ID]&rewards=[REWARDS]&eventId=[事件_ID]&itemName=[ITEM_NAME]&custom_key1=value1&custom_key2=value2
```

## 暂停游戏##pause-game

API SetPauseGame 作为 LevelPlay SDK 8.5.0 版的一部分引入 LevelPlay 类，仅适用于 iOS 应用程序。

将 PauseGame 状态设置为“true”时，所有 Unity 3D 游戏活动都将暂停（广告回调除外）。广告关闭后，游戏活动将自动恢复。

您应该在会话中调用一次 SetPauseGame API，在初始化 LevelPlay SDK 之前或之后，因为它会影响会话中的所有广告服务（多个 AdUnit API 的奖励视频和插页广告服务）。

```cs
LevelPlay.SetPauseGame(true);
```

您可以通过调用值为 false 的 SetPauseGame 来停用此会话中的功能：

```cs
LevelPlay.SetPauseGame(false);
```

对于旧版 LevelPlay SDK（从 7.2.4 到 8.4.0），请使用以下 API：

```cs
// Pause all game activities except ad callbacks. The game activity will be resumed automatically when the ad is closed
LevelPlay.SetPauseGame(true);

// Deactivate the functionality in this session
LevelPlay.SetPauseGame(false);
```

## 价格地面配置##price-floor-configuration

地面配置 API 允许您为指定的广告单元设置价格地面。通过为每个用户设置价格地面，可以提高定向投放效率、减少延迟并优化广告效果。

在创建广告对象时，必须分配价格地面，并应用于该对象的所有后续加载。

> **Note:**
>
> Min LevelPlay 软件包 8.9.0

| **属性** | **Type（类型）** | **描述**                         |
| ------ | ------------ | ------------------------------ |
| 投标地面   | 双精度          | 定义应用于传统实例和出价者的最小 eCPM 的价格（美元）。 |

### 插页式广告示例##interstitial-ads-example

```cs
// Define a price floor configuration
var adConfig = new LevelPlayInterstitialAd.Config.Builder()
   .SetBidFloor(1.23) // 以美元设置价格地面
   .Build()
// Apply the configuration to an interstitial ad unit
var interstitialAd = new LevelPlayInterstitialAd("adUnitId", adConfig);
```

[此处](/grow/levelplay/sdk/unity/interstitial-integration.md)提供了完整的插补实现。

### 奖励广告服务示例##rewarded-ads-example

```cs
// Define a price floor configuration
var adConfig = new LevelPlayRewardedAd.Config.Builder()
   .SetBidFloor(1.23) // 以美元设置价格地面
   .Build()
// Apply the configuration to a rewarded ad unit
var rewardedAd = new LevelPlayRewardedAd("adUnitId", adConfig);
```

[此处](/grow/levelplay/sdk/unity/rewarded-ad-integration-package.md)提供完整的奖励广告服务。

#### 横幅广告服务示例##banner-ads-example

```cs
// Define a price floor configuration
var adConfig = new LevelPlayBannerAd.Config.Builder()
   .SetBidFloor(1.23) // 以美元设置价格地面
   .Build();
// Apply the configuration to a banner ad unit
var bannerAd = new LevelPlayBannerAd("adUnitId", adConfig);

```

[此处](/grow/levelplay/sdk/unity/banner-integration.md)提供了完整的横幅广告服务。

## LevelPlay SDK 报错代码##levelplay-sdk-error-codes

LevelPlay 提供报错机制，用于解释 SDK 集成中的任何失败。当出现问题或集成的一个方面未正确完成时，您将收到这些错误。

LevelPlay 报错对象包含**报错代码**和**消息**。以下是所有可能的错误及其基于其函数的消息：

| 错误代码 | 广告单元         | 描述                                                                                         |
| ---- | ------------ | ------------------------------------------------------------------------------------------ |
| 508  | 不适用          | * 聚合/网络初始化失败
* 在非 Demand Only 模式下调用 Demand Only API
* 在 Demand Only 模式下调用非 Demand Only API |
| 509  | 插页式、奖励视频     | **显示失败**：无广告服务展示                                                                           |
| 510  | 插页式、奖励视频、横幅  | **加载失败**：服务器响应失败                                                                           |
| 520  | 插页式、奖励视频     | **显示失败**：无互联网连接；已启用 ShouldTrackNetworkState&#xA;**显示失败**：无互联网连接                            |
| 524  | 插页式、奖励视频     | **显示失败**：放置/位置 %@ 已达到每个节奏定义的限制&#xA;**显示失败**：放置/位置 %@ 已达到其上限                                |
| 526  | 插页式、奖励视频     | **显示失败**：广告单元已达到每个会话的每日上限                                                                  |
| 604  | 横幅           | 无法加载，因为放置/位置已覆盖                                                                            |
| 605  | 横幅           | 加载横幅时出现意外异常                                                                                |
| 606  | 横幅           | 第一次加载时不在所有网络上填充横幅                                                                          |
| 1007 | 插页式、奖励视频     | **Auction Fail**：拍卖请求未包含所有必需信息                                                             |
| 1022 | 奖励视频         | **显示失败**：无法显示另一个 RV 时显示另一个 RV                                                              |
| 1023 | 奖励视频         | **显示失败**：在没有可用的广告服务可供显示时显示调用的 RV                                                           |
| 1035 | Interstitial | **空瀑布**                                                                                    |
| 1036 | 间隙           | **显示失败**：显示另一个间隙时无法显示间隙                                                                    |
| 1037 | 间隙           | **加载失败**：显示另一个间隙时无法加载另一个间隙                                                                 |
| 1039 | 间隙           | 调用 show interstitial                                                                       |
