# Adobe AIR 的高级设置

> 配置 Adobe AIR 的高级设置，包括 GDPR 和 CCPA 合规性、用户细分和自定义用户 ID。

## GDPR - 管理同意##gdpr---managing-consent

Unity LevelPlay 和网络支持发布者根据用户的同意选择进行通信，包括将这些信息传递给聚合网络（对于支持的网络）。

要使用 LevelPlay 的 API 来更新用户的同意状态，请使用以下函数：

如果用户提供了同意，请将以下标志设置为 true：

```java
IronSource.instance.setConsent(true);
```

如果用户不同意，请将以下标志设置为 false：

```java
IronSource.instance.setConsent(false);
```

建议在 SDK 初始化之前设置 API。

## CCPA 合规性##ccpa-compliance

Unity LevelPlay 平台（SDK 版本 6.14.0 及更高版本）支持发行商根据加州消费者隐私法案 (CCPA) 限制销售终端用户的个人信息。

有关位于加利福尼亚州的指定的用户的个人信息的通知应根据“禁止出售”设置进行处理，方法是将其值设置为“true”或“false”。

应在初始化 SDK 之前设置 API。

如果用户已选择不“出售”个人信息：

```java
IronSource.instance.setMetaData("do_not_sell","true");
```

如果允许“出售”个人信息：

```java
 IronSource.instance.setMetaData("do_not_sell","false");
```

## 设置 UserID##set-userid

如果要使用服务器到服务器回调向用户奖励我们的奖励广告单位，必须设置 UserID。

> **Note:**
>
> 如果要手动定义 userID，必须在初始化请求之前执行此操作。无法在 init 请求的后面定义 userID。

userID 是每个用户的唯一标识符。您可以设置 userID 参数，也可以省略它，让我们为您生成一个。如果选择跳过在代码中设置 userID，SDK 将生成公平的 userID。

我们支持 1 到 64 个角色的 字符串 Android 或 NSString iOS)。通常的做法是使用 Google 广告 ID (GAID) 或 Apple 广告 ID (IDFA)。

```java
IronSource.instance.setUserId(YOUR_USER_ID);
```

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

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

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

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

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

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

> **Note:**
>
> 在初始化 SDK 之前**必须**设置细分段。

首先，必须导入 ironSource 细分类才能细分用户：

```java
import com.ironsource.adobeair.IronSourceSegment;
```

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

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

   ```java
   IronSourceSegment segment = new IronSourceSegment ();
           segment.segmentName = "nameOfSegment";

   ```

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

   ```java
   // Create segment object
   var segment:IronSourceSegment = new IronSourceSegment();
   // Set user age
   segment.age = age;
   // Set user gender
   segment.gender = "gender";
   // Set user's level
   segment.level = levelnumber;
   // Set user creation date
   segment.userCreationDate=creationData
   // Set user's total in-app purchases
   segment.iapt = numberOfInAppPurchases;
   // Set user's paying status, 1 is yes 0 is no
   segment.isPaying = payingStatus;
   ```

   此外，每个细分段最多可以设置 5 个自定义用户属性：

   ```java
   // Set custom parameters (up to 5)
   segment.setCustom("customKey1", "value1");
   segment.setCustom("customKey2", "value2");
          

   ```

接下来，要根据细分段投放广告单位，请调用以下函数，并使用细分段名称或用户属性完成：

```java
IronSource.instance.setSegment(segment);
```

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

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

注册到以下回调以接收用户所属的细分段名称。如果回调字符串（细分段名称）返回空，则表示在 ironSource Segment 模块中未找到用户的相关细分段。

```java
IronSource.instance.addEventListener(“onSegmentReceived”, onSegmentReceived);
```

实现示例：

```java
function onSegmentReceived(event:DataEvent):void {
                trace (“onSegmentReceived: ” + event.data);
            }
```

## Adobe AIR 的自定义参数##custom-parameters-for-adobe-air

LevelPlay SDK 支持在奖励视频广告单元初始化时通道自定义参数。然后，您将在用户完成事件时收到此数据。

