mergemilitary/Assets/TKGSDK/Demo/ToukaAccountSDKDemo.cs

382 lines
12 KiB
C#

using System;
using System.Linq;
using System.Threading;
using Touka;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class ToukaAccountSDKDemo : MonoBehaviour
{
public Transform loading;
public Transform loginView;
public Transform userCenter;
public Transform loginView_LoginChannelPanelRoot;
public Transform userCenter_loginType;
public Transform userCenter_userId;
public Transform userCenter_token;
public Transform userCenter_userType;
public Transform btnBinded;
public Transform btnBindGoogle;
public Transform btnBindFacebook;
public Transform PanelUserCenter_BindSelect;
private string _userId;
private string _token;
private LoginType _userType;
private LoginType _loginType;
private Action<LoginStatus, LoginType, string, string, string, string, string, string> _loginAction;
private Action<BindAccountStatus, LoginType, string, string, string, string, string, string, string[]>
_bindAccountCallback;
// Start is called before the first frame update
void Start()
{
Loom.QueueOnMainThread((o => { }), "");
TKGSDKManager.Instance.InitSDK(() => { });
_loginAction = (status, type, msg, userid, token, email, displayName, photoUrl) =>
{
Debug.Log($"登陆回调 {status} type:{type} msg:{msg} userId:{userid} token:{token}");
if (status == LoginStatus.LOGIN_STATUS_SUCC)
{
_userId = userid;
_userType = type;
_token = token;
ShowUserCenter();
ToukaToast.ShowToast("登陆成功");
}
else
{
_userId = "";
_userType = LoginType.LOGIN_BY_GUESTER;
_token = "";
ToukaToast.ShowToast($"登陆失败:{msg}");
ShowLoginView();
}
};
_bindAccountCallback = (status, loginTYpe, msg, userId, token, email, displayName, photoUrl, userIdList) =>
{
Debug.Log(
$"绑定回调 {status} type:{loginTYpe} msg:{msg} userId:{userId} token:{token} userIdList:{userIdList}");
if (status == BindAccountStatus.BIND_CODE_SELECT)
{
Debug.Log("绑定回调 - 选择界面");
InitBindSelectView(userIdList);
return;
}
if (status == BindAccountStatus.BIND_CODE_SUCC)
{
Debug.Log("绑定回调 - 绑定成功");
if (!userId.Equals(_userId))
{
Debug.Log($"绑定回调 - 绑定成功 - 重新登陆 userId:{userId} _userId:{_userId}");
CloseBindSelectView();
// 重新登陆了
ShowLoading();
return;
}
ToukaToast.ShowToast("绑定成功");
ShowUserCenter();
return;
}
ToukaToast.ShowToast($"绑定失败 {msg}");
};
ShowLoading();
}
private static void CreateButton(Transform rootViewTransform, string content, out Button myButton)
{
var rootVector2 = rootViewTransform.GetComponent<RectTransform>().sizeDelta;
// 创建一个Button对象
var buttonGo = new GameObject("MyButton");
myButton = buttonGo.AddComponent<Button>();
var addComponent = buttonGo.AddComponent<RectTransform>();
buttonGo.AddComponent<Image>();
var sizeDelta = addComponent.sizeDelta;
addComponent.sizeDelta = new Vector2(rootVector2.x, sizeDelta.y);
// 设置Button的位置和大小
myButton.transform.SetParent(rootViewTransform);
myButton.transform.localPosition = Vector3.zero;
myButton.transform.localScale = Vector3.one;
// image.sprite = Resources.Load("UISprite") as Sprite;
var textGo = new GameObject("Text");
var text = textGo.AddComponent<Text>();
var textRectTransform = textGo.GetComponent<RectTransform>();
textRectTransform.anchorMin = new Vector2(0, 0);
textRectTransform.anchorMax = new Vector2(1, 1);
textRectTransform.pivot = new Vector2(0.5f, 0.5f);
text.transform.SetParent(addComponent);
textRectTransform.localPosition = new Vector3(0, 0, 0);
textRectTransform.sizeDelta = new Vector2(0, 0);
text.text = content;
text.fontSize = 50;
text.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
text.alignment = TextAnchor.MiddleCenter;
text.color = new Color(50 / 255f, 50 / 255f, 50 / 255f, 255 / 255f);
}
private void InitBindSelectView(string[] userIdList)
{
userCenter.gameObject.SetActive(false);
PanelUserCenter_BindSelect.gameObject.SetActive(true);
var rootViewTransform = PanelUserCenter_BindSelect.Find("BindListView");
// foreach (Transform o in rootViewTransform)
// {
// Destroy(o.gameObject);
// }
foreach (var userId in userIdList)
{
var button = userId.Equals(_userId)
? rootViewTransform.Find("Button_Bind_userId_current").GetComponent<Button>()
: rootViewTransform.Find("Button_Bind_userId_other").GetComponent<Button>();
button.GetComponentInChildren<Text>().text = userId;
button.onClick.AddListener(() =>
{
TKGSDKManager.Instance.ForceBindAccount(userId, _bindAccountCallback);
});
}
}
private void CloseBindSelectView()
{
PanelUserCenter_BindSelect.gameObject.SetActive(false);
}
private void ShowLoading()
{
CloseBindSelectView();
loading.gameObject.SetActive(true);
loginView.gameObject.SetActive(false);
userCenter.gameObject.SetActive(false);
InitShowLoading();
}
private void InitShowLoading()
{
if (!TKGSDKManager.Instance.IsCanAutoLogin())
{
Debug.Log("显示登陆界面");
ShowLoginView();
}
else
{
Debug.Log("发起自动登陆");
new Thread(() =>
{
Thread.Sleep(1500);
Loom.QueueOnMainThread(obj =>
{
_loginType = LoginType.LOGIN_BY_AUTO;
TKGSDKManager.Instance.AutoLogin(_loginAction);
}, "");
}).Start();
}
}
private void ShowLoginView()
{
CloseBindSelectView();
loading.gameObject.SetActive(false);
loginView.gameObject.SetActive(true);
userCenter.gameObject.SetActive(false);
InitLoginView();
}
private void InitLoginView()
{
foreach (Transform o in loginView_LoginChannelPanelRoot)
{
Destroy(o.gameObject);
}
foreach (var loginType in TKGSDKManager.Instance.AvailableLoginChannelList())
{
CreateButton(loginView_LoginChannelPanelRoot, LoginTypeToString(loginType), out var btn);
btn.onClick.AddListener(() =>
{
_loginType = loginType;
TKGSDKManager.Instance.Login(loginType, _loginAction);
});
}
}
private void ShowUserCenter()
{
CloseBindSelectView();
loading.gameObject.SetActive(false);
loginView.gameObject.SetActive(false);
userCenter.gameObject.SetActive(true);
InitShowUserCenter();
}
private void InitShowUserCenter()
{
userCenter_userId.GetComponent<Text>().text = _userId;
userCenter_token.GetComponent<Text>().text = _token;
userCenter_userType.GetComponent<Text>().text = LoginTypeToString(_userType);
userCenter_loginType.GetComponent<Text>().text = LoginTypeToString(_loginType);
InitBindChannelView();
}
private void InitBindChannelView()
{
btnBinded.gameObject.SetActive(false);
btnBindFacebook.gameObject.SetActive(false);
btnBindGoogle.gameObject.SetActive(false);
if (TKGSDKManager.Instance.GetAccountType() == LoginType.LOGIN_BY_GUESTER)
{
foreach (var loginType in TKGSDKManager.Instance.AvailableLoginChannelList()
.Where(loginType => loginType != LoginType.LOGIN_BY_GUESTER))
{
switch (loginType)
{
case LoginType.LOGIN_BY_FACEBOOK:
btnBindFacebook.gameObject.SetActive(true);
break;
case LoginType.LOGIN_BY_GOOGLE:
btnBindGoogle.gameObject.SetActive(true);
break;
}
}
}
else
{
btnBinded.gameObject.SetActive(true);
btnBindFacebook.gameObject.SetActive(false);
btnBindGoogle.gameObject.SetActive(false);
}
// if (TKGSDKManager.Instance.GetAccountType() == LoginType.LOGIN_BY_GUESTER)
// {
// userCenter_BindView.gameObject.SetActive(true);
// foreach (Transform o in userCenter_BindChannelRoot)
// {
// Destroy(o.gameObject);
// }
//
// foreach (var loginType in TKGSDKManager.Instance.AvailableLoginChannelList())
// {
// if (loginType == LoginType.LOGIN_BY_GUESTER)
// {
// continue;
// }
//
// var myButton = Resources.Load<GameObject>("MyButton");
// var instantiate = Instantiate(myButton, userCenter_BindChannelRoot);
// var btn = instantiate.GetComponent<Button>();
// btn.GetComponentInChildren<Text>().text = LoginTypeToString(loginType);
// btn.onClick.AddListener(() => { TKGSDKManager.Instance.BindAccount(loginType, _bindAccountCallback); });
// }
// }
// else
// {
// userCenter_BindView.gameObject.SetActive(false);
// }
}
public void OnClickLogout()
{
TKGSDKManager.Instance.Logout(ShowLoginView);
}
public void OnClickDeleteAccount()
{
TKGSDKManager.Instance.DeleteAccount((status, s) =>
{
Debug.Log($"删除账号的回调: status : {status} s : {s}");
if (status == DeleteStatus.DELETE_ACCOUNT_SUCC)
{
ToukaToast.ShowToast("删除账号的回调 - 退出游戏");
ShowLoading();
}
else
{
ToukaToast.ShowToast("删除账号的回调 - 删除失败");
}
});
}
public void OnClickSaveCloud()
{
var s = $"{_userId} - {_userType} - {_token}";
TKGSDKManager.Instance.SaveCloudArchiving(s,
(status, msg) => { ToukaToast.ShowToast($"保存成功 : status : {status} msg : {msg}"); });
}
public void OnClickDetailCloud()
{
TKGSDKManager.Instance.DetailCloudArchiving((status, msg) =>
{
ToukaToast.ShowToast($"获取信息成功 : status : {status} msg : {msg}");
});
}
public void OnClickBindGoogle()
{
TKGSDKManager.Instance.BindAccount(LoginType.LOGIN_BY_GOOGLE, _bindAccountCallback);
}
public void OnClickBindFacebook()
{
TKGSDKManager.Instance.BindAccount(LoginType.LOGIN_BY_FACEBOOK, _bindAccountCallback);
}
public void OnClickGoScene()
{
SceneManager.LoadScene("ToukaSDKDemo");
}
private string LoginTypeToString(LoginType loginType)
{
var res = "";
switch (loginType)
{
case LoginType.LOGIN_BY_GUESTER:
res = "guester";
break;
case LoginType.LOGIN_BY_EMAIL:
res = "email";
break;
case LoginType.LOGIN_BY_GOOGLE:
res = "google";
break;
case LoginType.LOGIN_BY_FACEBOOK:
res = "facebook";
break;
case LoginType.LOGIN_BY_Apple:
res = "apple";
break;
case LoginType.LOGIN_BY_AUTO:
res = "auto";
break;
default:
throw new ArgumentOutOfRangeException(nameof(loginType), loginType, null);
}
return res;
}
}