# 迁移到适用于 Android 的插页式广告单元 API

> 通过用app用密钥初始化 SDK，创建具有指定的广告单元 ID 的可重用插页式广告对象，并实现监听器器来处理广告事件（例如加载、显示和关闭），迁移到 LevelPlay 插页式广告单元 API。

本指南介绍如何从当前实现过过渡 LevelPlay 插页式 API（使用广告单元 ID），以加载和显示插页式广告服务。

## 先决条件##prerequisites

* 支持的最小 SDK 为 8.6.0。您可以在[此处](/grow/levelplay/sdk/android/sdk-integration.md)下载最新的 SDK。
* 确保使用 LevelPlay Initialization API 初始化 SDK。
* 在 LevelPlay 后台中找到 AdUnitID。

## 创建插页式广告对象##create-interstitial-ad-object

必须在收到 **onInitSuccess** 回调后执行插页式广告对象的创建。

该对象是可重用的实例，可以处理多个加载并在整个会话中显示。创建后，应将其用于加载和展示同一广告单元的广告服务。

对于更高级的实现，如果需要，可以创建多个插页式广告对象。

1. **Java**

   ```java
   // 创建插页式广告
   mInterstitialAd = new LevelPlayInterstitialAd("adUnitId");
   ```

2. **Kotlin**

   ```kotlin
   // 创建插页式广告
   mInterstitialAd = LevelPlayInterstitialAd("adUnitId")
   ```

## 注册到 Interstitial 事件##register-to-interstitial-events

在代码中实现 **LevelPlayInterstitialAdListener** 而不是 **LevelPlayInterstitialListener**，从而了解广告投放情况。 

* 建议在加载插页式广告之前设置监听器。
* 每个插页式广告都应有自己的监听器实现。
* 回调在主线程上运行。

1. **Java**

   ```java
   // 创建插页式广告
   mInterstitialAd = new LevelPlayInterstitialAd("adUnitId");
   // 设置监听器
   mInterstitialAd.setListener(this);

   // LevelPlayInterstitialAdListener methods
   @Override
   public void onAdLoaded(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdLoadFailed(@NonNull LevelPlayAdError error) {}
   @Override
   public void onAdDisplayed(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdDisplayFailed(@NonNull LevelPlayAdError error, @NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdClosed(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdClicked(@NonNull LevelPlayAdInfo adInfo) {}
   @Override
   public void onAdInfoChanged(@NonNull LevelPlayAdInfo adInfo) {}
   ```

2. **Kotlin**

   ```kotlin
   // 创建插页式广告
   mInterstitialAd = LevelPlayInterstitialAd("adUnitId")
   // 设置监听器
   mInterstitialAd.setListener(this)
   // LevelPlayInterstitialAdListener methods
   覆盖 fun onAdLoaded(adInfo:LevelPlayAdInfo) {}
   覆盖 fun onAdLoadFailed（报错：LevelPlayAdError) {}
   覆盖 fun onAdInfoChanged(adInfo:LevelPlayAdInfo) {}
   覆盖 fun onAdDisplayed(adInfo:LevelPlayAdInfo) {}
   覆盖 fun onAdDisplayFailed（报错：LevelPlayAdError、adInfo：LevelPlayAdInfo) {}
   覆盖 fun onAdClicked(adInfo:LevelPlayAdInfo) {}
   覆盖 fun onAdClosed(adInfo:LevelPlayAdInfo) {}
   ```

|     | 旧版                            | 广告单元（新）                         |
| --- | ----------------------------- | ------------------------------- |
| 监听器 | LevelPlayInterstitialListener | LevelPlayInterstitialAdListener |
| 回调  | onAdReady                     | onAdLoaded                      |
|     | onAdLoadFailed                | onAdLoadFailed                  |
|     | onAdOpened                    | onAdDisplayed                   |
|     | onAdClosed                    | onAdClosed                      |
|     | onAdShowFailed                | onAdDisplayFailed               |
|     | onAdClicked                   | onAdClicked                     |
|     | onAdShowSucceeded             | -（已弃用）                          |
|     |                               | onAdInfoChanged                 |

### LevelPlay 广告信息##levelplay-ad-info

> **Note:**
>
> 间歇监听器回调返回的 **AdInfo** 类已被 **LevelPlayAdInfo** 替换。

## 加载 Interstitial Ad##load-interstitial-ad

要加载插页式广告，请使用 **loadAd** 而不是 **loadInterstitial**。

1. **Java**

   ```java
   // 加载或重新加载广告
   mInterstitialAd.loadAd();
   ```

2. **Kotlin**

   ```kotlin
   // 加载或重新加载广告
   mInterstitialAd.loadAd()
   ```

## 显示插页式广告##show-interstitial-ad

使用 **LevelPlayInterstitialAdListener** API 在收到 **onAdLoaded** 回调后显示插页式广告。

* 共享 **Activity** 是必需的。
* 如果使用放置，请在 showAd API 中通道放置/位置名称，如下面的 Placements 部分所示。
* 广告已成功向用户显示后，可以通过重复加载步骤加载另一个广告。

1. **Java**

   ```java
   // 显示广告而不放置/位置
   mInterstitialAd.showAd(this);
   // 显示带有放置/位置的广告
   mInterstitialAd.showAd(this, placementName);
   ```

2. **Kotlin**

   ```kotlin
   // 显示广告而不放置/位置
   mInterstitialAd.showAd(this)
   // 显示带有放置/位置的广告
   mInterstitialAd.showAd(this, placementName)
   ```

