- login by token - save account info - logout remove accout info - iOS SKU list parser - iOS Pay
212 lines
6.5 KiB
C#
212 lines
6.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using asap.core;
|
|
using Newtonsoft.Json.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace tysdk
|
|
{
|
|
public partial class TYSdkFacade : MonoBehaviour
|
|
{
|
|
public class AccountInfo
|
|
{
|
|
private static Dictionary<string, EAccoutType> accoutTypeMap = new Dictionary<string, EAccoutType>(){
|
|
{"google", EAccoutType.hwGoogle},
|
|
{"fb", EAccoutType.hwFacebook},
|
|
{"tyGuest", EAccoutType.hwGuest}
|
|
};
|
|
|
|
public int userId;
|
|
public string token;
|
|
public string jwtToken;
|
|
public string strUserId => userId.ToString();
|
|
public string channelstr;
|
|
public EAccoutType channel => accoutTypeMap[channelstr];
|
|
|
|
private const string KEY_ACCOUNT_INFO = "KEY_ACCOUNT_INFO";
|
|
|
|
public void Save()
|
|
{
|
|
JObject jInfo = new JObject();
|
|
jInfo["channel"] = channelstr;
|
|
jInfo["token"] = token;
|
|
jInfo["userId"] = userId;
|
|
jInfo["jwtToken"] = jwtToken;
|
|
PlayerPrefs.SetString(KEY_ACCOUNT_INFO, jInfo.ToString());
|
|
}
|
|
|
|
public static void Remove()
|
|
{
|
|
PlayerPrefs.DeleteKey(KEY_ACCOUNT_INFO);
|
|
}
|
|
|
|
public static AccountInfo GetSavedAccoutInfo()
|
|
{
|
|
if (PlayerPrefs.HasKey(KEY_ACCOUNT_INFO))
|
|
{
|
|
var jInfo = JObject.Parse(PlayerPrefs.GetString(KEY_ACCOUNT_INFO));
|
|
return new AccountInfo()
|
|
{
|
|
userId = (int)jInfo["userId"],
|
|
token = (string)jInfo["token"],
|
|
channelstr = (string)jInfo["channel"],
|
|
jwtToken = (string)jInfo["jwtToken"],
|
|
};
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static AccountInfo _accountInfo;
|
|
public AccountInfo TYAccountInfo => _accountInfo;
|
|
|
|
private static IDictionary<string, Action<ITYSdkCallback>> callbacks = new Dictionary<string, Action<ITYSdkCallback>>();
|
|
|
|
private static TYSdkFacade _instance;
|
|
public static TYSdkFacade Instance
|
|
{
|
|
get
|
|
{
|
|
if (_instance == null)
|
|
{
|
|
_instance = new GameObject("TYSdkFacade").AddComponent<TYSdkFacade>();
|
|
DontDestroyOnLoad(_instance.gameObject);
|
|
}
|
|
return _instance;
|
|
}
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
#if UNITY_ANDROID
|
|
UnityBridgeFunc.InitSDK();
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
/*================================================
|
|
|
|
_ _
|
|
/ \ ___ ___ ___ _ _ _ __ | |_
|
|
/ _ \ / __/ __/ _ \| | | | '_ \| __|
|
|
/ ___ \ (_| (_| (_) | |_| | | | | |_
|
|
/_/ \_\___\___\___/ \__,_|_| |_|\__|
|
|
|
|
=================================================*/
|
|
|
|
|
|
public bool IsLoggedIn => _accountInfo != null;
|
|
|
|
public void Logout()
|
|
{
|
|
UnityEngine.Debug.Log("Logout");
|
|
if(_accountInfo != null) return;
|
|
{
|
|
UnityBridgeFunc.UnityLogOutByChannel(_accountInfo.channel);
|
|
}
|
|
|
|
_accountInfo = null;
|
|
AccountInfo.Remove();
|
|
}
|
|
|
|
public async Task<LoginInfo> Login(EAccoutType accoutType)
|
|
{
|
|
#if UNITY_EDITOR
|
|
await Task.Yield();
|
|
var deviceId = UnityEngine.Device.SystemInfo.deviceUniqueIdentifier.Split('-')[0].Substring(0,8);
|
|
|
|
var userId = (int)ulong.Parse(deviceId, System.Globalization.NumberStyles.HexNumber);
|
|
|
|
_accountInfo = new AccountInfo()
|
|
{
|
|
userId = userId,
|
|
};
|
|
|
|
return new LoginInfo()
|
|
{
|
|
isSuccess = true,
|
|
userId = userId
|
|
};
|
|
|
|
#elif UNITY_ANDROID || UNITY_IOS
|
|
|
|
var taskSource = new TaskCompletionSource<LoginInfo>();
|
|
callbacks.Add("LoginResult", (ITYSdkCallback callback) =>
|
|
{
|
|
taskSource.SetResult((LoginInfo)callback);
|
|
});
|
|
|
|
UnityBridgeFunc.UnityLogin(accoutType);
|
|
|
|
return await taskSource.Task;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
public async Task<LoginInfo> LoginByToken()
|
|
{
|
|
var accoutInfo = AccountInfo.GetSavedAccoutInfo();
|
|
if(accoutInfo == null) new LoginInfo();
|
|
|
|
var taskSource = new TaskCompletionSource<LoginInfo>();
|
|
callbacks.Add("LoginResult", (ITYSdkCallback callback) =>
|
|
{
|
|
taskSource.SetResult((LoginInfo)callback);
|
|
});
|
|
|
|
UnityBridgeFunc.UnityLoginByTokenFun(accoutInfo.token);
|
|
|
|
return await taskSource.Task;
|
|
}
|
|
|
|
public void LoginResult(string json)
|
|
{
|
|
Debug.Log("[TYSdkFacade] Login callback:");
|
|
var result = new LoginInfo();
|
|
var data = JObject.Parse(json);
|
|
var code = (int)data["code"];
|
|
result.code = code;
|
|
|
|
if (code == 0)
|
|
{
|
|
var loginData = data["respObj"]["result"];
|
|
|
|
_accountInfo = new AccountInfo()
|
|
{
|
|
userId = (int)loginData["userId"],
|
|
token = (string)loginData["token"],
|
|
jwtToken = (string)loginData["jwttoken"],
|
|
channelstr = (string)loginData["loginChannelTypeC"]
|
|
};
|
|
|
|
_accountInfo.Save();
|
|
|
|
|
|
result.isSuccess = true;
|
|
result.userId = _accountInfo.userId;
|
|
SetUserInfo();
|
|
}
|
|
|
|
if (callbacks.TryGetValue("LoginResult", out var action))
|
|
{
|
|
action.Invoke(result);
|
|
callbacks.Remove("LoginResult");
|
|
}
|
|
}
|
|
|
|
private void SetUserInfo()
|
|
{
|
|
if (_accountInfo == null) return;
|
|
var strUserId = _accountInfo.strUserId;
|
|
|
|
UnityBridgeFunc.SetGaUserInfo(strUserId);
|
|
}
|
|
}
|
|
}
|