# iOS 向けインタースティシャルインテグレーション

> デリゲートの実装、広告単位の初期化、広告のロード、適切なタイミングでの表示によってインタースティシャル広告を統合します。

Unity LevelPlay Interstitial は、全画面の広告単位です。通常は、アプリケーションのライフサイクル中の自然な遷移ポイントで機能します。 

> **Note:**
>
> このドキュメントは SDK 8.4.0 以降に関連するものです。

## 前提条件##prerequisites

* LevelPlay SDK がアプリケーションに正しく統合されていることを確認します。インテグレーションの概要は[こちら](/grow/levelplay/sdk/ios/sdk-integration.md)です。
* LevelPlay 初期化 API を使用して SDK を初期化していることを確認します。
* LevelPlay ダッシュボードで AdUnitID を見つけます。

## **インタースティシャル広告オブジェクトの作成**##**create-interstitial-ad-object**

インタースティシャル広告オブジェクトの作成は、**onInitSuccess** コールバックの受信後に実行する必要があります。

オブジェクトは、セッションを通じて複数のロードと表示をハンドルできる再利用可能なインスタンスです。作成後、同じ広告単位の広告をロードおよび表示するために使用する必要があります。

より高度な実装では、必要に応じて複数のインタースティシャル広告オブジェクトを作成できます。

1. **Objective-C**

   ```objective-c
   self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
   ```

2. **Swift**

   ```swift
   self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")
   ```

## **デリゲートの実装**##**implement-delegates**

コードに **LPMInterstitialAdDelegate** を実装して、広告配信に関する情報を取得します。 

* インタースティシャル広告をロードする前にデリゲートを設定することを推奨します。
* 各インタースティシャル広告には、独自のデリゲート実装が必要です。
* デリゲートメソッドはメインスレッドで実行されます。

1. **Objective-C**

   ```objective-c
   self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"]; 
   self.interstitialAd.delegate = self;

   #pragma mark - LPMInterstitialAdDelegate Methods
   - (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
   - (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
   ```

2. **Swift**

   ```swift
   self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")
   self.interstitialAd.setDelegate(self)

   // MARK:LPMInterstitialAdDelegate メソッド
   func didLoadAd(with adInfo:LPMAdInfo) {}
   func didFailToLoadAd(withAdUnitId adUnitId:文字列、エラー：Error) {}
   func didChangeAdInfo(_ adInfo:LPMAdInfo) {}
   func didDisplayAd(with adInfo:LPMAdInfo) {}
   func didFailToDisplayAd(with adInfo:LPMAdInfo、エラー：Error) {}
   func didClickAd(with adInfo:LPMAdInfo) {}
   func didCloseAd(with adInfo:LPMAdInfo) {}
   ```

### LevelPlay 広告情報##levelplay-ad-info

**LPMAdInfo** パラメーターには、ロードされた広告に関する情報が含まれます。実装と使用可能なフィールドの詳細については、[こちら](/grow/levelplay/sdk/ios/levelplay-listener-adinfo-integration.md)を参照してください。

## ロード インタースティシャル広告##load-interstitial-ad

インタースティシャル広告をロードするには、**loadAd** を使用します。

1. **Objective-C**

   ```objective-c
   [self.interstitialAd loadAd];
   ```

2. **Swift**

   ```swift
   self.interstitialAd.loadAd()
   ```

## インタースティシャル広告の表示##show-interstitial-ad

**didLoadAd** コールバックの受信後にインタースティシャル広告を表示します。

* **ViewController** の共有に必要です。 
* プレースメントを使用する場合は、後述のプレースメントのセクションで示すように、**showAd** API に配置名を渡します。
* ユーザーに広告が正常に表示されたら、ロードステップを繰り返して別の広告をロードできます。

1. **Objective-C**

   ```objective-c
   - (void)showInterstitialAd {
       // 広告の準備ができていることを確認します
       if ([self.interstitialAd isAdReady]) {
           // 配置なしで表示
           [self.interstitialAd showAdWithViewController:self placementName:NULL];
       }
   }
   ```

2. **Swift**

   ```swift
   func showInterstitialAd() {
       // 広告の準備ができていることを確認します
       if self.interstitialAd.isAdReady() {
           // 配置なしで表示
           self.interstitialAd.showAd(viewController: self, placementName: nil)
       }
   }
   ```

### 広告の準備ができているか確認##check-ad-is-ready

表示の失敗を避け、広告が正しく表示されるようにするために、**showAd** API を呼び出す前に以下の API を使用することをお勧めします。

**isAdReady** – 広告のロードが成功し、広告単位が上限に達していない場合は true、それ以外の場合は false を返します。

**isPlacementCapped** – 有効な配置に上限がある場合に true を返します。配置が有効でないか、上限がない場合、この API は false を返します。

1. **Objective-C**

   ```objective-c
   // 広告の準備ができていることと、配置に上限がないことを確認します。
   if ([self.interstitialAd isAdReady] &amp;&amp; ![LPMInterstitialAd isPlacementCapped:placementName]) {
       [self.interstitialAd showAdWithViewController:self placementName:placementName];
   }
   ```

