# APS 集成(legacy)

> 通过配置 APS 帐户并设置与 ironSource 的集成，将 Amazon Publisher 服务(APS)与 Unity LevelPlay 集成。

> **Important:**
>
> 以下文档涉及非 Unity 开发、拥有或运营的产品或服务（“第三方产品”）。
> 这些信息可能已过时或不完整，仅为方便您参考才提供。
> 您对任何第三方产品的使用均受产品自身条款的约束。
> Unity 对这些产品不提供任何担保，也不对因使用这些产品而造成的任何损害或损失负责，包括与第三方供应商提供的内容、广告或材料有关的问题。

> **Note:**
>
> 本指南适用于旧版 LevelPlay SDK 版本 (8.0.0+)。有关 9.0.0 及更高版本的最新文档，请参阅 [APS 集成](aps-v9)。

> **Note:**
>
> 要查看此聚合网络的适配器更改日志，请参阅[适用于 Android 的聚合网络](/grow/levelplay/sdk/android/mediation-networks.md.md#integrate-network-adapters)。

## 先决条件

Amazon 发布者服务 (APS) 是一个仅限邀请的计划。要集成 APS，您需要集成和初始化 LevelPlay SDK 和 APS SDK。确保执行以下详细说明的完整集成流程，以便在应用程序中显示 APS 广告服务。

## 步骤 1.创建 APS 帐户

1. 联系 APS 以设置app程序的帐户。要创建 APS 帐户，请访问 [APS 网站](https://aps.amazon.com/aps/contact-us/)，选择 **联系我们** 并提出申请。
2. 如果您的 APS 请求获得批准，您将收到一个邀请链接，用于在 APS 中注册和创建帐户。
3. 在 LevelPlay 中设置 APS 之前，必须完成上述步骤。 

## 步骤 2.在 APS 网络中设置席位

1. 从 apps 菜单中选择正确的应用程序并选择 **setup**
2. 选择 **IronSource LevelPlay** 作为 Monetization 服务设置菜单
3. 添加字段并为每个字段定义：
   1. Name（名称）
   2. 广告大小
   3. 价格点（自动/手动）
4. 完成添加所有字段并获取凭据：
   1. 获取 app ID
   2. 下载价格点 CSV 文件

## 步骤 3.激活 APS 网络

在 ironSource 平台中，访问 SDK Networks 设置以将 APS 参数配置为 LevelPlay 帐户。

1. 获得上述凭据后，登录 LevelPlay 帐户，然后选择 **Monetize** > **Setup** > **SDK** ****Networks****
2. 从 **Available Networks** 的表中选择 APS，然后选择 **Activate**。

![选择 APS 并选择 Activate](/api/media?file=/grow/media/images/Screen-Shot-2021-12-30-at-8.45.52.png)

3. 从广告网络列表中选择 APS，然后选择 **Setup**。

![选择 APS 并选择 Setup](/api/media?file=/grow/media/images/Screen-Shot-2021-12-30-at-8.47.04.png)

4. 输入您的 APS app ID 并按原样上传 CSV 文件。

![输入 app ID 并上传 CSV](/api/media?file=/grow/media/images/Screen-Shot-2021-12-29-at-22.46.02.png)

## 步骤 4.将 APS 适配器添加到构建中##step-4.-add-the-aps-adapter-to-your-build

### Gradle##gradle

1. 确保 app 模块的构建.gradle 脚本中存在以下 Maven 网址

   ```java
   repositories {
   	mavenCentral()
   }
   ```

2. 将适配器的 Maven 名称添加到 app 模块的构建.gradle 脚本。
   ```java
   dependencies {
   implementation 'com.unity3d.ads-mediation:aps-adapter:4.3.17'
   implementation 'com.amazon.android:aps-sdk:11.0.0+'
   implementation 'com.iabtcf:iabtcf-decoder:2.0.10'
   }
   ```

## 步骤 5。更新 AndroidManifest.xml##step-5.-update-androidmanifest.xml

**清单权限：**

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
```

**清单活动：**

```xml
<activity android:name="com.amazon.device.ads.DTBInterstitialActivity"/>
<activity android:name="com.amazon.device.ads.DTBAdActivity"/>
```

### 仅适用于 Proguard 用户##for-proguard-users-only

如果将 ProGuard 与 APS 适配器结合使用，必须将以下代码添加 ProGuard 文件中：

```java
- 保留类 com.amazon.device.广告服务。** { *; }
```

## 步骤 6。**Init APS SDK**##step-6.-**init-aps-sdk**

APS 网络要求初始化 ironSource 和 APS SDK 以显示 APS 广告服务。 

在打开应用程序后以及在初始化 LevelPlay SDK 之前，立即初始化 APS SDK。使用 APS 设置的步骤 2 中定义的 APS app ID。 

```java
AdRegistration.getInstance(APS_APP_ID, this);
//Where 'this' is an activity context.
```

## 步骤 7。与 LevelPlay 聚合共享每个广告的 APS 出价信息##step-7.-share-aps-bid-info-with-levelplay-mediation-per-ad

加载每个广告之前，请调用 APS API 以获取 LevelPlay SDK 加载广告所需的加载信息。

以下是必需的步骤： 

1. 在每个 IronSource 广告单元加载之前加载 APS 广告请求。  
2. 调用 SetNetworkData 与 ironSource 共享 APS 出价信息。
3. 使用 LevelPlay 聚合 API 加载相关的广告单元。

> **Note:**
>
> 从 APS Android SDK 10.0.0+ 开始，**DTBAdRequest** 对象接受一个名为 **DTBAdNetworkInfo** 的新参数。请注意以下示例中的实现差异。

### 加载横幅/MREC 广告服务##load-banner/mrec-ads

1. 在每个 ironSource 广告单元加载之前调用 APS 横幅广告请求。创建加载广告请求时使用 Slot UUID。
   * APS Android SDK **10.0.0+**：

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize(SLOT_WIDTH, SLOT_HEIGHT, "Your_Slot_UUID"));
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **低于 10.0.0**：

     ```java
     final DTBAdRequest loader = new DTBAdRequest();
     loader.setSizes(new DTBAdSize(SLOT_WIDTH, SLOT_HEIGHT, "Your_Slot_UUID"));
     loader.loadAd(new DTBAdCallback()); 
     ```

2. 如果成功加载了 APS 广告，请与 ironSource 共享广告数据。这应该包括以下参数：

   1. 出价信息：显示 Amazon 广告所需的信息
   2. Price Point 编码：从 APS 返回的获胜广告价格
   3. UUID：插槽唯一标识符
   4. Width：横幅宽度
   5. Height：横幅高度

   ```java
   public void onSuccess(DTBAdResponse dtbAdResponse) {
       // Append the APS bid parameters to LevelPlay mediation to add APS to the next ad request 
       JSONObject apsDataJsonBN = new JSONObject();
       apsDataJsonBN.put("bidInfo", SDKUtilities.getBidInfo(dtbAdResponse));
       apsDataJsonBN.put("pricePointEncoded", SDKUtilities.getPricePoint(dtbAdResponse));
       apsDataJsonBN.put("uuid", slotUUID);
       apsDataJsonBN.put("width", dtbAdResponse.getDTBAds().get(0).getWidth());
       apsDataJsonBN.put("height", dtbAdResponse.getDTBAds().get(0).getHeight());

       // Define APS data per interstitial ad unit 
       JSONObject apsDataJson = new JSONObject(); 
       apsDataJson.put(IronSource.AD_UNIT.BANNER.toString(), apsDataJsonBN);
       IronSource.setNetworkData("APS", apsDataJson);
   }
   ```

   如果 APS 未返回填充，则调用 LevelPlay 的 loadBanner()

3. 加载 ironSource 横幅广告。在[此处](/grow/levelplay/sdk/android/banner-integration.md)了解更多信息。

> **Note:**
>
> 如果选择使用 ironSource 的自动刷新机制，请确保在每次展示后调用 APS 加载广告服务。  这将确保 APS 横幅广告也能参与下一次拍卖。如果不想维护此逻辑，请取消刷新机制，并在销毁前一个广告后手动加载每个广告。

### 加载插页式广告服务##load-interstitial-ads

1. 在每次加载 ironSource 广告单元之前调用 APS 插页式广告请求。创建加载广告请求时使用 Slot UUID。
   * APS Android SDK **10.0.0+**：

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBInterstitialAdSize(YOUR_INTERSTITIAL_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **低于 10.0.0**：

     ```java
     final DTBAdRequest loader = new DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBInterstitialAdSize(YOUR_INTERSTITIAL_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

2. LevelPlay 从 APS 适配器 4.3.3 开始支持 APS 插页式视频广告服务。要加载插页式视频，请调用以下方法：如果 app 处于纵向模式：

   * APS Android SDK **10.0.0+**：

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_INTERSTITIAL_VIDEO_UUID)); 
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **低于 10.0.0**：

     ```java
     final DTBAdRequest loader = new DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_INTERSTITIAL_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

   如果 app 处于横向模式：

   * APS Android SDK **10.0.0+**：

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_INTERSTITIAL_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **低于 10.0.0**：

     ```java
     final DTBAdRequest loader = new DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_INTERSTITIAL_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

3. 如果成功加载了 APS 广告，请与 ironSource 共享广告数据。这应该包括以下参数：

   1. 出价信息：显示 Amazon 广告所需的信息
   2. Price Point 编码：从 APS 返回的获胜广告价格
   3. UUID：插槽唯一标识符

   ```java
   public void onSuccess(DTBAdResponse dtbAdResponse) {
       // Append the APS bid parameters to LevelPlay mediation to add APS to the next ad request 
       JSONObject apsDataJsonIS = new JSONObject(); 
       apsDataJsonIS.put("bidInfo", SDKUtilities.getBidInfo(dtbAdResponse));
       apsDataJsonIS.put("pricePointEncoded", SDKUtilities.getPricePoint(dtbAdResponse));
       apsDataJsonIS.put("uuid", slotUUID);

       // Define APS data per interstitial ad unit 
       JSONObject apsDataJson = new JSONObject(); 
       apsDataJson.put(IronSource.AD_UNIT.INTERSTITIAL.toString(), apsDataJsonIS);
       IronSource.setNetworkData("APS", apsDataJson);
    }
   ```

   如果 APS 未返回填充，请调用 LevelPlay 的 loadInterstitial()。

4. 加载 ironSource 插页式广告。在[此处](/grow/levelplay/sdk/android/interstitial-integration.md)了解更多信息。

### 奖励广告##rewarded-ads

APS 集成因您在 app 中实现的奖励操作模式而异。 

1. 手动加载模式：这是与 APS 集成的推荐设置。这将要求您在每次奖励加载之前调用 APS 广告请求。
2. 奖励广告服务默认模式（自动）：使用 LevelPlay 默认模式显示奖励广告服务时，需要在初始化 LevelPlay SDK 和初始化 APS SDK 之前加载第一个 APS 广告。此外，我们建议在每次显示之前调用下一个 APS 加载请求，从而影响下一个瀑布流请求。

**加载奖励广告服务**

1. 在每次加载 IronSource 广告单元之前（或在展示之前，在自动模式下）调用 APS 奖励广告请求。创建加载广告请求时使用 Slot UUID。如果 app 处于纵向模式：
   * APS Android SDK **10.0.0+**：

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_REWARDED_VIDEO_UUID)); 
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **低于 10.0.0**：

     ```java
     final DTBAdRequest loader = new DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(320, 480, YOUR_REWARDED_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

如果 app 处于横向模式：

1. * APS Android SDK **10.0.0+**：

     ```java
     DTBAdNetworkInfo adNetworkInfo = new DTBAdNetworkInfo(DTBAdNetwork.UNITY_LEVELPLAY); 
     final DTBAdRequest loader = new DTBAdRequest(adNetworkInfo);
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_REWARDED_VIDEO_UUID)); 
     loader.loadAd(new DTBAdCallback());
     ```

   * APS Android SDK **低于 10.0.0**：

     ```java
     final DTBAdRequest loader = new DTBAdRequest();
     loader.setSizes(new DTBAdSize.DTBVideo(480, 320, YOUR_REWARDED_VIDEO_UUID));
     loader.loadAd(new DTBAdCallback());
     ```

2. 如果成功加载了 APS 广告，请与 ironSource 共享广告数据。这应该包括以下参数：
   1. 出价信息：显示 Amazon 广告所需的信息
   2. Price Point 编码：从 APS 返回的获胜广告价格
   3. UUID：插槽唯一标识符

      ```java
      public void onSuccess(DTBAdResponse dtbAdResponse) {
          // Append the APS bid parameters to LevelPlay mediation to add APS to the next ad request 
          JSONObject apsDataJsonRV = new JSONObject(); 
          apsDataJsonRV.put("bidInfo", SDKUtilities.getBidInfo(dtbAdResponse));
          apsDataJsonRV.put("pricePointEncoded", SDKUtilities.getPricePoint(dtbAdResponse));
          apsDataJsonRV.put("uuid", slotUUID);
          // Define APS data per rewarded ad unit 
          JSONObject apsDataJson = new JSONObject(); 
          apsDataJson.put(IronSource.AD_UNIT.REWARDED_VIDEO.toString(), apsDataJsonRV);
          IronSource.setNetworkData("APS", apsDataJson);
       }
      ```

      如果 APS 未返回填充，请调用 LevelPlay 的 loadManualRewardedVideo()。
