Mailbox

  • 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

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