2. **Swift**

   ```swift
   // 広告の準備ができていることと、配置に上限がないことを確認します。
   if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
       self.interstitialAd.showAd(viewController: self, placementName: placementName)
   }
   ```

### Placements##placements

LevelPlay ダッシュボードでは、インタースティシャルの[プレースメント](/grow/levelplay/platform/settings/placements.md) ペーシングとプレースメント キャップをサポートします。 

インタースティシャル広告にプレースメントが設定されている場合は、 **showAd** メソッドを呼び出して特定の配置の広告を配信します。

1. **Objective-C**

   ```objective-c
   // 広告の準備ができていることと、配置に上限がないことを確認します。
   if ([self.interstitialAd isAdReady] &amp;&amp; ![LPMInterstitialAd isPlacementCapped:placementName]) {
       // 配置で広告を表示
       [self.interstitialAd showAdWithViewController:self placementName:@"PlacementName"];
   }
   ```

2. **Swift**

   ```swift
   // 広告の準備ができていることと、配置に上限がないことを確認します。
   if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
       // 配置で広告を表示
       self.interstitialAd.showAd(viewController: self, placementName: placementName)
   }
   ```

## インタースティシャル広告の完全な実装例##full-implementation-example-of-interstitial-ads

1. **Objective-C**

   ```objective-c
   NS_ASSUME_NONNULL_BEGIN
   @interface InterstitialAdViewController () <LPMInterstitialAdDelegate>
   @プロパティ(非アトミック、強) LPMInterstitialAd *interstitialAd;
   @end
   @implementation InterstitialAdViewController
   - (void)createInterstitialAd {
       self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
       self.interstitialAd.delegate = self;
   }
   - (void)loadInterstitialAd {
       // 広告のロードまたはリロードに使用
       [self.interstitialAd loadAd];
   }
   - (void)showInterstitialAd {
       if ([self.interstitialAd isAdReady]) {
           [self.interstitialAd showAdWithViewController:self placementName:NULL];
       }
   }
   - (void)showInterstitialAdWithPlacementName:(NSString *)placementName {
       // 広告の準備ができていることと、配置に上限がないことを確認します。
       if ([self.interstitialAd isAdReady] &amp;&amp; ![LPMInterstitialAd isPlacementCapped:placementName]) {
           [self.interstitialAd showAdWithViewController:self placementName:placementName];
       }
   }
   #pragma mark - LPMInterstitialAdDelegate メソッド
   - (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
   - (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
   @end
   NS_ASSUME_NONNULL_END
   ```

2. **Swift**

   ```swift
   class InterstitialAdViewController:UIViewController、LPMInterstitialAdDelegate {
       var interstitialAd:LPMInterstitialAd!

       func createInterstitialAd() {
           self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")
           self.interstitialAd.setDelegate(self)
       }

       func loadInterstitialAd() {
           // used to load or reload the ad
           self.interstitialAd.loadAd()
       }

       func showInterstitialAd() {
           if self.interstitialAd.isAdReady() {
               self.interstitialAd.showAd(viewController: self, placementName: nil)
           }
       }

       func showInterstitialAd(withPlacementName placementName:文字列) {
           // check that ad is ready and that the placement is not capped
           if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
               self.interstitialAd.showAd(viewController: self, placementName: placementName)
           }
       }

       // MARK:LPMInterstitialAdDelegate メソッド
       func didLoadAd(with adInfo:LPMAdInfo) {}
       func didFailToLoadAd(withAdUnitId adUnitId:文字列、エラー：Error) {}
       func didChangeAdInfo(_ adInfo:LPMAdInfo) {}
       func didDisplayAd(with adInfo:LPMAdInfo) {}
       func didFailToDisplayAd(with adInfo:LPMAdInfo、エラー：Error) {}
       func didClickAd(with adInfo:LPMAdInfo) {}
       func didCloseAd(with adInfo:LPMAdInfo) {}
   }
   ```

## LevelPlay Mediation デモアプリケーション##levelplay-mediation-demo-app

インテグレーション Demo (インテグレーションデモ) アプリケーションは、アプリケーションにインタースティシャル広告単位 API を統合する方法を示します。

[iOSデモアプリケーションのダウンロード](https://github.com/ironsource-mobile/Mediation-Demo-Apps)

[インテグレーションテストスイート](/grow/levelplay/sdk/ios/integration-test-suite.md)とのインテグレーションを確認します。

## 次のステップ##next-steps

インテグレーション ガイドに従って、追加のインタースティシャル広告ネットワークを統合したり、追加の広告フォーマットを設定したりできます。

* [メディエーションネットワークの追加](/grow/levelplay/sdk/ios/mediation-networks.md)
* [リワード広告](/grow/levelplay/sdk/ios/rewarded-ads-integration.md)
* [バナー広告](/grow/levelplay/sdk/ios/banner-integration.md)
* [ネイティブ広告](/grow/levelplay/sdk/ios/native-ads-integration.md)
