# Flutter 的高级设置

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

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

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

Unity LevelPlay SDK 支持以下方法使用 Unity 来概述用户细分段：

| 方法     | 描述                                                                   | 注意                                                                |
| ------ | -------------------------------------------------------------------- | ----------------------------------------------------------------- |
| 设备属性   | Unity LevelPlay SDK 会自动收集与用户设备相关的某些标准参数，例如位置、设备模型、设备制造商、app 版本和操作系统。 | 您不需要与 Unity 共享这些数据。                                               |
| 用户属性   | 必须通过 API 中继全面的用户数据，例如创建日期（请参阅受支持的细分段属性的完整列表以及以下描述）。                  | 按照说明将用户的详细信息发送给我们，以便我们的 SDK 可以根据您在 LevelPlay 平台上定义的细分段对您的不同用户进行分类 |
| 自定义细分段 | 您可以创建自定义细分段，而无需将用户详细信息传递给我们的服务器，并定制该用户细分段的广告设置                       |                                                                   |

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

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

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

定义要发发送 Unity 服务器的属性，这些属性将作为细分段的底部。您可以通过以下方法之一发送此信息：

1. 如果您熟悉用户所属的细分段，请输入细分段名称：

   ```dart
   segment.setSegmentName(name);
   ```

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

   ```dart
   final segment = LevelPlaySegment();
   segment.level = levelParam;
   segment.isPaying = isPayingParam;
   segment.userCreationDate = dateTimeParam;
   segment.iapTotal = iaptParam;

   // up to 5 custom params
   segment.setCustom(key:'CustomKey1'，值：'CustomVal1');

   // Set LevelPlay Segment
   LevelPlay.setSegment(segment);
   ```

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

| 细分段属性                | Type（类型）                | 限制                                               | 描述                                                                |
| -------------------- | ----------------------- | ------------------------------------------------ | ----------------------------------------------------------------- |
| `segmentName`        | 字符串                     | * 字母数字
* 最多 32 个字母                               | LevelPlay 帐户中细分段的给定名称                                             |
| **付款**               | 布尔值                     | True 或 False                                     | - 如果用户在 app 内购买中花费了任何资金，则为 true
- 如果用户没有在 app 内购买上花费任何资金，则为 false |
| **iap\_total**       | 双人                      | 1-999999.99                                      | 用户在 app 内购买方面花费的资金总额                                              |
| **userCreationDate** | 长                       | 不能小于 0                                           | 用户安装 app 的日期（以毫秒为单位）                                              |
| **自定义参数**            | key=string，value=string | * LevelPlay SDK 最多支持 5 个自定义参数
* 字母数字
* 最多 32 个字母 | 要发送到我们服务器的任何其他数据                                                  |

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

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

还可以通过客户端共享 Runtime 自定义参数。要实现此目的，请使用 `setMetadata` API 将自定义参数通道给 `LevelPlay_Rewarded_Server_Params`。您可以在整个会话中多次更新自定义参数以覆盖以前的值。

要重置自定义参数，请将 `LevelPlay_Rewarded_Server_Params` 设置为空数组。

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

```dart
LevelPlay.setMetaData({
  'LevelPlay_Rewarded_Server_Params': ['key1=value1', 'key2=value2'],
});
```

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

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

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

Unity 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                                                                       |
