# Log Impression

## 1. Điều kiện sử dụng

* Trong game bắt buộc phải đã tích hợp
  * Firebase SDK:&#x20;
  * Adjust SDK:&#x20;
  * GSM SDK: V1.2.4.4 trở lên

## 2. Lưu ý

* <mark style="color:red;">Các dự án cũ đã tự đẩy impression lên Firebase, Adjust, GSM, thì cần xóa bỏ các code độc lập đó.</mark>

## 3. Sử dụng

<table><thead><tr><th width="490">Plugin</th><th>Adjust Version</th></tr></thead><tbody><tr><td><a href="https://gitlab.com/cscmobistudios/gsm-sdk/-/blob/main/Unity/CSCMobiPlugin/LogImpression/CSCMobiPlugin_LogImpression_0.0.1.0.unitypackage">CSCMobiPlugin_LogImpression_0.0.1.0.unitypackage</a></td><td>Adjust Version &#x3C;5.0.0</td></tr><tr><td><a href="https://gitlab.com/cscmobistudios/gsm-sdk/-/blob/main/Unity/CSCMobiPlugin/LogImpression/CSCMobiPlugin_LogImpression_0.0.1.0_for_Adjust_Gte_v5.0.0.0.unitypackage">CSCMobiPlugin_LogImpression_0.0.1.0_for_Adjust_Gte_v5.0.0.0.unitypackage</a></td><td>Adjust Version >=5.0.0</td></tr></tbody></table>

* **Bắt buộc phải có các class**:\
  \- AdjustImpressionTracking\
  \- FirebaseImpressionTracking\
  \- GSMImpressionTracking

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2Fr74OJTw30pfDVwLoUTpP%2Fimage.png?alt=media&#x26;token=1d422a76-deb8-4370-bf64-041a462263e8" alt=""><figcaption></figcaption></figure>

* Sau đó, tùy trong game sử dụng các Mediation nào thì sử dụng thêm các class tracking tương ứng:
  * **Admob**: Sử dụng `class AdmobMediationTracking và` `AdmobNativeAdTracking`
  * **Ironsource**: Sử dụng `class IronsourceImpressionTracking`
  * **MAX**: Sử dụng `class MAXImpressionTracking`
* Ví dụ game sử dụng Ironsource: thì tích thêm sử dụng `IronsourceImpressionTracking`

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2F74k5mDHPmcIBU0Xi56Po%2Fimage.png?alt=media&#x26;token=93b0054a-b65b-4a4c-ba06-da6ceecf054f" alt=""><figcaption></figcaption></figure>

### 3.1 Admob

#### 3.1.1 Đối với các loại  AppOpen, BannerView, InterstitialAd, RewardedAd, RewardedInterstitialAd

* Thực hiện bên trong event OnAdPaid

