382 lines
12 KiB
C#
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;
|
|
}
|
|
} |