Mail Box

Đây là các Prefab được đóng gói, để dễ dàng mở rộng và tùy biến theo game. Giúp developer giảm thiểu công sức xây dựng các logic cơ bản

1. Điều kiện tiên quyết

  • Trong game cần phải tích hợp GSM SDK: xem hướng dẫn

  • Game đã được nhập dữ liệu mail box ở GSM CMS. Phần này nếu chưa biết, thì liên hệ tuyennv (skype: nguyenvantuyen_12a9) để được hướng dẫn

2. Sử dụng

  • Khi sử dụng thì phía game cần phải coding thêm các logic tùy theo từng game.

  • Ví dụ: Cần xử lý UI khi nhận được 1 string RewardData như việc phân tích chuỗi json từ RewardData , và hiển thị hình ảnh các phần thưởng tương ứng với logic của game.

  • Ví dụ: Khi một mail được xác nhận claim reward thành công, thì phía game sẽ xử lý cộng phần thưởng cho user.

  • Ví dụ: Khi một mail được xác nhận gửi trạng thái openlink lên server thành công, thì phía game sẽ mở 1 link từ game.

  • Ví dụ: Khi một mail gửi thành công 1 input text lên server thì phía game có thể bật 1 popup, hoặc nếu có phần thưởng thì sẽ cộng thưởng cho user.

  • Ví dụ: Khi một mail gửi 1 input text lên server bị lỗi, thì phía game bật popup hiển thị lỗi.

  • Ví dụ: Khi một mail bị xóa, thì sẽ xử lý ghi log hoặc làm gì đó.

2.1 Tải Plugin và import vào Unity

2.2 Sử dụng prefab MailBoxPanel

  • Nơi chứa Prefab: Assets => CSCMobiPlugin => MailBox => MailBoxPanel.prefab

Code mẫu:

using GSM;
using UnityEngine;

public class MailBoxController : MonoBehaviour
{
    // Start is called before the first frame update
    public MailBoxPanel prefab;

    public void ShowMailBox()
    {
        
        //Khởi tạo mailboxPanel
        var mailboxPanel = Instantiate(prefab, this.transform);

        //Xử lý logic
        mailboxPanel.SetOnRenderReward((mailboxRewardContent, mailboxItem) =>
        {
            //Xử lý Render UI Reward từ mailboxItem.reward
            //Phía game tự phân tích và xử lý tùy ý theo dữ liệu của mailboxItem.reward (có thể là 1 json)
            //Bên dưới chỉ là 1 demo RenderReward
            mailboxRewardContent.RenderReward(mailboxItem);
        });
        mailboxPanel.SetOnMailDeleted((mailboxItem) =>
        {
            Debug.Log($"{mailboxItem.title} is deleted");
        });
        mailboxPanel.SetOnSubmitInputSuccess((mailboxItem, inputText) =>
        {
            //Xử lý khi gửi inputText lên server thành công
            if (!string.IsNullOrEmpty(mailboxItem.reward))
            {
                //Xử lý cộng thưởng cho user, nếu có dữ liệu mailboxItem.reward
            }
        });
        mailboxPanel.SetOnSubmitInputError((mailboxItem, inputText, error) =>
        {
            //Xử lý khi có lỗi xảy ra
            Debug.LogError(error);

        });
        mailboxPanel.SetOnClaimRewardSuccess((mailboxItem) =>
        {
            Debug.Log($"{mailboxItem.title} is claimed");
            if (!string.IsNullOrEmpty(mailboxItem.reward))
            {
                //Xử lý cộng thưởng cho user, nếu có dữ liệu mailboxItem.reward
            }
            //Something code
        });
        mailboxPanel.SetOnOpenLinkSuccess((mailboxItem) =>
        {
            Debug.Log($"OpenLink: {mailboxItem.link}");
            //Mở 1 Url
            Application.OpenURL(mailboxItem.link);
        });
        //Hiển thị popup mailbox
        mailboxPanel.Show();

    }
}

2.2.1 Bắt buộc phải xử lý logic render UI Reward

  • Mặc định code chỉ hiển thị 1 text hiển thị data reward mà user nhận được

  • Phía game cần tự coding xử lý lại UI reward mà user có thể nhận được.

  • Mục đích hiển thị các phần thưởng user có thể nhận được khi claim, hoặc submit input text lên server

  • Hiện tại có một Prefab RewardContent chỉ đơn giản có 1 text hiển thị RewardData và sử dụng Script MailBoxRewardContent

  • Việc của developer là sửa lại UI cho prefab RewardContent để hiển thị được nội dung reward cho user thấy.

  • Khi thêm bất kì biến hoặc code xử lý cho script MailBoxRewardContent thì sau đó sẽ xử lý nội dung reward tại mailboxPanel.SetOnRenderReward.

