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

> インプレッションレベル収益(ILR)SDK APIを統合し、各インプレッションの広告収益データをリアルタイムでキャプチャ。これにより、Monetizationに関する詳細な分析情報とサードパーティ製のAnalyticsプラットフォームとのシームレスなインテグレーションが可能になります。

## 前提条件##prerequisites

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

## LevelPlayImpressionDataListener を実装する##implement-the-levelplayimpressiondatalistener

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

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

```java
public static void addImpressionDataListener(LevelPlayImpressionDataListener listener)
```

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

```java
public static void addImpressionDataListener(ImpressionDataListener listener){
 
   /**
   広告が正常に表示され、インプレッションデータが記録されたときに呼び出されます。 
   **/
  
}
```

### インプレッションリスナーの設定##set-up-the-impression-listener

`LevelPlayImpressionDataListener` を実装し、`setImpressionDataListener()` を呼び出して各広告オブジェクトに設定します。アタッチ、設定、添付は、広告オブジェクトの作成直後、ロードまたは表示する前に行うので、インプレッションを逃すことはありません。各リスナーは、アタッチされているインスタンスのインプレッションのみを受け取ります。

**Java**

```java
import com.unity3d.mediation.impression.LevelPlayImpressionData;
import com.unity3d.mediation.impression.LevelPlayImpressionDataListener;

// Interstitial
LevelPlayInterstitialAd interstitialAd = new LevelPlayInterstitialAd("adUnitId");
interstitialAd.setImpressionDataListener(new LevelPlayImpressionDataListener() {
    @Override
    public void onImpressionSuccess(LevelPlayImpressionData impressionData) {
        Log.d(TAG, "Interstitial onImpressionSuccess: " + impressionData);
    }
});

// Rewarded
LevelPlayRewardedAd rewardedAd = new LevelPlayRewardedAd("adUnitId");
rewardedAd.setImpressionDataListener(new LevelPlayImpressionDataListener() {
    @Override
    public void onImpressionSuccess(LevelPlayImpressionData impressionData) {
        Log.d(TAG, "Rewarded onImpressionSuccess: " + impressionData);
    }
});

// Banner
LevelPlayBannerAdView bannerAdView = new LevelPlayBannerAdView(this, "adUnitId");
bannerAdView.setImpressionDataListener(new LevelPlayImpressionDataListener() {
    @Override
    public void onImpressionSuccess(LevelPlayImpressionData impressionData) {
        Log.d(TAG, "Banner onImpressionSuccess: " + impressionData);
    }
});
```

**Kotlin**

```kotlin
import com.unity3d.mediation.impression.LevelPlayImpressionData
import com.unity3d.mediation.impression.LevelPlayImpressionDataListener

// Interstitial
val interstitialAd = LevelPlayInterstitialAd("adUnitId")
interstitialAd.setImpressionDataListener(object :LevelPlayImpressionDataListener {
    override fun onImpressionSuccess(impressionData:LevelPlayImpressionData) {
        Log.d(TAG, "Interstitial onImpressionSuccess: $impressionData")
    }
})

// Rewarded
val rewardedAd = LevelPlayRewardedAd("adUnitId")
rewardedAd.setImpressionDataListener(object :LevelPlayImpressionDataListener {
    override fun onImpressionSuccess(impressionData:LevelPlayImpressionData) {
        Log.d(タグ, "Rewarded onImpressionSuccess: $impressionData")
    }
})

// Banner
val bannerAdView = LevelPlayBannerAdView(this, "adUnitId")
bannerAdView.setImpressionDataListener(object :LevelPlayImpressionDataListener {
    override fun onImpressionSuccess(impressionData:LevelPlayImpressionData) {
        Log.d(TAG, "Banner onImpressionSuccess: $impressionData")
    }
})
```

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

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

**Java**

```java
interstitialAd.setImpressionDataListener(null);
rewardedAd.setImpressionDataListener(null);
bannerAdView.setImpressionDataListener(null);
```

**Kotlin**

```kotlin
interstitialAd.setImpressionDataListener(null)
rewardedAd.setImpressionDataListener(null)
bannerAdView.setImpressionDataListener(null)
```

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

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

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

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

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

```java
public void onImpressionSuccess (LevelPlayImpressionData impressionData)
{
  Double  revenue = impressionData.getRevenue();
  String  adNetwork = impressionData.getAdNetwork();
  JSONObject allData =  impressionData.getAllData(); 
}
```

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

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

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

```java
/** 
広告が正常に表示され、インプレッションデータが記録されたときに呼び出されます。 
**/ 
@Override
public void onImpressionSuccess(LevelPlayImpressionData impressionData) { 
 // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is opened.
 // For banners, the impression is reported on load success.Log.d(TAG, "onImpressionSuccess" + impressionData); 
   if (impressionData != null) 
   { 
       Bundle bundle = new Bundle(); 
       bundle.putString(FirebaseAnalytics.Param.AD_PLATFORM, "LevelPlay");  
       bundle.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getAdNetwork());  
       bundle.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getAdFormat());   
       bundle.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getInstanceName());
       bundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD");  
       bundle.putDouble(FirebaseAnalytics.Param.VALUE, java.util.Objects.requireNonNullElse(impressionData.getRevenue(), 0.0)); // null 値に対する保護を追加
       
       mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, bundle);
   
   } 
}
```