### 检查 Ad is Ready##check-ad-is-ready

为了避免展示失败，并确保广告可以正确展示，建议在调用 **showAd** API 之前使用以下 API。

**isAdReady** – 如果广告已成功加载且广告单元未设置上限，则返回 true，否则返回 false。

**isPlacementCapped** – 有效放置/位置被限制时返回 true。如果放置/位置无效或未设置上限，此 API 将返回 false。

1. **Java**

   ```java
   // 检查广告是否已准备就绪并且放置/位置未设置上限
   if (mInterstitialAd.isAdReady() &amp;&amp; !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
       mInterstitialAd.showAd(this, placementName);
   }
   ```

2. **Kotlin**

   ```kotlin
   // 检查广告是否已准备就绪并且放置/位置未设置上限
   if (mInterstitialAd.isAdReady() &amp;&amp; !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
       mInterstitialAd.showAd(this, placementName)
   }
   ```

### 广告位##placements

我们支持在 LevelPlay 控制面板上设置插页的[广告位](/grow/levelplay/platform/settings/placements.md)节奏和上限。

如果为插页式广告服务设置了位置，请调用 **showAd** 方法为指定的放置/位置提供广告。

1. **Java**

   ```java
   // 检查广告是否已准备就绪并且放置/位置未设置上限
   if (mInterstitialAd.isAdReady() &amp;&amp; !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
       // 显示带有放置/位置的广告 
       mInterstitialAd.showAd(this, placementName);
   }
   ```

2. **Kotlin**

   ```kotlin
   // 检查广告是否已准备就绪并且放置/位置未设置上限
   if (mInterstitialAd.isAdReady() &amp;&amp; !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
       mInterstitialAd.showAd(this, placementName)
   }
   ```

## 多个广告单元插页 API##multiple-ad-unit-interstitial-apis

|     | 旧版                            | 广告单元（新）                                   |
| --- | ----------------------------- | ----------------------------------------- |
| API | loadInterstitial              | loadAd                                    |
|     | showInterstitial              | showAd                                    |
|     | isInterstitialPlacementCapped | LevelPlayInterstitialAd.isPlacementCapped |
|     | isInterstitialReady           | isAdReady                                 |

## 插页式广告服务的完整实现示例##full-implementation-example-of-interstitial-ads

1. **Java**

   ```java
   public 类 InterstitialAdActivity extends 活动实现 LevelPlayInterstitialAdListener {
       私有变量 LevelPlayInterstitialAd mInterstitialAd;

       void createInterstitialAd() {
           mInterstitialAd = new LevelPlayInterstitialAd("adUnitId");
           mInterstitialAd.setListener(this);
       }

       void loadInterstitialAd() {
           mInterstitialAd.loadAd();
       }

       void showInterstitialAd() {
           if (mInterstitialAd.isAdReady()) {
               mInterstitialAd.showAd(this);
           }
       }

       void showInterstitialAd(@NonNull String placementName) {
           if (mInterstitialAd.isAdReady() && !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
               mInterstitialAd.showAd(this, placementName);
           }
       }

       // LevelPlayInterstitialAdListener methods
       @Override
       public void onAdLoaded(@NonNull LevelPlayAdInfo adInfo) {}
       @Override
       public void onAdLoadFailed(@NonNull LevelPlayAdError error) {}
       @Override
       public void onAdDisplayed(@NonNull LevelPlayAdInfo adInfo) {}
       @Override
       public void onAdClosed(@NonNull LevelPlayAdInfo adInfo) {}
       @Override
       public void onAdClicked(@NonNull LevelPlayAdInfo adInfo) {}
       @Override
       public void onAdDisplayFailed(@NonNull LevelPlayAdError error, @NonNull LevelPlayAdInfo adInfo) {}
       @Override
       public void onAdInfoChanged(@NonNull LevelPlayAdInfo adInfo) {}
   }
   ```

2. **Kotlin**

   ```kotlin
   类 InterstitialAdActivity：Activity(), LevelPlayInterstitialAdListener { }
       私有变量 lateinit var mInterstitialAd：LevelPlayInterstitialAd

       fun createInterstitialAd() {
           mInterstitialAd = LevelPlayInterstitialAd("adUnitId")
           mInterstitialAd.setListener(this)
       }

       fun loadInterstitialAd() {
           mInterstitialAd.loadAd()
       }

       fun showInterstitialAd() {
           if (mInterstitialAd.isAdReady()) {
               mInterstitialAd.showAd(this)
           }
       }

       fun showInterstitialAd(placementName:字符串) {
           if (mInterstitialAd.isAdReady() && !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
               mInterstitialAd.showAd(this, placementName)
           }
       }

       // LevelPlayInterstitialAdListener methods
       覆盖 fun onAdLoaded(adInfo:LevelPlayAdInfo) {}
       覆盖 fun onAdLoadFailed（报错：LevelPlayAdError) {}
       覆盖 fun onAdInfoChanged(adInfo:LevelPlayAdInfo) {}
       覆盖 fun onAdDisplayed(adInfo:LevelPlayAdInfo) {}
       覆盖 fun onAdDisplayFailed（报错：LevelPlayAdError、adInfo：LevelPlayAdInfo) {}
       覆盖 fun onAdClicked(adInfo:LevelPlayAdInfo) {}
       覆盖 fun onAdClosed(adInfo:LevelPlayAdInfo) {}
   }
   ```

## **完成！**##**done!**

现在，您已全部设置为使用我们新的多个广告单元 API 在应用程序中提供插页式广告服务。
