# 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.8 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.1.unitypackage">CSCMobiPlugin_LogImpression_0.0.1.1.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.1_for_Adjust_Gte_v5.0.0.0.unitypackage">CSCMobiPlugin_LogImpression_0.0.1.1_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="/files/QoP8NaE4tH9ieYzm1foy" 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="/files/iY8JEzqxLk2cNKDyFB9T" 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`**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.cscmobicorp.com/cscplugin/log-impression.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
