using System; using UnityEngine; using UnityEngine.Networking; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using Newtonsoft.Json; using UnityEngine.SceneManagement; using UnityEditor; /* 使用login token进行登录和数据读取保存 * TestDataInjection 是测试用的假数据注入 * LoginTokenCheck 验证login token是否有效,和服务器比对 */ public class LoginController : MonoBehaviour { // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { //启动自动采用Login Token 登录。其他登录方式为手动登录。 //StartCoroutine(LoginTokenRequest()); } // Update is called once per frame //void Update() //{ //} // LoginToken登录方法 IEnumerator LoginTokenEvent() { //yield return null; // 跳过第一帧(可以考虑去掉,数据加载已经移到awake()了。 string UUID = SystemInfo.deviceUniqueIdentifier; // 这里需要考虑这段代码执行在Enviroment Controller之前 string LoginToken = PlayerPrefs.GetString("LoginToken", null); string LoginTokenTime = PlayerPrefs.GetString("LoginTokenTime", null); // todo 比较LoginTokenTime 如果超时直接放弃后面代码。比较UUID是否是null如果是直接放弃后面代码 if (LoginToken == null) { yield break; }; if (LoginTokenTime == null) { yield break; }; DateTime tokenTime; DateTime now = DateTime.Now; if (DateTime.TryParse(LoginTokenTime, out tokenTime)) { TimeSpan span = now - tokenTime; if (span.TotalHours > 7 * 24) { yield break; } } else { yield break; } // 提交POST string url = "/api/login/token/"; Dictionary formData = new(); formData.Add("login_token", LoginToken); formData.Add("UUID", UUID); StartCoroutine(WebController.PostRequest(url, formData, callback:LoginTokenCallback)); } // Post之后callback的函数 void LoginTokenCallback(string json) { var data = JsonConvert.DeserializeObject>(json); if (data != null && data["status"] == "success") { PlayerPrefs.SetString("LoginToken", data["login_token"]); PlayerPrefs.SetString("LoginTokenTime", DateTime.Now.ToString()); EnviromentSetting.accessToken = data["access_token"]; EnviromentSetting.accessTokenReceivedTime = DateTime.Now; UserProperty.userId = data["user_id"]; } if (UserProperty.userId != null && EnviromentSetting.accessToken != null) { SceneManager.LoadScene("Home"); } } // Quick Start 登录方式,用UUID换取Login Token public void QuickStart() { string url = "/api/game/quick_start/"; Dictionary formData = new(); formData.Add("UUID", EnviromentSetting.UUID); StartCoroutine(WebController.PostRequest(url, formData, callback: QuickStartCallback)); } void QuickStartCallback(string json) { var data = JsonConvert.DeserializeObject>(json); if (data != null && data["status"] == "success") { PlayerPrefs.SetString("LoginToken", data["login_token"]); UserProperty.userId = data["user_id"]; StartCoroutine(LoginTokenEvent()); } } }