# iOS向けのインプレッションレベルの収益インテグレーション

> インプレッションレベル収益(ILR)SDK APIを使用して、インプレッションレベルの収益データをAnalyticsプラットフォームに統合します。

## 前提条件##prerequisites

LevelPlay SDK 9.5.0 以降がアプリケーションに正しく統合されていることを確認します。[iOS SDK インテグレーション](/grow/levelplay/sdk/ios/sdk-integration.md) を参照してください。

インプレッションレベル収益（ILR）SDKの特徴と前提条件の詳細については、[インプレッションレベル収益](/grow/levelplay/platform/api/impression-level-revenue-server-side.md)のサーバー側APIを参照してください。

## LPMImpressionDataDelegate の実装##implement-the-lpmimpressiondatadelegate

LevelPlay SDK はポストバックを起動して、表示された広告について通知します。LPMImpressionDataDelegate は、インプレッションデータを受け取るために実装できる任意のデリゲートです。このリスナーは、すべての広告ユニットに関する情報を提供し、インプレッションレベルの収益を使用してさまざまな広告を識別できます。

ImpressionData リスナーをアプリケーションに追加するには、LevelPlay SDK を初期化する前にリスナーを宣言して、情報の損失を避けます。

1. **Objective-C**

   ```objective-c
   + (void)addImpressionDataDelegate:(id<LPMImpressionDataDelegate>)delegate;
   ```

2. **Swift**

   ```swift
   LevelPlay.add(_ delegate: any LPMImpressionDataDelegate)
   ```

LevelPlay SDKは、インプレッションデータに関連する成功ポストバックをデリゲートに通知します。

1. **Objective-C**

   ```objective-c
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData;
   ```

2. **Swift**

   ```swift
   func impressionDataDidSucceed(_ impressionData:LPMImpressionData)
   ```

### インプレッションデリゲートの設定##set-up-the-impression-delegate

`LPMImpressionDataDelegate` を実装し、`setImpressionDataDelegate:` を呼び出して各広告オブジェクトに設定します。インプレッションを逃さないように、広告オブジェクトの構築直後、ロードまたは表示する前に割り当ててください。各デリゲートは、割り当てられたインスタンスのインプレッションのみを受け取ります。

> **Note:**
>
> 広告オブジェクトのインプレッションデリゲートの保持が弱い。デリゲートへの強力なリファレンスを保持します。そうしないと、デリゲートが割り当て解除され、コールバックの受信が停止される可能性があります。

#### Interstitial (インタースティシャル)##interstitial

1. **Objective-C**

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

   #pragma mark - LPMImpressionDataDelegate Methods
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"Interstitial impressionDataDidSucceed: %@", impressionData);
   }
   ```

2. **Swift**

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

   // MARK:LPMImpressionDataDelegate
   func impressionDataDidSucceed(_ impressionData:LPMImpressionData) {
       print("Interstitial impressionDataDidSucceed: \(impressionData)")
   }
   ```

#### Rewarded (リワード型)##rewarded

1. **Objective-C**

   ```objective-c
   self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
   [self.rewardedAd setImpressionDataDelegate:self];

   #pragma mark - LPMImpressionDataDelegate Methods
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"Rewarded impressionDataDidSucceed: %@", impressionData);
   }
   ```

2. **Swift**

   ```swift
   self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")
   self.rewardedAd.setImpressionDataDelegate(self)

   // MARK:LPMImpressionDataDelegate
   func impressionDataDidSucceed(_ impressionData:LPMImpressionData) {
       print("Rewarded impressionDataDidSucceed: \(impressionData)")
   }
   ```

#### Banner##banner

1. **Objective-C**

   ```objective-c
   self.bannerAdView = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId"];
   [self.bannerAdView setImpressionDataDelegate:self];

   #pragma mark - LPMImpressionDataDelegate Methods
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"Banner impressionDataDidSucceed: %@", impressionData);
   }
   ```