Code xử lý:

mailboxPanel.SetOnRenderReward((mailboxRewardContent, mailboxItem) =>
{
    //Xử lý Render UI Reward từ mailboxItem.reward
    //Phía game tự phân tích và xử lý tùy ý theo dữ liệu của mailboxItem.reward (có thể là 1 json)
    //Bên dưới chỉ là 1 demo RenderReward
    mailboxRewardContent.RenderReward(mailboxItem);
});

2.2.2 Xử lý Claim Reward

  • Khi user nhấn nút Claim thành công thì một Action trong SetOnClaimRewardSuccess sẽ được thực hiện.

  • Phía game cần xử lý logic để cộng thưởng cho user

Code xử lý:

 mailboxPanel.SetOnClaimRewardSuccess((mailboxItem) =>
 {
     Debug.Log($"{mailboxItem.title} is claimed");
     if (!string.IsNullOrEmpty(mailboxItem.reward))
     {
         //Xử lý cộng thưởng cho user, nếu có dữ liệu mailboxItem.reward
     }
     //Something code
 });

2.2.3 Xử lý logic khi Submit Text thành công lên server

  • Khi user nhập text vào ô Input here... Sau đó nhấn nút Submit

  • Lúc này một Action trong SetOnSubmitInputSuccess sẽ được thực hiện

Code xử lý:

mailboxPanel.SetOnSubmitInputSuccess((mailboxItem, inputText) =>
{
    //Xử lý khi gửi inputText lên server thành công
    if (!string.IsNullOrEmpty(mailboxItem.reward))
    {
        //Xử lý cộng thưởng cho user, nếu có dữ liệu mailboxItem.reward
    }
});
mailboxPanel.SetOnSubmitInputError((mailboxItem, inputText, error) =>
{
    //Xử lý khi có lỗi xảy ra
    Debug.LogError(error);

});
  • Khi user nhấn OpenLink nếu thành công thì một action trong SetOnOpenLinkSuccess sẽ được thực hiện

  • Phía game sẽ xử lý logic mở đến một link nhận được từ MailBoxItem

Code xử lý:

mailboxPanel.SetOnOpenLinkSuccess((mailboxItem) =>
{
    Debug.Log($"OpenLink: {mailboxItem.link}");
    //Mở 1 Url
    Application.OpenURL(mailboxItem.link);
});

3. Custom RewardContent Prefab

  • Nếu muốn tự tạo riêng 1 RewardContent Prefab thì có thể sử dụng cách này.

  • Dưới đây chỉ là demo hướng dẫn sử dụng, chứ không bắt buộc phải tạo class với tên y hệt.

3.1 Tạo một class CustomRewardContent

  • Cần thực thi interface IMailBoxRewardContent

  • Cần kế thừa class MonoBehaviour

Code mẫu:

using GSM;
using GSM.Models;
using TMPro;
using UnityEngine;
public class CustomRewardContent : MonoBehaviour, IMailBoxRewardContent
{
    [SerializeField] TMP_Text rewardContentText;
    public void RenderReward(MailBoxItem mailBoxItem)
    {
        rewardContentText.SetText(mailBoxItem.reward);
    }

}
  • Trong code mẫu trên chỉ sử dụng đơn giản 1 text để hiển thị data reward.

  • Việc xử lý hiển thị reward được thực hiện trong RenderReward

  • Vậy nên tùy biến các biến đầu vào như thế nào là logic ở game

3.2 Tạo một Prefab sử dụng script CustomRewardContent

3.3 Sửa lại class MailBoxPanel

namespace GSM
{
    public class MailBoxPanel : BaseMailBoxPanel<GSMMailBoxItem, CustomRewardContent>
    {
    }
}

3.4 Kéo prefab CustomRewardContent vào MailBoxPanel

  • Click vào: CSCMobiPlugin => MailBox => MailBoxPanel Prefab

  • Ở Hierarchy click vào GameObject MailBoxPanel

  • Ở Inspector kéo CustomRewardContent Prefab vào thuộc tính MailBoxRewardContent Prefab

3.4 Hoàn thành và chạy thử

  • Tùy theo dữ liệu mail của game mà sẽ nhận được danh sách các mail tương ứng

  • dưới đây chỉ là dữ liệu demo

Last updated