# iOS 用のカスタムアダプタのビルド

> iOS でネットワーク用のカスタムアダプタを開発するには、ベースアダプタクラスと広告単位クラスを作成し、ネットワーク SDK を初期化し、広告単位ロジックを実装します。

このドキュメントでは、カスタムアダプターをビルドし、ネットワークを Unity LevelPlay と統合するために必要なリソースをパブリッシャーに提供する手順について説明します。

## 前提条件

1. カスタム アダプター登録[フォーム](https://ironsrc.formtitan.com/Custom-Adapter#/)への記入
2. 以下の情報が入手可能であることを確認します。
   * Adapter クラス名
   * ネットワーク設定キー
3. 最新の LevelPlay SDK のダウンロードは[こちら](/grow/levelplay/sdk/ios/sdk-integration.md.md)

以下のベスト プラクティスも考慮してください。

* コードの一部としてメインスレッド要件をハンドルする
* コード保護と例外処理を追加して、予期しない障害からアプリケーションを保護する

## ネットワーク用のアダプタの作成

ネットワーク アダプタがネットワーク広告ロジックを管理し、パブリッシャーが Unity LevelPlay 設定の一部としてネットワーク広告をディスプレイできるようにします。

このプロセスの一環として、Adapter クラス（**BaseAdapter** と呼ばれます）と、サポート予定の各広告単位に追加のクラスを作成する必要があります。

BaseAdapter は、ネットワーク初期化プロセスを含むネットワークワーク管理をサポートし、すべての広告ユニットに対してセッションを通じて使用可能な変数と定数を定義できます。

広告単位クラスは、広告のロード、表示、および管理のための広告単位ロジックを管理し、ウォーターフォール内の広告の表示ごとにインスタンス化されます。

## ネットワークベースアダプタの作成

ネットワーク アダプタを実装するには、新しいクラスを作成し、Ironsource **ISBaseNetworkAdapter** クラスをインポートします。

アダプタを作成するときは、ネットワーク登録確認メールから受け取った**ベース アダプタ**名を使用します。

1. **Objective-C**

   ```objective-c
   #import "IronSource/IronSource.h"
   @インターフェース IS<YourNetworkName>CustomAdapter ：ISBaseNetworkAdapter
   ```

2. **Swift**

   ```swift
   @objc(IS<YourNetworkName>CustomAdapter)
   public class IS<YourNetworkName>CustomAdapter:ISBaseNetworkAdapter {
      ...
   }
   ```

### ネットワークSDKの初期化

Unity LevelPlay はメディエーションの初期化プロセスの一環としてベース アダプタの init メソッドを呼び出します。その結果、このメソッドを複数回呼び出すことができます。

init 実装の一部として、NetworkInitializationListener で定義された初期化コールバックを、成功時（onInitSuccess）および失敗時（onInitFailed）に毎回呼び出してください。

adData パラメーターには、Unity LevelPlay プラットフォームのパブリッシャーから提供された設定データが含まれます。**ISAdData** クラスの詳細については、[こちら](/grow/levelplay/sdk/ios/custom-adapters.md.md)を参照してください。

1. **Objective-C**

   ```objective-c
   (void)init:(ISAdData *)adData
   delegate:(id<ISNetworkInitializationDelegate>)delegate { 
      ...
      // ハンドルエラー 
      if (エラー処理) { 
         [delegate onInitDidFailWithErrorCode:ISAdapterErrorMissingParams 
                                 errorMessage:error]; 
      } 
      // init success （初期化の成功） 
      [delegate onInitDidSucceed]; 
   }
   ```

2. **Swift**

   ```swift
   public オーバーライド`init` （＿ adData：ISAdData、デリゲート:ISNetworkInitializationDelegate) {
      ...
      // ハンドルエラー 
      if (エラー処理) { 
         delegate.onInitDidFailWithErrorCode(ISAdapterErrors.missingParams.rawValue, errorMessage:"SDK の初期化に失敗")
         戻り値
      } 
      // init success （初期化の成功） 
      delegate.onInitDidSucceed()
      戻り値        
   }
   ```

### SDK とアダプターのバージョンを提供する

この情報は、パブリッシャーのアプリケーションに現在実装されている SDK とアダプタのバージョンを示します。**getNetworkSDKVersion** を実装する場合は、アダプタの更新と SDK サポートの面でより柔軟性を持たせるために、ハードコードされた値ではなくメソッドを使用することをお勧めします。

1. **Objective-C**

   ```objective-c
   - (NSString *) networkSDKVersion {
      return [ALSdk version];
   }
   - (NSString *) adapterVersion {
      return kAdapterVersion;
   }
   ```

2. **Swift**

   ```swift
   public override func networkSDKVersion() -> String {
      return  yourNetworkSDKVersion()
   }
   public override func adapterVersion() -> String {
      return self.customAdapterVersion;
   }
   ```

## インタースティシャル広告単位のサポートを追加

### インタースティシャル広告単位クラスの作成

インタースティシャル広告単位を管理するクラスを作成します。ironsource **ISBaseAdapter** をインポートし、関連するデリゲートをメインのアダプタファイルに追加します。このクラスは、パブリッシャーがロードメソッドによってアプリケーションで新しいインタースティシャル広告をトリガーするたびにアクティブになります。

登録プロセスの一部として Ironsource から受け取った**インタースティシャルクラス**名を使用します。

1. **Objective-C**

   ```objective-c
   #import "IronSource/IronSource.h"
   @インターフェース IS<YourNetworkName>CustomInterstitial ：ISBaseInterstitial
   ```

2. **Swift**

   ```swift
   @objc(IS<YourNetworkName>CustomInterstitial)
   public クラス IS<YourNetworkName>CustomInterstitial ：ISBaseInterstitial {
      ...
   }
   ```

### インタースティシャル広告のリクエスト

**loadAdWithAdData** メソッドをオーバーライドして、パブリッシャーがネットワークからインタースティシャル広告をリクエストできるようにします。[ISAdData](/grow/levelplay/sdk/ios/custom-adapters.md.md) を使用すると、パブリッシャーの入力にアクセスし、このプロセスに必要な広告識別子を受け取ることができます。

広告のロードが成功した場合（**adDidLoad**）、およびすべての種類の失敗（**adDidFailToLoadWithErrorType**）に対して、**ISInterstitialAdDelegate** コールバックを実装してください。リスナーコールバックが事前に定義された時間が経過してもトリガーされない場合、瞑想はタイムアウトによってロードプロセスを停止します。ネットワークワークは広告を提供できません。

1. **Objective-C**

   ```objective-c
   - (void)loadAdWithAdData:(nonnull ISAdData *)adData
                  デリゲート:(null でない ID<ISInterstitialAdDelegate>)デリゲート {

      // Load your ad 
   }
   ```

2. **Swift**

   ```swift
   public オーバーライド func loadAd(with adData:ISAdData、デリゲート:ISInterstitialAdDelegate) {

      // Load your ad
   }
   ```

### 広告が利用可能かどうかの確認

**isAdAvailableWithAdData** メソッドをオーバーライドして、パブリッシャーがユーザーに広告を表示する前に各広告の準備状況を確認できるようにします。メソッドは、広告が正常にロードされた場合は YES、現在ロードされている広告がない場合は NO を返します。これを行うには、ネットワークの is-ad-available 表示（存在する場合）を使用するか、**loadAdWithAdData** メソッドと **showAdWithViewController** メソッドの一部として広告の状態を手動で管理します。

1. **Objective-C**

   ```objective-c
   - (ブーリアン)isAdAvailableWithAdData:(null でない ISAdData *)adData {
      return _renderedAd != nil;
   }
   ```

2. **Swift**

   ```swift
   public override func isAdAvailable(with adData:ISAdData) -> Bool {
      ...
      return false
   }
   ```

### インタースティシャル広告を表示する

広告が正常にロードされると、パブリッシャーはそれを表示できるようになります。**isAdAvailableWithAdData** が true であることを確認した後**に showAdWithViewController** メソッドをオーバーライドして、パブリッシャーにより良い体験を提供できます。このメソッドで受け取る情報の一部[は ISAdData](/grow/levelplay/sdk/ios/custom-adapters.md.md) です。このオブジェクトを使用すると、関連する広告を表示できます。表示を実行できなかった場合は、**adDidFailToShowWithErrorCode** コールバックが返されます。

1. **Objective-C**

   ```objective-c
   - (void)showAdWithViewController:(nonnull UIViewController *)viewController
                           adData:(null でない ISAdData *)adData
                           デリゲート:(null でない ID<ISInterstitialAdDelegate>)デリゲート {
      // 広告が表示できるかどうかを確認します
      if (CannotShowsAd) {
         [delegate adDidFailToShowWithErrorCode:ISAdapterErrorInternal
                                    errorMessage:nil];
         return;
      }
      // show ad . 
      [_ad showAd:_renderedAd];
   }
   ```

2. **Swift**

   ```swift
   public override func showAd(with viewController:UIViewController、adData:ISAdData、デリゲート:ISInterstitialAdDelegate) {
      //デリゲートを保存
      self.adDelegate = delegate
         
      // verify you have an ad to show for this configuration
      if isAdReady(withInstanceData: instanceData)) else {
         // return show failed callback
         デリゲート.adDidFailToShowWithErrorCode(ISAdapterErrors.internal.rawValue, errorMessage: "ad is not ready to show for the current instanceData")
         戻り値
      }

      // show your network interstitial ad
      showInterstitialAd(withInstanceData: instanceData, adDelegate: self)
   }
   ```

### ISInterstitialAdDelegate コールバックのレポート

ネットワークの機能に応じて、**ISInterstitialAdDelegate** コールバックをオーバーライドしてください。デリゲートを正しく報告することで、Unity LevelPlay のベストプラクティスフローが保証され、ネットワークワークのパフォーマンデータが Ironsource プラットプラットフォームに正しく反映されるようになります。

#### 必須のコールバック

1. **Objective-C**

   ```objective-c
   // インタースティシャル広告が正常にロードされたことを示します。 
   - (void)adDidLoad;

   // The interstitial ad failed to load. Use ironSource ErrorTypes (No Fill / Other)
   - (void)adDidFailToLoadWithErrorType:(ISAdapterErrorType)errorType
                              errorCode:(NSInteger)errorCode
                           errorMessage:(NSString*)errorMessage;

   // The interstitial ad was displayed successfully to the user.これはインプレッションを示します。
   - (void)adDidOpen;

   // User closed the interstitial ad
   - (void)adDidClose;

   // The ad could not be displayed
   - (void)adDidFailToShowWithErrorCode:(NSInteger)errorCode
                           errorMessage:(NSString*)errorMessage;
   ```

2. **Swift**

   ```swift
   // インタースティシャル広告が正常にロードされたことを示します。 
   public func adDidLoad()

   // The interstitial ad failed to load. Use ironSource ErrorTypes (No Fill / Other)
   public func adDidFailToLoadWith(_ errorType:ISAdapterErrorType、errorCode：Int, errorMessage:文字列!)

   // The interstitial ad was displayed successfully to the user.これはインプレッションを示します。
   public func adDidOpen()

   // User closed the interstitial ad
   public func adDidClose()

   // The ad could not be displayed
   public func adDidFailToShowWithErrorCode(_ errorCode:Int, errorMessage:文字列!)
   ```

#### 任意コールバック

1. **Objective-C**

   ```objective-c
   // アドオープン（インプレッション）に加えて、広告ネットワークレポートにも成功の兆候が表示される場合に実装します。 
   - (void)adDidShowSucceed;

   // Indicates the ad was clicked
   - (void)adDidClick;
   ```

2. **Swift**

   ```swift
   // アドオープン（インプレッション）に加えて、広告ネットワークレポートにも成功の兆候が表示される場合に実装します。 
   public func adDidShowSucceed()

   // Indicates the ad was clicked
   public func adDidClick()
   ```

### ベースアダプタからデータを取得する方法(任意)

**getNetworkAdapter** API は、ベースアダプタがセッションを通じて広告ユニットに関連する状態またはパラメーターを管理する場合に使用します。これには、広告単位 API で使用する必要があるベースアダプタの一部として定義されたすべてのオブジェクトが含まれます。

```objective-c
// example of data retrieved from your network level adapter
IS<yourNetworkName>CustomAdapter *sampleNetworkAdapter = nil;
id<ISAdapterBaseProtocol> adapter = [self getNetworkAdapter];
if ([adapter isKindOfClass:[IS<yourNetworkName>CustomAdapter class]]) {
   sampleNetworkAdapter = (IS<yourNetworkName>CustomAdapter*) adapter;
}
```

## 動画リワード広告単位のサポートを追加

### 動画リワード広告単位クラスの作成

インタースティシャル広告単位を管理するクラスを作成します。ironsource **ISBaseAdapter** をインポートし、関連するデリゲートをメインのアダプタファイルに追加します。このクラスは、パブリッシャーがロードメソッドによってアプリケーションで新しいインタースティシャル広告をトリガーするたびにアクティブになります。

登録プロセスの一環として Ironsource から受け取った**動画リワードクラス**名を使用します。

1. **Objective-C**

   ```objective-c
   #import "IronSource/IronSource.h"
   @インターフェース IS<YourNetworkName>CustomRewardedVideo ：ISBaseRewardedVideo
   ```

2. **Swift**

   ```swift
   @objc(IS<YourNetworkName>CustomRewardedVideo)
   public クラス IS<YourNetworkName>CustomRewardedVideo ：ISBaseRewardedVideo {
      ...
   }
   ```

### 動画リワード広告のリクエスト

**loadAdWithAdData** メソッドをオーバーライドして、パブリッシャーがネットワークからインタースティシャル広告をリクエストできるようにします。[ISAdData](/grow/levelplay/sdk/ios/custom-adapters.md.md) を使用すると、パブリッシャーの入力にアクセスし、このプロセスに必要な広告識別子を受け取ることができます。

広告のロードの成功(**adDidLoad**)とあらゆる種類の失敗(**adDidFailToLoadWithErrorType**)に対して **ISRewardedVideoAdDelegate** コールバックを実装してください。リスナーコールバックが事前に定義された時間が経過してもトリガーされない場合、瞑想はタイムアウトによってロードプロセスを停止します。ネットワークワークは広告を提供できません。

1. **Objective-C**

   ```objective-c
   - (void)loadAdWithAdData:(nonnull ISAdData *)adData
                  デリゲート:(null でない ID<ISRewardedVideoAdDelegate>)デリゲート {

      // Load your ad
   }
   ```

2. **Swift**

   ```swift
   public オーバーライド func loadAd(with adData:ISAdData、デリゲート:ISRewardedVideoAdDelegate) {

      // Load your ad
   }
   ```

### 広告が利用可能かどうかの確認

**isAdAvailableWithAdData** メソッドをオーバーライドして、パブリッシャーがユーザーに広告を表示する前に各広告の準備状況を確認できるようにします。メソッドは、広告が正常にロードされた場合は YES、現在ロードされている広告がない場合は NO を返します。これを行うには、ネットワークの is-ad-available 表示（存在する場合）を使用するか、**loadAdWithAdData** メソッドと **showAdWithViewController** メソッドの一部として広告の状態を手動で管理します。

1. **Objective-C**

   ```objective-c
   - (ブーリアン)isAdAvailableWithAdData:(null でない ISAdData *)adData {
      ...
      return _renderedAd != nil;
   }
   ```

2. **Swift**

   ```swift
   public override func isAdAvailable(with adData:ISAdData) -> Bool {
      ...
      return false
   }
   ```

### 動画リワード広告を表示する

広告が正常にロードされると、パブリッシャーはそれを表示できるようになります。**isAdAvailableWithAdData** が true であることを確認した後**に showAdWithViewController** メソッドをオーバーライドして、パブリッシャーにより良い体験を提供できます。このメソッドで受け取る情報の一部[は ISAdData](/grow/levelplay/sdk/ios/custom-adapters.md.md) です。このオブジェクトを使用すると、関連する広告を表示できます。表示を実行できなかった場合は、**adDidFailToShowWithErrorCode** コールバックが返されます。

1. **Objective-C**

   ```objective-c
   - (void)showAdWithViewController:(nonnull UIViewController *)viewController
                           adData:(null でない ISAdData *)adData
                           デリゲート:(null でない ID<ISRewardedVideoAdDelegate>)デリゲート {
      // 広告が表示できるかどうかを確認します if (CannotShowsAd) {
         [delegate adDidFailToShowWithErrorCode:ISAdapterErrorInternal
                                 errorMessage:nil];
      
         return;
      }
      // show ad
      [_ad showAd:_renderedAd];
   }
   ```

2. **Swift**

   ```swift
   public override func showAd(with viewController:UIViewController、adData:ISAdData、デリゲート:ISRewardedVideoAdDelegate) {
      //デリゲートを保存
      self.adDelegate = delegate
         
      // verify you have an ad to show for this configuration
      if isAdReady(withInstanceData: instanceData)) else {
         // return show failed callback
         デリゲート.adDidFailToShowWithErrorCode(ISAdapterErrors.internal.rawValue, errorMessage: "ad is not ready to show for the current instanceData")
         戻り値
      }

      // show rewarded video ad
      showRewardedVideoAd(withInstanceData: instanceData, adDelegate: self)
   }
   ```

### ISRewardedVideoAdDelegate コールバックのレポート

必ずネットワークの機能に応じて **ISRewardedVideoAdDelegate** コールバックをオーバーライドしてください。デリゲートを正しく報告することで、Unity LevelPlay メディエーションのベストプラクティスフローが保証され、ネットワークワークのパフォーマンデータが Ironsource プラットプラットフォームに正しく反映されるようになります。

#### 必須のコールバック

1. **Objective-C**

   ```objective-c
   // 動画リワード広告が正常にロードされたことを示します 
   - (void)adDidLoad;

   // The rewarded video ad failed to load. Use ironSource ErrorTypes (No Fill / Other)
   - (void)adDidFailToLoadWithErrorType:(ISAdapterErrorType)errorType
                              errorCode:(NSInteger)errorCode
                           errorMessage:(NSString*)errorMessage;
   // The rewarded video ad was displayed successfully to the user.これはインプレッションを示します。
   - (void)adDidOpen;

   // User closed the rewarded video ad
   - (void)adDidClose;

   // The ad could not be displayed
   - (void)adDidFailToShowWithErrorCode:(NSInteger)errorCode
                           errorMessage:(NSString*)errorMessage;

   // User clicked the rewarded video ad
   - (void)adDidClick;

   // User received a reward after watching the ad
   - (void)adRewarded;

   ```

2. **Swift**

   ```swift
   // 動画リワード広告が正常にロードされたことを示します 
   public func adDidLoad()

   // The rewarded video ad failed to load. Use ironSource ErrorTypes (No Fill / Other)
   public func adDidFailToLoadWith(_ errorType:ISAdapterErrorType、errorCode：Int, errorMessage:文字列!)

   // The rewarded video ad was displayed successfully to the user.これはインプレッションを示します。
   public func adDidOpen()

   // User closed the rewarded video ad
   public func adDidClose()

   // The ad could not be displayed
   public func adDidFailToShowWithErrorCode(_ errorCode:Int, errorMessage:文字列!)

   // User clicked the rewarded video ad
   public func adDidClick()

   // User received a reward after watching the ad
   public func adRewarded()
   ```

#### 任意コールバック

1. **Objective-C**

   ```objective-c
   // 動画広告が開始されたことを示します 
   - (void)adDidStart;

   // Indicates the video ad ended
   - (void)adDidEnd

   // indicates that ad is displayed on foreground
   - (void)adDidBecomeVisible

   // Implement if in addition to ad-open (impression), your ad network reports also show success indication
   - (void)adDidShowSucceed

   ```

2. **Swift**

   ```swift
   // 動画広告が開始されたことを示します 
   public func adDidStart()

   // Indicates the video ad ended
   public func adDidEnd()

   // Indicates that ad is displayed on foreground
   public func adDidBecomeVisible()

   // Implement if in addition to ad-open (impression), your ad network reports also show success indication
   public func adDidShowSucceed()

   ```

### ベースアダプタからデータを取得する方法(任意)

**getNetworkAdapter** API は、ベースアダプタがセッションを通じて広告ユニットに関連する状態またはパラメーターを管理する場合に使用します。これには、広告単位 API で使用する必要があるベースアダプタの一部として定義されたすべてのオブジェクトが含まれます。

```objective-c
// example of data retrieved from your network level adapter
IS<yourNetworkName>CustomAdapter *sampleNetworkAdapter = nil;
id<ISAdapterBaseProtocol> adapter = [self getNetworkAdapter];
if ([adapter isKindOfClass:[IS<yourNetworkName>CustomAdapter class]]) {
   sampleNetworkAdapter = (IS<yourNetworkName>CustomAdapter*) adapter;
}
```

## バナー広告単位のサポートを追加

### ステップ 1. Create バナー広告単位クラス

バナー広告単位を管理するクラスを作成します。このクラスは、パブリッシャーがロードメソッドによってアプリケーションで新しいバナー広告をトリガーするたびにアクティブになります。

登録プロセスの一環として Ironsource から受け取った**バナークラス**名を使用します。

1. **Objective-C**

   ```objective-c
   #import "IronSource/IronSource.h"
   @インターフェース IS<YourNetworkName>CustomBanner ：ISBaseBanner
   ```

2. **Swift**

   ```swift
   @objc(IS<YourNetworkName>CustomBanner)
   public クラス IS<YourNetworkName>CustomBanner ：ISBaseBanner {

   }
   ```

#### バナーサイズ

サポートされているバナーサイズの詳細については、以下の表を参照してください。カスタムネットワークは、これらのサイズの任意の組み合わせをサポートできます。バナーサイズは、**loadAdWithAdData** API の一部としてパラメーターとして受け取ります。

バナーのサイズが **SMART** の場合は、デバイスの画面サイズに応じてサイズを**バナー**または**リーダー**ボードのいずれかに変更してください (以下の手順を参照)。

| **ISBannerSize**            | **説明**                                            | **ポイントの寸法 (幅 x 高さ)**                                |
| --------------------------- | ------------------------------------------------- | --------------------------------------------------- |
| **ISBannerSize\_BANNER**    | 標準バナー                                             | 320×50                                              |
| **ISBannerSize\_LARGE**     | Large バナー                                         | 320 x 90                                            |
| **ISBannerSize\_RECTANGLE** | 中矩形 (MREC)                                        | 300 x 250                                           |
| **ISBannerSize\_SMART**     | スマートバナー (iPhone と iPad のサイズと向きを調整する広告を自動的にレンダリング) | If (iPhone ≤ 720) 320 x 50 If (iPad ≤ 720) 728 x 90 |

### ステップ 2. バナー広告をリクエストします

**loadAdWithAdData** メソッドをオーバーライドして、パブリッシャーがネットワークからバナー広告をリクエストできるようにします。[ISAdData](/grow/levelplay/sdk/ios/custom-adapters.md.md) を使用すると、パブリッシャーの入力にアクセスし、このプロセスに必要な広告識別子を受け取ることができます。ISBannerSize には要求されたバナーサイズが表示されます。

1. **Objective-C**

   ```objective-c
   - (void)loadAdWithAdData:(nonnull ISAdData *)adData
      viewController:(UIViewController *)viewController
            size:(ISBannerSize *)size
         デリゲート:(null でない ID<ISBannerAdDelegate>)デリゲート{
   }

   ```

2. **Swift**

   ```swift
   public オーバーライド func loadAd(with adData:ISAdData、viewController ―UIViewController, size :ISBannerSize、デリゲート：ISBannerAdDelegate){
   }
   ```

### ステップ 3. 破棄バナー

ironsource では、アプリケーション開発者が以下の destroyAdWithAdData メソッドを実装してバナー広告を破棄する必要があります。

1. **Objective-C**

   ```objective-c
   public void destroyAdWithAdData:(nonnull ISAdData *)adData {}
   ```

2. **Swift**

   ```swift
   public override func destroyAd(with adData:ISAdData){}
   ```

> **Note:**
>
> ネットワーク SDK がこの種の API をサポートしていない場合は、
> 実装。

### ステップ 4. ISBannerAdDelegate コールバックのレポート

ネットワークの機能に従って ISBannerAdDelegate コールバックをレポートします。これにより、ネットワークのパフォーマンス データが Ironsource プラットフォームに正しく反映されます。

#### 必須のコールバック

1. **Objective-C**

   ```objective-c
    // バナー広告が正常にロードされたことを示します -
   (void)adDidLoadWithView:(UIView *) ビュー // バナー広告のロードに失敗しました。用途
   ironSource ErrorTypes (塗りつぶしなし/その他)
   -(void)adDidFailToLoadWithErrorType:(ISAdapterErrorType)errorType
   errorCode:(NSInteger)errorCode errorMessage:(nullable NSString*)errorMessage
   // バナー広告がユーザーに正常に表示されます。これは、
   impression on the ironSource platform. -(void)adDidOpen // Indicates an ad
   がクリックされました -(void)adDidClick 
   ```

2. **Swift**

   ```swift
   // バナー広告が正常にロードされたことを示します public func
   adDidLoad(_ bannerView:UIView） // バナー広告のロードに失敗しました。用途
   ironsource ErrorTypes （No Fill / Other） public func adDidFailToLoadWith（＿
   errorType:ISAdapterErrorType、errorCode：Int, errorMessage:文字列!) //
   バナー広告がユーザーに正常に表示された。これは、
   ironsource プラットフォームのインプレッション。 public func adDidOpen() // 示します。
   広告がクリックされた public func adDidClick() 
   ```

> **Note:**
>
> ネットワークから返されたバナー ビューを渡します。

#### 任意コールバック

1. **Objective-C**

   ```objective-c
   //クリック後、ユーザーが
   アプリケーションから取得 - （void）adWillLeaveApplication // 呼び出されます
   広告ビューが全画面コンテンツを表示した後- （void）adWillPresentScreen； -
   (void)adWillPresentScreen // 全画面のコンテンツの後に呼び出されます
   is removed - (void)adDidDismissScreen 
   ```

2. **Swift**

   ```swift
   //クリック後、かつユーザーを削除する前に実行する必要があります。
   アプリケーションの - （void）adWillLeaveApplication // 広告の後に実行する必要があります
   ビューは全画面コンテンツを表示- (void)adWillPresentScreen; -
   (void)adWillPresentScreen // 全画面のコンテンツの後に呼び出されます
   is removed - (void)adDidDismissScreen 
   ```

## アダプターを使用してパブリッシャーの入力にアクセスする

カスタムアダプター登録プロセスの一環として、アプリケーションとインスタンスのレベルキーを提供しました。

これらのキーの値は、パブリッシャーによって **Unity LevelPlay** **プラットフォーム設定**で定義されます。これらの値は、ISAdData オブジェクトを使用して実行時に使用できます。

**ISAdData** オブジェクトには設定値を含むマップが含まれ、アダプタと広告単位クラス API の一部です。このパラメーターは init、**loadAdWithAdData**、**showAdWithViewController**、および **isAdAvailableWithAdData** メソッドで使用できます。

登録確認の電子メールの一部として受け取った名前を使用して、**ISAdData** マップ構造体から値にアクセスできます。

1. **Objective-C**

   ```objective-c
   // パブリッシャー設定パラメータの取得 
   NSString *appLevelParam1 = ISAdData.configuration[<YourAppLevelParam1>];
   NSString *instanceLevelParam1 = ISAdData.configuration[<YourInstanceLevelParam1>];
   NSString *instanceLevelParam2 = ISAdData.configuration[<YourInstanceLevelParam2>];
   ```

2. **Swift**

   ```swift
   // パブリッシャー設定パラメータの取得 
   self.appData = adData.getString(IS<YourNetworkName>CustomAdapter.<YourAppLevelParam>);
   self.instanceData1 = adData.getString(IS<YourNetworkName>CustomAdapter.<YourInstanceLevelParam1>);
   self.instanceData2 = adData.getString(IS<YourNetworkName>CustomAdapter.<YourInstanceLevelParam2>);
   ```

## ironsource エラーコードとエラータイプの使用

### エラータイプ

これは **adDidFailToLoadWithErrorType** デリゲートに関連しています。

| エラータイプ                     | 説明                       |
| -------------------------- | ------------------------ |
| ISAdapterErrorTypeNoFill   | 表示できる広告がない場合に使用          |
| ISAdapterErrorTypeInternal | ネットワークによって報告されるその他の理由で使用 |

### エラーコード

これらのエラーコードは、**adDidFailToLoadWithErrorType** および **adDidFailToShowWithErrorCode** デリゲートに関連しています。

| エラーコード                      | 説明                                              |
| --------------------------- | ----------------------------------------------- |
| ISAdapterErrorMissingParams | API が呼び出されたときに一部の必要な情報が利用できなかったため、アクションが失敗しました。 |
| ISAdapterErrorAdExpired     | を使用して、広告の有効期限が切れたかどうかを示します。                     |
| ISAdapterErrorInternal      | ネットワークによって報告されたその他のエラーに使用されます。                  |

## アダプタのデバッグ（任意）

デバッグログをサポートする場合は、アプリケーションから **setAdapterDebug** メソッドを実装して呼び出します。これは **ISBaseNetworkAdapter** の一部として行う必要があります。

1. **Objective-C**

   ```objective-c
   - (void) setAdapterDebug:(ブーリアン) adapterDebug {
      _adapterDebug = adapterDebug;
   }
   ```

2. **Swift**

   ```swift
   public override func setAdapterDebug(_ adapterDebug:ブーリアン) {
   self.adapterDebug = adapterDebug
   }
   ```