2. **Swift**

   ```swift
   self.bannerAdView = LPMBannerAdView(adUnitId: "adUnitId")
   self.bannerAdView.setImpressionDataDelegate(self)

   // MARK:LPMImpressionDataDelegate
   func impressionDataDidSucceed(_ impressionData:LPMImpressionData) {
       print("Banner impressionDataDidSucceed: \(impressionData)")
   }
   ```

### インプレッションデータの削除##remove-impression-data-listener

広告オブジェクトのインプレッションデータの受信を停止するには、`nil`を`setImpressionDataDelegate:`に渡します。

1. **Objective-C**

   ```objective-c
   [self.interstitialAd setImpressionDataDelegate:nil];
   [self.rewardedAd setImpressionDataDelegate:nil];
   [self.bannerAdView setImpressionDataDelegate:nil];
   ```

2. **Swift**

   ```swift
   interstitialAd.setImpressionDataDelegate(nil)
   rewardedAd.setImpressionDataDelegate(nil)
   bannerAdView.setImpressionDataDelegate(nil)
   ```

> **Note:**
>
> LevelPlay SDK 7.1.0 リリースでは、setImpressionDataDelegate は非推奨となり、addImpressionDataDelegate に置き換えられます。

## ILR データの統合##integrate-the-ilr-data

LPMImpressionDataDelegate を実装したら、インプレッションデータを独自のプロプライエタリ BI ツールと DWH に送信するか、サードパーティ製のツールと統合できます。

> **Important:**
>
> 返されるデータに null 値が含まれている可能性があります。データを割り当てる前に保護を追加して、潜在的なクラッシュを回避してください。

各フィールドを個別に参照するか、 allData メソッドを使用してすべての情報を取得できます。

1. **Objective-C**

   ```objective-c
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSNumber *revenue = impressionData.revenue;
       NSString *ad_network = impressionData.adNetwork;
       NSDictionary *all_data = impressionData.allData;
   }
   ```

2. **Swift**

   ```swift
   func impressionDataDidSucceed(_ impressionData:LPMImpressionData) { 
      let revenue:Float = impressionData.revenue as?Float ??0.0 
      let adNetwork:String = impressionData.adNetwork ?? "unknown" 
      let allData:Dictionary = impressionData.allData as?辞書<string, any>?? [:] 
      }
   ```

以下の例は、インプレッションレベル収益SDK APIデータをGoogle Analytics for Firebaseと統合する方法を示しています。そのまま使用することも、サードパーティ製のレポート作成ツールや独自のプロプライエタリ最適化ツールおよびデータベースと統合するために必要な変更を加えることもできます。

> **Important:**
>
> 内部パラメーターが null でないことを確認します。

1. **Objective-C**

   ```objective-c
   /**
    広告が正常に表示され、インプレッションデータが記録されたときに呼び出されます。**/
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"%s", __PRETTY_FUNCTION__);
       [FIRAnalytics logEventWithName:kFIREventAdImpression parameters:@{
                               kFIRParameterAdPlatform:@"LevelPlay",
                               kFIRParameterAdSource:(impressionData.ad_network ?: @"No ad_network"),
                               kFIRParameterAdFormat:(impressionData.ad_format ?: @"No ad_format"),
                               kFIRParameterAdUnitName:(impressionData.instance_name ?: @"No instance_name"),
                               kFIRParameterCurrency:@"USD",
                               kFIRParameterValue:(impressionData.revenue ?: @0)
                           }];
   }
   ```

2. **Swift**

   ```swift
   /**
    広告が正常に表示され、インプレッションデータが記録されたときに呼び出されます。**/ 
   func impressionDataDidSucceed(_ impressionData:LPMImpressionData) {
     print("\(#function)")
     Analytics.logEvent(
        AnalyticsEventAdImpression,
        parameters: [
        AnalyticsParameterAdPlatform:"LevelPlay",
        AnalyticsParameterAdSource: impressionData.ad_network ??"No ad_network",
        AnalyticsParameterAdFormat: impressionData.ad_format ??"No ad_format",
        AnalyticsParameterAdUnitName: impressionData.instance_name ??"No instance_name",
        AnalyticsParameterCurrency:"USD",
        AnalyticsParameterValue: impressionData.revenue ??0,
      ])
   }
   ```
