# GSM AdsInhouse

## I. Cách tích hợp mới

* Ví dụ demo ở Scene: `Plugins> GSM-SDK > Sample > SampleAdsScene`

### 1.1 Tạo Game Object AdsController

#### 1.1.1 Kéo Prefab GSMAdInhouse vào trong Game Object AdsController

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2FUU3ZyBs7a8WaP7IltQt7%2Fimage.png?alt=media&#x26;token=e2312f61-641a-4b4b-bedd-2c8dbb14f094" alt=""><figcaption></figcaption></figure>

#### 1.1.2 Tạo class AdsController

Code mẫu:&#x20;

```csharp
using System;

public class AdsController : GSMAdManager
{
    private static AdsController instance;
    public static AdsController Instance { get { return instance; } }
    protected override void Start()
    {
        base.Start();
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
            Destroy(gameObject);
    }
    public override bool CanShowAds(string adsName)
    {
        // Tùy biến cho phép show Ads theo setting
        return base.CanShowAds(adsName);
    }
    public override bool IsInterstitialReady()
    {
        return base.IsInterstitialReady();
    }
    public override bool IsRewardVideoAdsReady()
    {
        return base.IsRewardVideoAdsReady();
    }
    public override void ShowInterstitial(Action OnShowCompleted = null, Action onAdClosed = null)
    {
        base.ShowInterstitial(OnShowCompleted, onAdClosed);
    }
    public override void ShowVideoAds(Action onUserEarnedReward = null, Action onAdClosed = null)
    {
        base.ShowVideoAds(onUserEarnedReward, onAdClosed);
    }
   
}
```

#### 1.1.3 Add Script AdsController vào GameObject AdsController

* Thuộc tính: AdInhouseController thì sử dụng GSMAdInhouse  ở mục [1.1.1](#1.1.1-keo-prefab-gsmadinhouse-vao-trong-game-object-a-dscontroller)

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2FlTe5GHHGIL2I6eOmzAzR%2Fimage.png?alt=media&#x26;token=6b4ff057-22e0-4123-a93f-af4e9afb340b" alt=""><figcaption></figcaption></figure>

#### 1.1.4 Thêm các network quảng cáo khác nếu có

Ví dụ: Sử dụng Ironsource

* Tạo GameObject `IronSourceAdsController` <mark style="color:red;">là con của AdsController</mark>
* Tạo class `IronSourceAdsController`
  * Cần implement Interface `IAdsInterface`
  * Nếu đã có `IAdsInterface` khác trong project thì xóa bỏ, chỉ sử dụng trong GSM-SDK>Ads
  * Implement các method của `IAdsInterface`
* Sau đó Add Script `IronSourceAdsController`cho GameObject `IronSourceAdsController`

Code mẫu:

```csharp
using GSM.Ads;
using System;
using UnityEngine;

public class SampleIronSourceAdsController : MonoBehaviour, IAdsInterface
{
    public bool IsInterstitialAdsReady()
    {
        //Implement IsInterstitialAdsReady Code
        return false;
    }

    public bool IsVideoRewardAdsReady()
    {
        //Implement IsVideoRewardAdsReady Code
        return false;
    }

    public void LoadInterstitial()
    {
        //Implement LoadInterstitial Code
    }

    public void LoadRewardedVideo()
    {
        //Implement LoadRewardedVideo Code
    }

    public void ShowInterstitial(Action onAdClosed)
    {
        //Implement ShowInterstitial Code
    }

    public void ShowVideoAds(Action onUserEarnedReward, Action onAdClosed)
    {
        //Implement ShowVideoAds Code
    }
}
```

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2FXboiCBWTTogEu635kDEy%2Fimage.png?alt=media&#x26;token=7d040fd5-9694-4bad-9091-da30df558323" alt=""><figcaption></figcaption></figure>

## II. Cách sửa AdsController đã có

* Đây là trường hợp mà các game đã có AdsController từ code cũ ngày xưa.
* Các dự án cũ thường lấy code AdsController từ: <https://gitlab.com/cscmobistudios/csc_ads_wrapper_mediation>
* Với trường hợp này thì cách chuyển đổi sẽ như sau:

### 1. Sửa class AdsController kế thừa từ class GSMAdManager

Code mẫu:

<figure><img src="broken-reference" alt=""><figcaption></figcaption></figure>

### 2. Sửa method Start

* Xóa bỏ `private List adsController;`
* Sửa `private void Start()` thành `protected override void Start()`
* Thêm `base.Start();`

Code Mẫu: *Bên trái là code cũ, bên phải là code mới*

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2FwsLrVG3f6xiXIW2X6c8X%2Fimage.png?alt=media&#x26;token=38eac8bf-bf1b-4639-a3ee-1aeb233d3ba7" alt=""><figcaption></figcaption></figure>

### 3. Overide method CanShowAds

Code mẫu: *Bên trái là code cũ, bên phải là code mới*

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2FwcqEmFROeHXHQ009oNL0%2Fimage.png?alt=media&#x26;token=53243041-9eb0-4991-ab30-fd16320897eb" alt=""><figcaption></figcaption></figure>

### 4. Overide method IsRewardVideoAdsReady

Code mẫu: *Bên trái là code cũ, bên phải là code mới*

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2F5tgfXn0SVAuqzPnnAJqj%2Fimage.png?alt=media&#x26;token=75e0b5b2-fc01-4c71-9b63-42c78dc313c7" alt=""><figcaption></figcaption></figure>

### 5. Sửa method ShowVideoReward

Code mẫu: *Bên trái là code cũ, bên phải là code mới*

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2FlkKJPmLwVXffkk7vGKT1%2Fimage.png?alt=media&#x26;token=a6e38cb6-a663-4b71-8def-b0b61fb68c16" alt=""><figcaption></figcaption></figure>

### 6. Overide method IsInterstitialReady

Code mẫu: *Bên trái là code cũ, bên phải là code mới*

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2Fe6OZq3xH1OmCidJk1ZKR%2Fimage.png?alt=media&#x26;token=2ba888db-ecaf-43bf-ac00-6c90a5b78425" alt=""><figcaption></figcaption></figure>

### 7. Sửa method ShowInterstitial

Code mẫu: *Bên trái là code cũ, bên phải là code mới*

<figure><img src="https://2104621774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgeyYu23aXsOKQRAzehmS%2Fuploads%2FAKH3DegG25IhvjVvANnB%2Fimage.png?alt=media&#x26;token=edc0e68c-03b7-49f9-8b68-40bd86685fbd" alt=""><figcaption></figcaption></figure>

## III. Notes

**Chú ý:**

* <mark style="color:red;">Nếu trong code đã có sẵn interface</mark> <mark style="color:red;"></mark><mark style="color:red;">`IAdsInterface`</mark> <mark style="color:red;"></mark><mark style="color:red;">thì xóa bỏ, chỉ dùng</mark> <mark style="color:red;"></mark><mark style="color:red;">`IAdsInterface`</mark> <mark style="color:red;"></mark><mark style="color:red;">trong GSM-SDK</mark>
