LoginController.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System;
  4. using UnityEngine;
  5. using UnityEngine.Networking;
  6. using Newtonsoft.Json;
  7. /* Http控制器-登录 */
  8. public class LoginController : JCUnityLib.Singleton<LoginController>
  9. {
  10. public IEnumerator LoginNormal(string username, string password, Action<RequestResult> callback) {
  11. Debug.Log("LoginNormal:"+ username);
  12. string url = CommonConfig.gateServerURL + "/gameLogin/loginNormal";
  13. WWWForm form = new WWWForm();
  14. form.AddField("username", username);
  15. form.AddField("password", password);
  16. form.AddField("serverIndex", CommonConfig.serverIndex);
  17. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  18. yield return request.SendWebRequest();
  19. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  20. if (callback != null) callback(requestResult);
  21. }
  22. }
  23. public IEnumerator LoginByWX(string loginCode, Action<RequestResult> callback) {
  24. string url = CommonConfig.gateServerURL + "/gameLogin/loginByWX";
  25. WWWForm form = new WWWForm();
  26. form.AddField("loginCode", loginCode);
  27. form.AddField("serverIndex", CommonConfig.serverIndex);
  28. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  29. request.timeout = 10;
  30. yield return request.SendWebRequest();
  31. RequestResult requestResult = new RequestResult();
  32. if (request.result == UnityWebRequest.Result.Success) {
  33. requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  34. }
  35. if (callback != null) callback(requestResult);
  36. }
  37. }
  38. public IEnumerator LoginByWX_WithAppID(string loginCode, string appid, Action<RequestResult> callback)
  39. {
  40. string url = CommonConfig.gateServerURL + "/gameLogin/loginAppIDByWX";
  41. WWWForm form = new WWWForm();
  42. form.AddField("loginCode", loginCode);
  43. form.AddField("serverIndex", CommonConfig.serverIndex);
  44. form.AddField("appid", appid);
  45. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  46. {
  47. request.timeout = 10;
  48. yield return request.SendWebRequest();
  49. RequestResult requestResult = new RequestResult();
  50. if (request.result == UnityWebRequest.Result.Success)
  51. {
  52. requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  53. }
  54. if (callback != null) callback(requestResult);
  55. }
  56. }
  57. public IEnumerator LoginByApple(string identityToken, string email, string fullName, Action<RequestResult> callback)
  58. {
  59. string url = CommonConfig.gateServerURL + "/gameLogin/loginByApple";
  60. WWWForm form = new WWWForm();
  61. form.AddField("identityToken", identityToken);
  62. form.AddField("email", email);
  63. form.AddField("fullName", fullName);
  64. form.AddField("serverIndex", CommonConfig.serverIndex);
  65. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  66. {
  67. request.timeout = 10;
  68. yield return request.SendWebRequest();
  69. RequestResult requestResult = new RequestResult();
  70. if (request.result == UnityWebRequest.Result.Success)
  71. {
  72. requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  73. }
  74. if (callback != null) callback(requestResult);
  75. }
  76. }
  77. public IEnumerator DdeleteUserByApple(string identityToken, Action<RequestResult> callback)
  78. {
  79. string url = CommonConfig.gateServerURL + "/gameLogin/deleteUserByApple";
  80. WWWForm form = new WWWForm();
  81. form.AddField("identityToken", identityToken);
  82. form.AddField("serverIndex", CommonConfig.serverIndex);
  83. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  84. {
  85. request.timeout = 10;
  86. yield return request.SendWebRequest();
  87. RequestResult requestResult = new RequestResult();
  88. if (request.result == UnityWebRequest.Result.Success)
  89. {
  90. requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  91. }
  92. if (callback != null) callback(requestResult);
  93. }
  94. }
  95. public IEnumerator Register(string username, string password, Action<RequestResult> callback) {
  96. string url = CommonConfig.gateServerURL + "/gameLogin/register";
  97. WWWForm form = new WWWForm();
  98. form.AddField("username", username);
  99. form.AddField("password", password);
  100. form.AddField("serverIndex", CommonConfig.serverIndex);
  101. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  102. yield return request.SendWebRequest();
  103. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  104. if (callback != null) callback(requestResult);
  105. }
  106. }
  107. public IEnumerator Register2(string username, string password, string email, string phone, Action<RequestResult> callback) {
  108. string url = CommonConfig.gateServerURL + "/gameLogin/register2";
  109. WWWForm form = new WWWForm();
  110. form.AddField("username", username);
  111. form.AddField("password", password);
  112. form.AddField("email", email);
  113. form.AddField("phone", phone);
  114. form.AddField("serverIndex", CommonConfig.serverIndex);
  115. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  116. yield return request.SendWebRequest();
  117. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  118. if (callback != null) callback(requestResult);
  119. }
  120. }
  121. /// <summary>
  122. /// 使用短信/邮箱验证码注册(服务端 <c>/gameLogin/registerByCode</c>)。
  123. /// </summary>
  124. public IEnumerator RegisterByCode(
  125. string username,
  126. string password,
  127. string email,
  128. string phone,
  129. int smsOrEmailCode,
  130. Action<RequestResult> callback)
  131. {
  132. string url = CommonConfig.gateServerURL + "/gameLogin/registerByCode";
  133. WWWForm form = new WWWForm();
  134. form.AddField("username", username);
  135. form.AddField("password", password);
  136. form.AddField("email", email ?? "");
  137. form.AddField("phone", phone ?? "");
  138. form.AddField("serverIndex", CommonConfig.serverIndex);
  139. form.AddField("code", smsOrEmailCode);
  140. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  141. {
  142. yield return request.SendWebRequest();
  143. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  144. if (callback != null) callback(requestResult);
  145. }
  146. }
  147. public IEnumerator CompleteUserInfo(
  148. string username, string password,
  149. string nickname, int gender, string birthday,
  150. string countryCode, string stateCode, string cityCode,
  151. Action<RequestResult> callback
  152. ) {
  153. string url = CommonConfig.gateServerURL + "/gameLogin/completeUserInfo";
  154. WWWForm form = new WWWForm();
  155. form.AddField("username", username);
  156. form.AddField("password", password);
  157. form.AddField("nickname", nickname);
  158. form.AddField("gender", gender);
  159. form.AddField("birthday", birthday);
  160. form.AddField("countryCode", countryCode);
  161. form.AddField("stateCode", stateCode);
  162. form.AddField("cityCode", cityCode);
  163. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  164. yield return request.SendWebRequest();
  165. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  166. if (callback != null) callback(requestResult);
  167. }
  168. }
  169. /// <summary>
  170. /// 新版:凭 <c>registerByCode</c> 返回的 <c>registrationTicket</c> 完善资料(不传密码)。
  171. /// </summary>
  172. public IEnumerator CompleteUserInfoByTicket(
  173. string registrationTicket,
  174. int avatarId,
  175. string nickname, int gender, string birthday,
  176. string countryCode, string stateCode, string cityCode,
  177. Action<RequestResult> callback)
  178. {
  179. string url = CommonConfig.gateServerURL + "/gameLogin/completeUserInfoByTicket";
  180. WWWForm form = new WWWForm();
  181. form.AddField("registrationTicket", registrationTicket ?? "");
  182. form.AddField("avatarId", avatarId);
  183. form.AddField("nickname", nickname);
  184. form.AddField("gender", gender);
  185. form.AddField("birthday", birthday);
  186. form.AddField("countryCode", countryCode ?? "");
  187. form.AddField("stateCode", stateCode ?? "");
  188. form.AddField("cityCode", cityCode ?? "");
  189. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  190. {
  191. yield return request.SendWebRequest();
  192. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  193. if (callback != null) callback(requestResult);
  194. }
  195. }
  196. /// <summary>
  197. /// 已登录用户修改资料(ClientToken)。
  198. /// </summary>
  199. public IEnumerator UpdateProfile(
  200. int avatarId,
  201. string nickname, int gender, string birthday,
  202. string countryCode, string stateCode, string cityCode,
  203. Action<RequestResult> callback)
  204. {
  205. string url = CommonConfig.gateServerURL + "/gameLogin/updateProfile";
  206. WWWForm form = new WWWForm();
  207. form.AddField("token", PlayerPrefs.GetString(LoginMgr.LoginTokenKey));
  208. form.AddField("avatarId", avatarId);
  209. form.AddField("nickname", nickname);
  210. form.AddField("gender", gender);
  211. form.AddField("birthday", birthday);
  212. form.AddField("countryCode", countryCode ?? "");
  213. form.AddField("stateCode", stateCode ?? "");
  214. form.AddField("cityCode", cityCode ?? "");
  215. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  216. {
  217. yield return request.SendWebRequest();
  218. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  219. if (callback != null) callback(requestResult);
  220. }
  221. }
  222. /// <summary>从 <c>registerByCode</c> 成功响应的 data 中解析 registrationTicket。</summary>
  223. public static string TryGetRegistrationTicketFromData(object data)
  224. {
  225. if (data == null) return null;
  226. if (data is Newtonsoft.Json.Linq.JObject jo)
  227. return jo["registrationTicket"]?.ToString();
  228. if (data is string jsonText && jsonText.Length > 0)
  229. {
  230. try
  231. {
  232. var parsed = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(jsonText);
  233. return parsed?["registrationTicket"]?.ToString();
  234. }
  235. catch { }
  236. }
  237. return null;
  238. }
  239. public IEnumerator LoginByPhone(string phone, Action<RequestResult> callback) {
  240. string url = CommonConfig.gateServerURL + "/gameLogin/loginByPhone";
  241. WWWForm form = new WWWForm();
  242. form.AddField("phone", phone);
  243. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  244. yield return request.SendWebRequest();
  245. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  246. if (callback != null) callback(requestResult);
  247. }
  248. }
  249. public IEnumerator LoginByToken(Action<RequestResult> callback, string sceneName = null) {
  250. string url = CommonConfig.gateServerURL + "/gameLogin/loginByToken";
  251. WWWForm form = new WWWForm();
  252. form.AddField("token", PlayerPrefs.GetString(LoginMgr.LoginTokenKey));
  253. if (string.IsNullOrEmpty(sceneName))
  254. sceneName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;
  255. form.AddField("sceneName", sceneName);
  256. form.AddField("serverIndex", CommonConfig.serverIndex);
  257. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  258. request.timeout = 10;
  259. yield return request.SendWebRequest();
  260. RequestResult requestResult;
  261. if (request.result == UnityWebRequest.Result.Success)
  262. {
  263. try
  264. {
  265. requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  266. if (requestResult == null)
  267. requestResult = new RequestResult();
  268. }
  269. catch (Exception e)
  270. {
  271. Debug.LogError("LoginByToken parse fail: " + e.Message);
  272. requestResult = new RequestResult();
  273. }
  274. }
  275. else
  276. {
  277. requestResult = new RequestResult();
  278. Debug.LogError("LoginByToken Request Fail: " + request.result);
  279. }
  280. if (callback != null) callback(requestResult);
  281. }
  282. }
  283. public IEnumerator GetUserInfo(Action<RequestResult> callback)
  284. {
  285. string url = CommonConfig.gateServerURL + "/gameLogin/getUserInfo";
  286. WWWForm form = new WWWForm();
  287. form.AddField("token", PlayerPrefs.GetString(LoginMgr.LoginTokenKey));
  288. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  289. {
  290. request.timeout = 10;
  291. yield return request.SendWebRequest();
  292. RequestResult requestResult;
  293. if (request.result == UnityWebRequest.Result.Success)
  294. requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  295. else
  296. {
  297. requestResult = new RequestResult();
  298. }
  299. if (callback != null) callback(requestResult);
  300. }
  301. }
  302. /// <summary>
  303. /// 上传自定义头像
  304. /// </summary>
  305. /// <param name="texture"></param>
  306. /// <returns></returns>
  307. public IEnumerator UploadAvatar(Texture2D texture, Action<RequestResult> callback)
  308. {
  309. string url = $"{CommonConfig.gateServerURL}/SmartBowSDK/uploadAvatar";
  310. byte[] imageBytes = texture.EncodeToPNG();
  311. WWWForm form = new WWWForm();
  312. form.AddField("token", PlayerPrefs.GetString(LoginMgr.LoginTokenKey));
  313. form.AddField("tokenType", "client");
  314. form.AddBinaryData("file", imageBytes, "avatar.png", "image/png");
  315. using (UnityWebRequest uwr = UnityWebRequest.Post(url, form))
  316. {
  317. yield return uwr.SendWebRequest();
  318. RequestResult requestResult;
  319. if (uwr.result == UnityWebRequest.Result.Success)
  320. requestResult = JsonConvert.DeserializeObject<RequestResult>(uwr.downloadHandler.text);
  321. else
  322. {
  323. requestResult = new RequestResult();
  324. }
  325. if (callback != null) callback(requestResult);
  326. }
  327. }
  328. public IEnumerator ListUsernamesByEmail(string email, long timestamp, string sign, Action<RequestResult> callback) {
  329. string url = CommonConfig.gateServerURL + "/gameLogin/listUsernamesByEmail";
  330. WWWForm form = new WWWForm();
  331. form.AddField("email", email);
  332. form.AddField("timestamp", timestamp.ToString());
  333. form.AddField("sign", sign);
  334. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  335. yield return request.SendWebRequest();
  336. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  337. if (callback != null) callback(requestResult);
  338. }
  339. }
  340. public IEnumerator ListUsernamesByPhone(string phone, long timestamp, string sign, Action<RequestResult> callback) {
  341. string url = CommonConfig.gateServerURL + "/gameLogin/listUsernamesByPhone";
  342. WWWForm form = new WWWForm();
  343. form.AddField("phone", phone);
  344. form.AddField("timestamp", timestamp.ToString());
  345. form.AddField("sign", sign);
  346. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  347. yield return request.SendWebRequest();
  348. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  349. if (callback != null) callback(requestResult);
  350. }
  351. }
  352. public IEnumerator ResetPassword(string sign, long timestamp, string username, string password, Action<RequestResult> callback) {
  353. string url = CommonConfig.gateServerURL + "/gameLogin/resetPassword";
  354. WWWForm form = new WWWForm();
  355. form.AddField("sign", sign);
  356. form.AddField("timestamp", timestamp.ToString());
  357. form.AddField("username", username);
  358. form.AddField("password", password);
  359. using (UnityWebRequest request = UnityWebRequest.Post(url, form)) {
  360. yield return request.SendWebRequest();
  361. RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
  362. if (callback != null) callback(requestResult);
  363. }
  364. }
  365. /// <summary>
  366. /// 上传排行榜分数(定制)
  367. /// </summary>
  368. /// <param name="secret">密钥</param>
  369. /// <param name="taskId">任务类型</param>
  370. /// <param name="difficultType">难度</param>
  371. /// <param name="modeType">模式</param>
  372. /// <param name="deviceType">设备类型</param>
  373. /// <param name="score">分数(>=0)</param>
  374. /// <param name="callback">回调</param>
  375. public IEnumerator UploadCustomLeaderboardScore(string secret, int taskId, int difficultType, int modeType, int deviceType, int score, Action<RequestResult> callback)
  376. {
  377. string loginToken = PlayerPrefs.GetString(LoginMgr.LoginTokenKey);
  378. if (string.IsNullOrEmpty(loginToken))
  379. {
  380. callback?.Invoke(new RequestResult { msg = "尚未登录" });
  381. yield break;
  382. }
  383. if (score < 0)
  384. {
  385. callback?.Invoke(new RequestResult { msg = "分数不能小于0" });
  386. yield break;
  387. }
  388. string url = $"{CommonConfig.gateServerURL}/SmartBowSDK/UploadCustomLeaderboardScore";
  389. WWWForm form = new WWWForm();
  390. form.AddField("token", loginToken);
  391. form.AddField("tokenType", "client");
  392. form.AddField("secret", secret);
  393. form.AddField("taskId", taskId);
  394. form.AddField("difficultType", difficultType);
  395. form.AddField("modeType", modeType);
  396. form.AddField("deviceType", deviceType);
  397. form.AddField("score", score);
  398. yield return PostRequest(url, form, callback);
  399. }
  400. /// <summary>
  401. /// 获取排行榜(自定义)
  402. /// </summary>
  403. /// <param name="secret">密钥</param>
  404. /// <param name="taskId">任务类型</param>
  405. /// <param name="difficultType">难度</param>
  406. /// <param name="modeType">模式</param>
  407. /// <param name="deviceType">设备类型</param>
  408. /// <param name="timeType">时间维度</param>
  409. /// <param name="callback">回调</param>
  410. public IEnumerator GetCustomLeaderboard(string secret, int taskId, int difficultType, int modeType, int deviceType, int timeType, Action<RequestResult> callback)
  411. {
  412. string loginToken = PlayerPrefs.GetString(LoginMgr.LoginTokenKey);
  413. if (loginToken == null)
  414. {
  415. callback?.Invoke(new RequestResult { msg = "尚未登录" });
  416. yield break;
  417. }
  418. string url = $"{CommonConfig.gateServerURL}/SmartBowSDK/GetCustomLeaderboard";
  419. WWWForm form = new WWWForm();
  420. form.AddField("token", loginToken);
  421. form.AddField("tokenType", "client");
  422. form.AddField("secret", secret);
  423. form.AddField("taskId", taskId);
  424. form.AddField("difficultType", difficultType);
  425. form.AddField("modeType", modeType);
  426. form.AddField("deviceType", deviceType);
  427. form.AddField("timeType", timeType);
  428. yield return PostRequest(url, form, callback);
  429. }
  430. private IEnumerator PostRequest(string url, WWWForm form, Action<RequestResult> callback)
  431. {
  432. using (UnityWebRequest request = UnityWebRequest.Post(url, form))
  433. {
  434. yield return request.SendWebRequest();
  435. if (request.result == UnityWebRequest.Result.Success)
  436. callback?.Invoke(JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text));
  437. else
  438. callback?.Invoke(new RequestResult { msg = "网络请求失败: " + request.error });
  439. }
  440. }
  441. }
  442. public class RequestResult {
  443. public int code = -9999;
  444. public object data;
  445. public string msg;
  446. }