# 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: [Xem tài liệu hướng dẫn](https://cscmobi-gsm.gitbook.io/gsm-sdk)

## 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

* Đầu tiên cần tải package có tên: `CSCMobiPlugin_LogImpression_[version]..unitypackage` [tải tại đây](https://gitlab.com/cscmobistudios/gsm-sdk/-/tree/main/Unity/CSCMobiPlugin/LogImpression)
* **Bắt buộc phải có các class**:\
  \- AdjustImpressionTracking\
  \- FirebaseImpressionTracking\
  \- GSMImpressionTracking\
  ![](https://3658453026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3fKfhGcWQHSsN6JQnJPa%2Fuploads%2FOOHv3hlT3VcdClwWuhDb%2Fimage.png?alt=media\&token=e3bfe535-aa6f-4bb2-bc5d-8ee4e4890b18)
* 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`\
  ![](https://3658453026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3fKfhGcWQHSsN6JQnJPa%2Fuploads%2FIznQoFVvWEKa0HbwwBXf%2Fimage.png?alt=media\&token=49c5f28a-c5c6-4d02-ba54-ea8e1b26574e)\\

### 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
nativeAd.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`**

```csharp
void LogImpression(MaxSdkBase.AdInfo 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 `OnAdRevenuePaidEvent` từ **MAX**
* **`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:

```csharp
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
private void OnAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo impressionData)
{
    MAXImpressionTracking.LogImpression(impressionData, () => dataManager.Level.ToString());
}
```
