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

> インプレッションレベル収益(ILR)ソリューションを使用して、各インプレッションの広告収益データを追跡し、サードパーティ製の Analytics プラットフォームと統合します。

## 前提条件##prerequisites

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

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

## インプレッションイベントの実装##implement-the-impression-event

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

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

LevelPlay SDK は背景スレッドでコールバックをトリガーし、インプレッションデータのポストバックが成功したことをリスナーに通知します。

```cs
// This event is triggered on a background thread, not the Unity main thread.
LevelPlay.OnImpressionDataReady += ImpressionDataReadyEvent;
private void ImpressionDataReadyEvent(LevelPlayImpressionData impressionData){}
```

### インプレッションイベントの設定##set-up-the-impression-event

各広告オブジェクトの`OnAdImpressionDataReady`をサブスクライブします。インプレッションを逃さないように、広告オブジェクトの構築直後、かつロードまたは表示する前に登録してください。各イベントは、そのイベントが属する広告インスタンスのインプレッションのみを配信します。

> **Note:**
>
> `OnAdImpressionDataReady` は Unity のメインスレッドではなく、背景スレッドで実行されます。

```cs
LevelPlayInterstitialAd interstitialAd = new LevelPlayInterstitialAd("adUnitId");
interstitialAd.OnAdImpressionDataReady += OnInterstitialImpressionDataReady;

void OnInterstitialImpressionDataReady(LevelPlayImpressionData impressionData)
{
    Debug.Log($"Interstitial OnAdImpressionDataReady: {impressionData}");
}

LevelPlayRewardedAd rewardedAd = new LevelPlayRewardedAd("adUnitId");
rewardedAd.OnAdImpressionDataReady += OnRewardedImpressionDataReady;

void OnRewardedImpressionDataReady(LevelPlayImpressionData impressionData)
{
    Debug.Log($"Rewarded OnAdImpressionDataReady: {impressionData}");
}

LevelPlayBannerAd bannerAd = new LevelPlayBannerAd("adUnitId");
bannerAd.OnAdImpressionDataReady += OnBannerImpressionDataReady;

void OnBannerImpressionDataReady(LevelPlayImpressionData impressionData)
{
    Debug.Log($"Banner OnAdImpressionDataReady: {impressionData}");
}
```

## インプレッションイベントの削除##remove-the-impression-event

広告オブジェクトのインプレッションデータの受信を停止するには、`-=`で登録を解除します。

```cs
interstitialAd.OnAdImpressionDataReady -= OnInterstitialImpressionDataReady;
rewardedAd.OnAdImpressionDataReady -= OnRewardedImpressionDataReady;
bannerAd.OnAdImpressionDataReady -= OnBannerImpressionDataReady;
```

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

インプレッションイベントにサブスクライブしたら、独自のプロプライエタリ BI ツールと DWH にインプレッションデータを送信したり、サードパーティ製のツールと統合したりできます。

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

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

```cs
private void OnInterstitialImpressionDataReady(LevelPlayImpressionData impressionData)
{
   string allData = impressionData.AllData;
   string adNetwork = impressionData.AdNetwork;
   double? revenue = impressionData.Revenue;
}
```

フィールドの説明や種類など、使用可能な ILR データの完全なリストについては、[インプレッションレベル収益サーバー側 API](/grow/levelplay/platform/api/impression-level-revenue-server-side.md) を参照してください。

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

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

```cs
private void OnInterstitialImpressionDataReady(LevelPlayImpressionData impressionData) {
    Debug.Log("unity-script:ImpressionDataReadyEvent impressionData = " + impressionData);
    if (impressionData != null) {
        Firebase.Analytics.Parameter[] AdParameters = {
            new Firebase.Analytics.Parameter("ad_platform", "LevelPlay"),
            new Firebase.Analytics.Parameter("ad_source", impressionData.AdNetwork),
            new Firebase.Analytics.Parameter("ad_format", impressionData.AdFormat),
            new Firebase.Analytics.Parameter("ad_unit_name", impressionData.InstanceName),
            new Firebase.Analytics.Parameter("currency", "USD"),
            new Firebase.Analytics.Parameter("value", impressionData.Revenue ??0) // null 値の保護を追加
        };
        Firebase.Analytics.FirebaseAnalytics.LogEvent("custom_ad_impression", AdParameters);
    }
}
```
