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:
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 RewardDatanhư 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
Tìm plugin có tên: MailBox [version].unitypackage
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);
});
2.2.3 Xử lý Open Link
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
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