# iOS 向けインタースティシャル広告単位 API への移行

> 広告単位 ID を使用してインタースティシャル広告をロードおよびディスプレイすることで、LevelPlay インタースティシャル API に遷移します。

このガイドでは、現在の実装から LevelPlay Interstitial API に遷移(広告単位 ID を使用)して、インタースティシャル広告をロードおよびディスプレイする方法について説明します。

## 前提条件##prerequisites

* サポートされている最小 SDK は 8.6.0 です。最新の 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** を **LevelPlayInterstitialDelegate** の代わりに実装して、広告の配信を通知します。 

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

1. **Objective-C**

   ```objective-c
   self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
   self.interstitialAd.delegate = self;
   #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 {}
   ```

2. **Swift**

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

   // MARK: LPMInterstitialAdDelegate methods
   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) {}
   ```

|        | 古い機能                          | 広告単位 (新規)                    |
| ------ | ----------------------------- | ---------------------------- |
| デリゲート  | LevelPlayInterstitialDelegate | LPMInterstitialAdDelegate    |
| イベント   | didLoadWithAdInfo             | didLoadAdWithAdInfo          |
|        | didFailToLoadWithError        | didFailToLoadAdWithAdUnitId  |
|        | didOpenWithAdInfo             | didDisplayAdWithAdInfo       |
|        | didCloseWithAdInfo            | didCloseAdWithAdInfo         |
|        | didFailToShowWithError        | didFailToDisplayAdWithAdInfo |
|        | didClickWithAdInfo            | didClickAdWithAdInfo         |
|        | didShowWithAdInfo             | - (非推奨)                      |
|        | -                             | didChangeAdInfo              |

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

インタースティシャルリスナーコールバックによって返さ**れる ISAdInfo** クラスは、**LPMAdInfo** に置き換えられました。

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

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

1. **Objective-C**

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

2. **Swift**

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

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

**didLoadWithAdInfo** コールバックの受信後に、**LevelPlayInterstitial**Delegate ではなく **LPMInterstitialAdDelegate** を使用してインタースティシャル広告を表示します。 **showInterstitialWithViewController** の代わりに **showAdWithViewController** を使用します。

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

1. **Objective-C**

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

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)
   }
   ```

## 複数の広告単位インタースティシャル API##multiple-ad-unit-interstitial-apis

|     | 古い機能                               | 広告単位 (新規)                |
| --- | ---------------------------------- | ------------------------ |
| API | loadInterstitial                   | loadAd                   |
|     | showInterstitialWithViewController | showAdWithViewController |
|     | hasInterstitial                    | isAdReady                |
|     | isInterstitialCappedForPlacement   | isPlacementCapped        |

## 広告単位 API の完全な実装例##full-implementation-example-of-ad-unit-api

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:nil];
       }
   }
   - (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)