<pre class="language-csharp"><code class="lang-csharp">void LogImpression(AppOpenAd ad, AdValue adValue, Func&#x3C;string> getTargetLevel, Func&#x3C;string> getGroup = null, Func&#x3C;string> getSubGroup = null, Func&#x3C;string> getUserType = null)
//hoặc
<strong>void LogImpression(BannerView ad, AdValue adValue, Func&#x3C;string> getTargetLevel, Func&#x3C;string> getGroup = null, Func&#x3C;string> getSubGroup = null, Func&#x3C;string> getUserType = null)
</strong>//hoặc
void LogImpression(InterstitialAd ad, AdValue adValue, Func&#x3C;string> getTargetLevel, Func&#x3C;string> getGroup = null, Func&#x3C;string> getSubGroup = null, Func&#x3C;string> getUserType = null)
//hoặc
void LogImpression(RewardedAd ad, AdValue adValue, Func&#x3C;string> getTargetLevel, Func&#x3C;string> getGroup = null, Func&#x3C;string> getSubGroup = null, Func&#x3C;string> getUserType = null)
//hoặc
void LogImpression(RewardedInterstitialAd ad, AdValue adValue, Func&#x3C;string> getTargetLevel, Func&#x3C;string> getGroup = null, Func&#x3C;string> getSubGroup = null, Func&#x3C;string> getUserType = null)
</code></pre>

Hoặc đối với loại **Collapsible Banner**

```csharp
void LogImpressionCollapsibleBanner(BannerView ad, AdValue adValue, Func<string> getTargetLevel, Func<string> getGroup = null, Func<string> getSubGroup = null, Func<string> getUserType = null)
```

**Các tham số:**

* **`ad`** *(Required)*: là đối tượng Ad
* **`adValue`***(Required)*: Là giá trị adValue của event ad.OnAdPaid
* **`getTargetLevel`***(Required)*: Là function trả về targetLevel, phục vụ cho GSM Tracking&#x20;
* **`getGroup`***(Optional)*: Là function trả về giá trị group, phục vụ cho GSM Tracking
* **`getSubGroup`***(Optional)*: Là function trả về subGroup, phục vụ cho GSM Tracking
* **`getUserType`***(Optional)*: Là function trả về userType, phục vụ cho GSM Tracking

Code mẫu cho loại `AppOpenAd (các loại ad khác tương tự)`

```csharp
private void RegisterEventHandlers(AppOpenAd ad)
{
    // Raised when the ad is estimated to have earned money.
    ad.OnAdPaid += (AdValue adValue) =>
    {
        Debug.Log(String.Format("App open ad paid {0} {1}.",
            adValue.Value,
            adValue.CurrencyCode));
        AdmobMediationTracking.LogImpression(ad, adValue,getTargetLevel:() => dataManager.Level.ToString());

    };
    //Other something code
}
public void LoadAd()
{
    AppOpenAd.Load(_adUnitId, adRequest, (AppOpenAd ad, LoadAdError error) =>
    {
        RegisterEventHandlers(ad);
    }
}
```

#### 3.1.2 Đối với loại Collapsible Banner

* Sử dụng class: **`AdmobMediationTracking`**&#x20;

```csharp
void LogImpressionCollapsibleBanner(BannerView ad, AdValue adValue, Func<string> getTargetLevel, Func<string> getGroup = null, Func<string> getSubGroup = null, Func<string> getUserType = null)
```

#### 3.1.3 Đối với loại Native Ad

* Sử dụng class: **`AdmobNativeAdTracking`**
* Thực hiện bên trong OnPaidEvent

```csharp
void LogImpression(NativeAd ad, AdValue adValue, Func<string> getTargetLevel, Func<string> getGroup = null, Func<string> getSubGroup = null, Func<string> getUserType = null)
```

**Các tham số:**

* **`ad`** *(Required)*: là đối tượng Ad
* **`adValue`***(Required)*: Là giá trị adValue của event ad.OnPaidEvent
* **`getTargetLevel`***(Required)*: Là function trả về targetLevel, phục vụ cho GSM Tracking&#x20;
* **`getGroup`***(Optional)*: Là function trả về giá trị group, phục vụ cho GSM Tracking
* **`getSubGroup`***(Optional)*: Là function trả về subGroup, phục vụ cho GSM Tracking
* **`getUserType`***(Optional)*: Là function trả về userType, phục vụ cho GSM Tracking

```csharp
ativeAd.OnPaidEvent += HandleNativeAdOnPaidEvent;
private void HandleNativeAdOnPaidEvent(object sender, AdValueEventArgs args)
{
     AdmobNativeAdTracking.LogImpression(nativeAd, args.AdValue,getTargetLevel:() => dataManager.Level.ToString());
     Debug.Log("Native ad On Paid: Value Start: " + args.AdValue.Value + ", Value new: " + args.AdValue.Value / 1000000f + " - " + args.AdValue.CurrencyCode);
}
```

### 3.2 Ironsource

* Sử dụng khi 1 impression của Ironsource được thành công
* Sử dụng class: **`IronsourceImpressionTracking`**

```csharp
void LogImpression(IronSourceImpressionData impressionData, Func<string> getTargetLevel, Func<string> getGroup = null, Func<string> getSubGroup = null, Func<string> getUserType = null)
```

**Các tham số:**

* **impressionData***(Required)*: là giá trị impression nhận được khi có event `OnImpressionDataReadyEvent` từ **Ironsource**
* **`getTargetLevel`***(Required)*: Là function trả về targetLevel, phục vụ cho GSM Tracking
* **`getGroup`***(Optional)*: Là function trả về giá trị group, phục vụ cho GSM Tracking
* **`getSubGroup`***(Optional)*: Là function trả về subGroup, phục vụ cho GSM Tracking
* **`getUserType`***(Optional)*: Là function trả về userType, phục vụ cho GSM Tracking

Code mẫu:&#x20;

```csharp
IronSourceEvents.onImpressionDataReadyEvent += OnImpressionDataReadyEvent;
private void OnImpressionDataReadyEvent(IronSourceImpressionData impressionData)
{
    if (impressionData != null)
    {
        double value = (double)impressionData.revenue;       
        IronsourceImpressionTracking.LogImpression(impressionData, () => dataManager.Level.ToString());
        //Other something code
    }
}
```

### 3.3 MAX

* Sử dụng khi 1 impression của MAX được thành công
* Sử dụng class: **`MAXImpressionTracking`**
