> For the complete documentation index, see [llms.txt](https://cscmobi-gsm.gitbook.io/gsm-sdk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cscmobi-gsm.gitbook.io/gsm-sdk/tich-hop-gsm-sdk-v1.2.1.1/i.-tai-ve-va-cau-hinh-sdk.md).

# I. Tải về và cấu hình SDK

**Link video hướng dẫn:**\
<https://www.youtube.com/watch?v=rexD2E_cjvQ&list=PLtoiq0hLg8tYloZ0rM5XXv5eYqpvS2fOp>

## 1. GSM là gì?

* GSM là tracking và phân tích dữ liệu từ game, và sau đó sẽ thống kê, báo cáo giúp quản trị game một cách tốt nhất.
* Thông qua GSM SDK được tích hợp trong game, hệ thống GSM sẽ thu thập được dữ liệu từ game gửi lên server.

## 2. Tải về SDK

* Tải xuống phiên bản mới nhất 1.2.1.1 từ [trang phát hành](https://gitlab.com/cscmobistudios/gsm-sdk/-/tree/main/Unity/1.2.1.1).
* Sử dụng phiên bản `GSMSDK_MessagePack.unitypackage` dành cho phiên bản Unity từ `2021.x.x` trở lên (Nên dùng phiên bản này để tối ưu data gửi lên server)
* Sử dụng phiên bản `GSMSDK_Json.unitypackage` dành cho phiên bản Unity từ `2020.x.x` trở lên.

## 3. Thêm SDK vào dự án

* Mở dự án của bạn trong Unity Editor, vào `Assets → Import Package → Custom Package...`. Sau đó chọn file GSMSDK.unitypackage đã tải xuống.
* Chọn `All → Import`

## 4. Thiết lập Prefab GSMObject

* Sau khi đã thêm SDK vào dự án.
* Nơi chứa Prefab GSMObject: **`Plugins → GSM-SDK → GSMObject`**
* <mark style="color:red;">Kéo Prefab GSMObject vào scene đầu tiên (không load lại trong quá trình chơi) khi mở game (ví dụ: Splash scene, Login scene)</mark>

**Các thông số:**

* **`App Id`**: Được cấp từ hệ thống GSM, liên hệ Project Manager của dự án.
* **`Login Retry`**: Là số lần SDK tự động kết nối lại với hệ thống nếu có lỗi. Chọn 0 để bỏ giới hạn, liên tục thử lại tới khi thành công
* **`Log Runtime`**: Trong quá trình phát triển thì tích chọn để xem debug. Khi buid **`Production`** thì bỏ tích chọn.

<mark style="color:red;">**Chú ý:**</mark>

* Khi buid lên store thì cần để bỏ chọn **Log Runtime**

## 5. Dùng GSM Config để chuyển đổi Environment

* Mục đích để chuyển đổi môi trường trên server từ production sang development, hoặc ngược lại&#x20;
* Mục đích để: Tester có thể test các chức năng: Test AppConfig, Test AdImpression, Test IAP, Test Send Event
* Tư tưởng là: Add các deviceId là tester vào trong GSM Config, và hệ thống nếu kiểm tra là device Tester thì sẽ trả về Environment = **Development** và ngược lại.

Code mẫu:

```csharp
        GSM.Core.GSMCore.Instance.GetConfig(response =>
        {
#if UNITY_EDITOR
            //Mặc định Editor là Development
            GSMCore.Instance.SetEnvironment(Environment.Development);
#else
            //Khởi tạo GSM SDK với environment được config từ trên server
            GSMCore.Instance.SetEnvironment(response.environment);
#endif
            //string data=response.data;
            //Xử lý logic cho data nếu có từ trên server trả về   
            //Khởi tạo GSM
            GSMCore.Instance.Init();
        });
```

Hoặc tùy biến với 1 deviceId: Dùng đối với WebGL hoặc Facebook Instant

```csharp
     GSM.Core.GSMCore.Instance.GetConfig(response =>
        {
#if UNITY_EDITOR
            //Mặc định Editor là Development
            GSMCore.Instance.SetEnvironment(Environment.Development);
#else
            //Khởi tạo GSM SDK với environment được config từ trên server
            GSMCore.Instance.SetEnvironment(response.environment);
#endif
            //string data=response.data;
            //Xử lý logic cho data nếu có từ trên server trả về   
            //Khởi tạo GSM với deviceId
            GSMCore.Instance.Init("<deviceId>");
        },"<deviceId>");
```

## 6. Set Adjust Info

* Trường hợp game có sử dụng Adjust thì phải thực hiện
* <mark style="color:red;">Chú ý: Cần set trước khi call GSMCore.Instance.Init();</mark>

```
GSMCore.Instance.SetFunctionGetAdjustId(Adjust.getAdid);
```

Code mẫu:

```csharp
        GSM.Core.GSMCore.Instance.GetConfig(response =>
        {
#if UNITY_EDITOR
            //Mặc định Editor là Development
            GSMCore.Instance.SetEnvironment(Environment.Development);
#else
            //Khởi tạo GSM SDK với environment được config từ trên server
            GSMCore.Instance.SetEnvironment(response.environment);
#endif
            //string data=response.data;
            //Xử lý logic cho data nếu có từ trên server trả về   
            //Thiết lập thông tin Adjust
            GSMCore.Instance.SetFunctionGetAdjustId(Adjust.getAdid);
            //YOUR_ADJUST_APP_TOKEN_KEY=GetComponent<Adjust>().appToken
            GSM.Models.AdjustInfo adjustInfo = new GSM.Models.AdjustInfo(YOUR_ADJUST_APP_TOKEN_KEY, Adjust.getSdkVersion());
            GSMCore.Instance.SetAdjustInfo(adjustInfo); 
            //Khởi tạo GSM
            GSMCore.Instance.Init();
           
        });
```

## 7. Set Ironsource Info

* Trường hợp game có sử dụng Ironsource thì phải thực hiện
* <mark style="color:red;">Chú ý: Cần set trước khi call GSMCore.Instance.Init();</mark>

```csharp
GSMCore.Instance.SetIronSourceInfo(new GSM.Models.Mediations.IronSourceInfo(YOUR_IRONSOURCE_APP_KEY, IronSource.pluginVersion()));
```

Code mẫu:

```csharp
        GSM.Core.GSMCore.Instance.GetConfig(response =>
        {
#if UNITY_EDITOR
            //Mặc định Editor là Development
            GSMCore.Instance.SetEnvironment(Environment.Development);
#else
            //Khởi tạo GSM SDK với environment được config từ trên server
            GSMCore.Instance.SetEnvironment(response.environment);
#endif
            //string data=response.data;
            //Xử lý logic cho data nếu có từ trên server trả về   
            //Thiết lập thông tin Ironsource
            GSMCore.Instance.SetIronSourceInfo(new GSM.Models.Mediations.IronSourceInfo(YOUR_IRONSOURCE_APP_KEY, IronSource.pluginVersion()));
            //Khởi tạo GSM
            GSMCore.Instance.Init();
           
        });
```

## 8. Set MAX Info

* Trường hợp game có sử dụng MAX thì phải thực hiện
* <mark style="color:red;">Chú ý: Cần set trước khi call GSMCore.Instance.Init();</mark>

```csharp
GSMCore.Instance.SetMAXInfo(MAXInfo maxInfo)
```

Code mẫu:

```csharp
        GSM.Core.GSMCore.Instance.GetConfig(response =>
        {
#if UNITY_EDITOR
            //Mặc định Editor là Development
            GSMCore.Instance.SetEnvironment(Environment.Development);
#else
            //Khởi tạo GSM SDK với environment được config từ trên server
            GSMCore.Instance.SetEnvironment(response.environment);
#endif
            //string data=response.data;
            //Xử lý logic cho data nếu có từ trên server trả về   
            //Thiết lập thông tin MAX
            List<MAXInfo.MAXAdUnit> maxAdUnits = new List<MAXInfo.MAXAdUnit>();
            maxAdUnits.Add(new MAXInfo.MAXAdUnit(MAX_Banner_AdUnitId, MAXInfo.MAXAdFormat.Banner));
            maxAdUnits.Add(new MAXInfo.MAXAdUnit(MAX_Interstitial_AdUnitId, MAXInfo.MAXAdFormat.Interstitial));
            maxAdUnits.Add(new MAXInfo.MAXAdUnit(MAX_Native_AdUnitId, MAXInfo.MAXAdFormat.Native));
            maxAdUnits.Add(new MAXInfo.MAXAdUnit(MAX_MREC_AdUnitId, MAXInfo.MAXAdFormat.MREC));
            maxAdUnits.Add(new MAXInfo.MAXAdUnit(MAX_Rewarded_AdUnitId, MAXInfo.MAXAdFormat.Rewarded));
            GSMCore.Instance.SetMAXInfo(new GSM.Models.Mediations.MAXInfo(YOUR_MAX_SDK_KEY, MaxSdk.Version, maxAdUnits));
            //Khởi tạo GSM
            GSMCore.Instance.Init();
           
        });
```

## 9. Set Admob Info

* Trường hợp game có sử dụng Admob, hoặc cấu hình Mediation Admob của Ironsource hoặc MAX thì phải thực hiện
* <mark style="color:red;">Chú ý: Cần set trước khi call GSMCore.Instance.Init();</mark>

```csharp
GSMCore.Instance.SetAdmobInfo(AdmobInfo admobInfo)
```

Code mẫu:

```csharp
        GSM.Core.GSMCore.Instance.GetConfig(response =>
        {
#if UNITY_EDITOR
            //Mặc định Editor là Development
            GSMCore.Instance.SetEnvironment(Environment.Development);
#else
            //Khởi tạo GSM SDK với environment được config từ trên server
            GSMCore.Instance.SetEnvironment(response.environment);
#endif
            //string data=response.data;
            //Xử lý logic cho data nếu có từ trên server trả về   
            //Thiết lập thông tin Admob
            List<AdmobInfo.AdmobAdUnit> admobAdUnits = new List<AdmobInfo.AdmobAdUnit>();
            admobAdUnits.Add(new AdmobInfo.AdmobAdUnit("Admob_AppOpen_AdUnitId", AdmobInfo.AdmobAdFormat.AppOpen));
            admobAdUnits.Add(new AdmobInfo.AdmobAdUnit("Admob_Banner_AdUnitId", AdmobInfo.AdmobAdFormat.Banner));
            admobAdUnits.Add(new AdmobInfo.AdmobAdUnit("Admob_Interstitial_AdUnitId", AdmobInfo.AdmobAdFormat.Interstitial));
            admobAdUnits.Add(new AdmobInfo.AdmobAdUnit("Admob_RewardedIntersitial_AdUnitId", AdmobInfo.AdmobAdFormat.RewardedIntersitial));
            admobAdUnits.Add(new AdmobInfo.AdmobAdUnit("Admob_Rewarded_AdUnitId", AdmobInfo.AdmobAdFormat.Rewarded));
            admobAdUnits.Add(new AdmobInfo.AdmobAdUnit("Admob_Native_AdUnitId", AdmobInfo.AdmobAdFormat.Native));
            GSMCore.Instance.SetAdmobInfo(new AdmobInfo("YOUR_ADMOB_APPID", admobAdUnits));
            //Khởi tạo GSM
            GSMCore.Instance.Init();
           
        });
```

## 10. Set Facebook Info

* Trường hợp game có sử dụng Facebook
* <mark style="color:red;">Chú ý: Cần set trước khi call GSMCore.Instance.Init();</mark>

```csharp
GSMCore.Instance.SetFacebookInfo(FacebookInfo facebookInfo)
```

Code mẫu:

```csharp
        GSM.Core.GSMCore.Instance.GetConfig(response =>
        {
#if UNITY_EDITOR
            //Mặc định Editor là Development
            GSMCore.Instance.SetEnvironment(Environment.Development);
#else
            //Khởi tạo GSM SDK với environment được config từ trên server
            GSMCore.Instance.SetEnvironment(response.environment);
#endif
            //string data=response.data;
            //Xử lý logic cho data nếu có từ trên server trả về   
            //Thiết lập thông tin Facebook
            GSMCore.Instance.SetFacebookInfo(new GSM.Models.FacebookInfo("FACEBOOK_APP_ID", "FACEBOOK_CLIENT_TOKEN"));
            //Khởi tạo GSM
            GSMCore.Instance.Init();
           
        });
```
