# 适用于 Android 的 Interstitial 集成

> 通过初始化广告单元、设置监听器、加载广告、检查广告可用性并在适当时刻显示广告，促进 Android app 中的插页式广告服务集成。

Unity LevelPlay Interstitial 是一个全屏广告单元，通常在 app 生命周期中的自然过渡点投放。 

> **Note:**
>
> 本文档与 SDK 8.4.0+ 相关。

## 先决条件##prerequisites

* 确保已将 LevelPlay SDK 正确集成到应用程序中。[此处](/grow/levelplay/sdk/android/integration-checklists.md)概述了集成。
* 确保使用 LevelPlay Initialization API 初始化 SDK。
* 在 LevelPlay 后台中找到 AdUnitID。

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

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

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

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

```java
LevelPlayInterstitialAd mInterstitialAd = new LevelPlayInterstitialAd("adUnitId");
```

```java
val mInterstitialAd = LevelPlayInterstitialAd("adUnitId")
```

## 设置 Interstitial 监听器##set-interstitial-listener

在代码中实现 **LevelPlayInterstitialAdListener** 以获取广告投放信息。 

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

```java
// Create the interstitial ad object
LevelPlayInterstitialAd mInterstitialAd = new LevelPlayInterstitialAd("adUnitId");
mInterstitialAd.setListener(new LevelPlayInterstitialAdListener() {
    @Override
    public void onAdLoaded(LevelPlayAdInfo levelPlayAdInfo) {
        // Ad was loaded successfully
    }
    @Override
    public void onAdLoadFailed(LevelPlayAdError levelPlayAdError) {
        // Ad load failed 
    }
    @Override
    public void onAdDisplayed(LevelPlayAdInfo levelPlayAdInfo) {
        // Ad was displayed and visible on screen
    }
    @Override
    public void onAdDisplayFailed(LevelPlayAdError levelPlayAdError, LevelPlayAdInfo levelPlayAdInfo) {
        // Ad fails to be displayed
        // Optional
    }
    @Override
    public void onAdClicked(LevelPlayAdInfo levelPlayAdInfo) {
        // Ad was clicked
        // Optional
    }
    @Override
    public void onAdClosed(LevelPlayAdInfo levelPlayAdInfo) {
        // Ad was closed
        // Optional
    }
    @Override
    public void onAdInfoChanged(LevelPlayAdInfo levelPlayAdInfo) {
        // Called after the ad info is updated.加载另一个插页式广告后可用，并具有更高的 CPM/速率
        // Optional
    }
});
```

```java
// Create the interstitial ad object 
val mInterstitialAd = LevelPlayInterstitialAd("adUnitId")
mInterstitialAd.setListener(object :LevelPlayInterstitialAdListener {
    覆盖 fun onAdLoaded(levelPlayAdInfo:LevelPlayAdInfo) {
        // Ad was loaded successfully
    }
    覆盖 fun onAdLoadFailed(levelPlayAdError:LevelPlayAdError) {
        // Ad load failed
    }
    覆盖 fun onAdDisplayed(levelPlayAdInfo:LevelPlayAdInfo) {
        // Ad was displayed and visible on screen
    }
    覆盖 fun onAdDisplayFailed(levelPlayAdError:LevelPlayAdError、levelPlayAdInfo：LevelPlayAdInfo) {
        // Ad fails to be displayed
        // Optional
    }
    覆盖 fun onAdClicked(levelPlayAdInfo:LevelPlayAdInfo) {
        // Ad was clicked
        // Optional
    }
    覆盖 fun onAdClosed(levelPlayAdInfo:LevelPlayAdInfo) {
        // Ad was closed
        // Optional
    }
    覆盖 fun onAdInfoChanged(levelPlayAdInfo:LevelPlayAdInfo) {
        // Called after the ad info is updated.加载另一个插页式广告后可用，并具有更高的 CPM/速率
        // Optional
    }
})
```

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

**LevelPlayAdInfo** 参数包含有关加载的广告的信息。

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

要加载插页式广告，请使用 **loadAd**。

```java
mInterstitialAd.loadAd();
```

```java
mInterstitialAd.loadAd()
```

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

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

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

```java
public void showInterstitialAd() {
    // Check that ad is ready
    if (mInterstitialAd.isAdReady()) {
        // Show ad 
        mInterstitialAd.showAd(this);
    }
}
```

```kotlin
fun showInterstitialAd() {
    // Check that ad is ready
    if (mInterstitialAd.isAdReady()) {
        // Show ad
        mInterstitialAd.showAd(this)
    }
}
```

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

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

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

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

```java
// Check that ad is ready and that the placement is not capped 
if (mInterstitialAd.isAdReady() && !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
    mInterstitialAd.showAd(this, placementName);
}
```

```java
// Check that ad is ready and that the placement is not capped
if (mInterstitialAd.isAdReady() && !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
    mInterstitialAd.showAd(this, placementName)
}
```

### 广告位##placements

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

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

```java
public void showInterstitialAdWithPlacement() {
    // Check that ad is ready and that the placement is not capped 
    if (mInterstitialAd.isAdReady() && !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
        // Show ad with placement 
        mInterstitialAd.showAd(this, placementName);
    }
}
```

```java
fun showInterstitialAdWithPlacement(placementName：字符串) {
    // Check that ad is ready and that the placement is not capped
    if (mInterstitialAd.isAdReady() && !LevelPlayInterstitialAd.isPlacementCapped(placementName)) {
        // Show ad with placement
        mInterstitialAd.showAd(this, placementName)
    }
}
```

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

```java
public class InterstitialAdActivity extends Activity implements LevelPlayInterstitialAdListener { 
    私有变量 LevelPlayInterstitialAd mInterstitialAd;
    void createInterstitialAd() { 
        mInterstitialAd = new LevelPlayInterstitialAd("adUnitId"); 
        mInterstitialAd.setListener(this); 
    } 
    void loadInterstitialAd() { 
        // Used to load or reload the ad 
        mInterstitialAd.loadAd(); 
    } 
    void showInterstitialAd() { 
        if (mInterstitialAd.isAdReady()) { 
            mInterstitialAd.showAd(this); 
        }
    }
    void showInterstitialAd(@NonNull String placementName) { 
        // Check that ad is ready and that the placement is not capped 
        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) {} 
}
```

```java
类 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:字符串) {
        // Check that ad is ready and that the placement is not capped 
        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) {}
}
```

## LevelPlay Mediation 演示应用程序##levelplay-mediation-demo-app

Integration Demo 应用程序演示了如何在 app 中集成插页式广告单元 API。

[下载 Android Demo 应用程序](https://github.com/ironsource-mobile/Mediation-Demo-Apps)

验证您与我们的[集成测试套件](/grow/levelplay/sdk/android/integration-test-suite.md)的集成。

## 后续步骤##next-steps

请遵循我们的集成指南来集成其他插页式广告网络或配置其他广告格式：

* [添加聚合网络](/grow/levelplay/sdk/android/mediation-networks.md)
* [奖励广告服务](/grow/levelplay/sdk/android/rewarded-ads-integration.md)
* [横幅广告服务](/grow/levelplay/sdk/android/banner-integration.md)
* [原生广告服务](/grow/levelplay/sdk/android/native-ads-integration.md)