> **Note:**
>
> 1.自定义参数仅与**服务器到服务器**完成回调结合使用。您将作为回调字字符串的一部分接收参数。
> 2.您可以将多个自定义参数插入到 Init 请求中。

### 实现代码##implementation-code

#### 奖励视频##rewarded-video

> **Note:**
>
> 每个会话可以设置多次自定义参数。要重置该值，请使用 clearRewardedVideoServerParameters，然后设置新值。

```java
IronSource.instance.setRewardedVideoServerParameters(YOUR_CUSTOM_PARAMETERS);
```

此外，还可以通过调用以下函数来删除奖励视频的自定义参数：

```java
IronSource.instance.clearRewardedVideoServerParameters();
```

## 使用瀑布流配置的价格限制（测试版）##price-limitations-using-waterfall-configuration-(beta)

Set Waterfall Configuration 是一个 API，可用于动态设置瀑布流的限制：价格上限和价格地面。您可以使用它设置限制并动态影响每个用户返回的 WF，从而减少加载时间和延迟。

限制包括 和 ，可以是以下参数的任意组合：

| 属性 | Type（类型） | 描述                              |
| -- | -------- | ------------------------------- |
| 上限 | 双精度      | 以美元为单位的价格，定义适用于传统实例的最大 eCPM     |
| 地面 | 双精度      | 以美元为单位的价格，定义适用于传统实例和出价者的最小 eCPM |

### 创建瀑布流配置##create-a-waterfall-configuration

WaterfallConfiguration 类表示用于自定义或过滤瀑布的配置对象。实现以下操作可创建瀑布流配置：

```js
var builder:WaterfallConfigurationBuilder = new WaterfallConfigurationBuilder();
        builder.SetCeiling(ceiling);
        builder.SetFloor(floor);
var configuration:WaterfallConfiguration = builder.Build();
        IronSource.instance.setWaterfallConfiguration(configuration,ISAdFormat.AdUnitName);
```

### 清除瀑布流配置##clearing-a-waterfall-configuration

可以在会话期间更改瀑布流配置。要清除给定广告单元的配置，请使用 `empty` WaterfallConfiguration 函数：

```js
var builder:WaterfallConfigurationBuilder = new WaterfallConfigurationBuilder();
var configuration:WaterfallConfiguration = builder.Build();
IronSource.instance.setWaterfallConfiguration(configuration.Empty(),ISAdFormat.AdUnitName);

```

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

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

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

| 错误代码 | 广告单元         | 描述                                                                                         |
| ---- | ------------ | ------------------------------------------------------------------------------------------ |
| 508  | 不适用          | * 聚合/网络初始化失败
* 在非 Demand Only 模式下调用 Demand Only API
* 在 Demand Only 模式下调用非 Demand Only API |
| 509  | - 间歇性
- 奖励视频 | **显示失败**：无广告服务展示                                                                           |
| 510  | 间隙           | **加载失败**：服务器响应失败&#xA;**加载失败**：适配器加载失败                                                      |
| 520  | * 间歇性
* 奖励视频 | **显示失败**：无互联网连接；已启用 ShouldTrackNetworkState&#xA;**显示失败**：无互联网连接                            |
| 524  | - 间歇性
- 奖励视频 | **显示失败**：放置/位置 %@ 已达到每个节奏定义的限制&#xA;**显示失败**：放置/位置 %@ 已达到其上限                                |
| 526  | * 间歇性
* 奖励视频 | **显示失败**：广告单元已达到每个会话的每日上限&#xA;**显示失败**：广告单元已达到每个会话的每日上限                                    |
| 1022 | 奖励视频         | **显示失败**：无法显示另一个 RV 时显示另一个 RV                                                              |
| 1023 | 奖励视频         | **显示失败**：在没有可用的广告服务可供显示时显示调用的 RV                                                           |
| 1036 | Interstitial | **显示失败**：无法显示另一个间隙时显示另一个间隙                                                                 |
| 1037 | Interstitial | **加载失败**：显示另一个间隙时无法加载间隙                                                                    |
