# APS 集成(legacy)

> 将 Amazon Publisher Services (APS) 设置为 Unity LevelPlay 上的广告网络，包括配置和帐户设置。

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

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

> **Note:**
>
> 要查看此聚合网络的适配器更改日志，请参阅 [Unity 聚合网络](/grow/levelplay/sdk/unity/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 Unity 插件##step-4.-import-the-aps-unity-plugin

1. 从 [APS 网站](https://ams.amazon.com/webpublisher/uam/docs/aps-mobile/unity)下载 APS Unity 插件。
2. 确保打开 Unity 项目并导入软件包。
3. 在 Unity 菜单栏中，选择 Amazon，然后选择 Manage SDK 以打开 Amazon SDK Manager。

![Unity 编辑器中的 Amazon SDK Manager 菜单。](/api/media?file=/grow/media/images/image.png)

4. 安装 ironSource 适配器，然后导入 Unity 软件包。

![Amazon SDK Manager 中的 Install ironsource adapter 选项。](/api/media?file=/grow/media/images/image-2.png)

### Unity Network Manager（推荐）##unity-network-manager-(recommended)

完成 SDK 集成后，使用 Unity Network Manager 添加 APS 适配器。

在 Unity 开发平台中，转到广告服务聚合>集成管理器

如果您已经拥有最新版本的适配器，则**操作**按钮将更改为 " Updated " 并已禁用。

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

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

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

```cs
Amazon.Initialize(amazonApiKey);
```

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

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

以下是必需的步骤：

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

> **Note:**
>
> 从 APS Unity 插件版本 2.0.0+ 开始，**APSBannerAdRequest** / **APSInterstitialAdRequest** / **APSVideoAdRequest** 对象在 Unity 中采用一个名为 **AdNetworkInfo** 的新参数。请注意以下示例中的实现差异。

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

* 在每个 ironSource 广告单元加载之前调用 APS 横幅广告请求。

* 如果成功加载了 APS 广告，请与 LevelPlay 聚合共享广告数据：
  1. 这应该包括以下参数：APS ironSource 网络密钥、Amazon 返回的出价和字段唯一标识符
  2. 通过调用 loadBanner() 方法加载横幅。

* APS Unity 插件 **2.0.0+**：

```cs
AdNetworkInfo adNetworkInfo = new AdNetworkInfo(ApsAdNetwork.UNITY_LEVELPLAY);
APSBannerAdRequest bannerAdRequest = new APSBannerAdRequest(width, height, amazonBannerSlotId, adNetworkInfo);
    bannerAdRequest.onFailedWithError += (adError) => 
    { 
        IronSource.Agent.loadBanner(IronSourceBannerSize.BANNER, IronSourceBannerPosition.BOTTOM); 
    }; 
    bannerAdRequest.onSuccess += (adResponse) => 
    { 
        IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
                                           APSMediationUtils.GetBannerNetworkData(amazonBannerSlotId, adResponse)); 
        IronSource.Agent.loadBanner(IronSourceBannerSize.BANNER, IronSourceBannerPosition.BOTTOM); 
    }; 
    bannerAdRequest.LoadAd();
```

* **2.0.0** **版以下**的 APS Unity 插件：

```cs
私有变量 APSBannerAdRequest bannerAdRequest;
bannerAdRequest = new APSBannerAdRequest(width, height, amazonBannerSlotId);
        bannerAdRequest.onFailedWithError += (adError) =>
        {
            IronSource.Agent.loadBanner(IronSourceBannerSize.BANNER, IronSourceBannerPosition.BOTTOM);
        };
        bannerAdRequest.onSuccess += (adResponse) =>
        {
             IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
                                                APSMediationUtils.GetBannerNetworkData(amazonBannerSlotId, adResponse));
             IronSource.Agent.loadBanner(IronSourceBannerSize.BANNER, IronSourceBannerPosition.BOTTOM);
        };
        bannerAdRequest.LoadAd();
```

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

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

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

* 在每次加载 ironSource 广告单元之前调用 APS 插页式广告请求。APS 将返回出价或返回无填充。

* 如果成功加载了 APS 广告，请与 LevelPlay 聚合共享广告数据：
  1. 这应该包括以下参数：APS IronSource 网络密钥、Amazon 返回的出价和广告位唯一标识符
  2. 通过调用 loadInterstitial() 方法加载间隙。

* APS Unity 插件 **2.0.0+**：

```cs
AdNetworkInfo adNetworkInfo = new AdNetworkInfo(ApsAdNetwork.UNITY_LEVELPLAY);
APSInterstitialAdRequest interstitialVideoAdRequest = new APSInterstitialAdRequest(amzonInterstitialSlotId, adNetworkInfo);
    interstitialAdRequest.onSuccess += (adResponse) => 
    { 
        IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
            APSMediationUtils.GetInterstitialNetworkData(amzonInterstitialSlotId, adResponse));
        IronSource.Agent.loadInterstitial(); 
    };
interstitialAdRequest.onFailedWithError += (adError) => 
    { 
    IronSource.Agent.loadInterstitial();
    Debug.Log("onFailedWithError interstitial:" + adError);
    };
interstitialAdRequest.LoadAd();
```

* **2.0.0** **版以下**的 APS Unity 插件：

```cs
私有变量 APSInterstitialAdRequest interstitialAdRequest;
interstitialAdRequest = new APSInterstitialAdRequest(amzonInterstitialSlotId);
    interstitialAdRequest.onSuccess += (adResponse) =>
    {
        IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
            APSMediationUtils.GetInterstitialNetworkData(amzonInterstitialSlotId, adResponse));
        IronSource.Agent.loadInterstitial();
    };
interstitialAdRequest.onFailedWithError += (adError) =>
    {
    IronSource.Agent.loadInterstitial();
    Debug.Log("onFailedWithError interstitial:" + adError);
    };
interstitialAdRequest.LoadAd();
```

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

LevelPlay 从 APS 适配器 4.3.2 开始支持 APS 插页式视频广告服务。要加载插页式视频，请创建 APS AdRequest：

* APS Unity 插件 **2.0.0+**：

```cs
AdNetworkInfo adNetworkInfo = new AdNetworkInfo(ApsAdNetwork.UNITY_LEVELPLAY);
APSVideoAdRequest interstitialVideoAdRequest = new APSVideoAdRequest(320, 480, amazonInterstitialVideoSlotId, adNetworkInfo);
    interstitialVideoAdRequest.onSuccess += (adResponse) =>
    {
        IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
                                            APSMediationUtils.GetInterstitialNetworkData(amazonInterstitialVideoSlotId, adResponse));
        IronSource.Agent.loadInterstitial();
    };
    interstitialVideoAdRequest.onFailedWithError += (adError) =>
    {
        IronSource.Agent.loadInterstitial();
    };
    interstitialVideoAdRequest.LoadAd();
```

* **2.0.0** **版以下**的 APS Unity 插件：

```cs
私有变量 APSVideoAdRequest interstitialVideoAdRequest;
interstitialVideoAdRequest = new APSVideoAdRequest(320, 480, amazonInterstitialVideoSlotId);
    interstitialVideoAdRequest.onSuccess += (adResponse) =>
    {
        IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
                                            APSMediationUtils.GetInterstitialNetworkData(amazonInterstitialVideoSlotId, adResponse));
        IronSource.Agent.loadInterstitial();
    };
    interstitialVideoAdRequest.onFailedWithError += (adError) =>
    {
        IronSource.Agent.loadInterstitial();
    };
    interstitialVideoAdRequest.LoadAd();
```

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

APS 集成因您在 app 中实现的奖励广告服务运营模式而异。

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

#### 加载奖励广告服务##load-rewarded-ads

1. 在每个 LevelPlay 广告单元加载之前（或在展示之前，在自动模式下）调用 APS 奖励广告请求。创建加载广告请求时使用 Slot UUID。
2. 如果成功加载了 APS 广告，请与 LevelPlay 聚合共享以下广告数据：
   * APS IronSource 网络密钥、Amazon 返回的出价和广告位唯一标识符
3. 如果 APS 未返回任何填充，则会触发 onFailedWithError() 回调。

* APS Unity 插件 **2.0.0+**：

```cs
AdNetworkInfo adNetworkInfo = new AdNetworkInfo(ApsAdNetwork.UNITY_LEVELPLAY);
APSVideoAdRequest rewardedVideoAdRequest = new APSVideoAdRequest(320, 480, amazonRewardedVideoSlotId, adNetworkInfo);

rewardedVideoAdRequest.onSuccess += (adResponse) => 
{ 
    IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
                                        APSMediationUtils.GetRewardedNetworkData(amazonRewardedVideoSlotId, adResponse));
    IronSource.agent.loadRewardedVideo(); // 如果采用手动奖励模式 
}; 
interstitialVideoAdRequest.onFailedWithError += (adError) => 
{ 
    IronSource.agent.loadRewardedVideo(); // 如果采用手动奖励模式
}; 
rewardedAdRequest.LoadAd();
```

* **2.0.0** **版以下**的 APS Unity 插件：

```cs
public void RequestRewardedVideo()
{
    rewardedVideoAdRequest = new APSVideoAdRequest(320, 480, amazonRewardedVideoSlotId);
    rewardedVideoAdRequest.onSuccess += (adResponse) =>
    {
        IronSource.Agent.setNetworkData(APSMediationUtils.APS_IRON_SOURCE_NETWORK_KEY,
                                            APSMediationUtils.GetRewardedNetworkData(amazonRewardedVideoSlotId, adResponse));
        IronSource.agent.loadRewardedVideo(); // 如果采用手动奖励模式
    };
    interstitialVideoAdRequest.onFailedWithError += (adError) =>
    {
        IronSource.agent.loadRewardedVideo(); // 如果采用手动奖励模式
    };
    rewardedAdRequest.LoadAd();
}
```

您现在可以在应用程序中交付 APS 需求。

## 后续步骤##next-steps

要通过 LevelPlay 利用其他广告网络，请集成网络[适配器](/grow/levelplay/sdk/unity/mediation-networks.md)并按照我们的集成指南进行操作。
