123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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<string, string> 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<Dictionary<string, string>>(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<string, string> formData = new();
- formData.Add("UUID", EnviromentSetting.UUID);
- StartCoroutine(WebController.PostRequest(url, formData, callback: QuickStartCallback));
- }
- void QuickStartCallback(string json)
- {
- var data = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
- if (data != null && data["status"] == "success")
- {
- PlayerPrefs.SetString("LoginToken", data["login_token"]);
- UserProperty.userId = data["user_id"];
- StartCoroutine(LoginTokenEvent());
- }
- }
- }
|