|
|
@@ -11,10 +11,263 @@ namespace SmartBowSDK
|
|
|
{
|
|
|
public SmartBowHelper smartBowHelper;
|
|
|
|
|
|
- private const string serverURL = "https://xmjssvr.cn/SmartBowBusinessServer";
|
|
|
+ // 本地 IP 地址(只在本地环境下生效)
|
|
|
+ static string localIPAddress = "192.168.0.108";
|
|
|
+
|
|
|
+ //是否使用本地环境
|
|
|
+ static bool isLocal = false;
|
|
|
+
|
|
|
+ // 服务器路径
|
|
|
+ static string serverPath = "/SmartBowBusinessServer";
|
|
|
+
|
|
|
+ // 最终服务器地址
|
|
|
+ static string serverURL => isLocal
|
|
|
+ ? $"http://{localIPAddress}:11432{serverPath}"
|
|
|
+ : $"https://xmjssvr.cn{serverPath}";
|
|
|
+
|
|
|
+ //private string serverURL = "https://xmjssvr.cn/SmartBowBusinessServer";
|
|
|
//private const string serverURL = "http://127.0.0.1:11332/SmartBowBusinessServer";
|
|
|
|
|
|
private string loginToken;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 运行时设置本地 IP 并启用本地环境
|
|
|
+ /// </summary>
|
|
|
+ public static void SetLocal(string ip)
|
|
|
+ {
|
|
|
+ isLocal = true;
|
|
|
+ localIPAddress = ip;
|
|
|
+ Debug.Log($"[SmartBowNetwork] 设置IP: {ip}");
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 发送手机验证码
|
|
|
+ /// </summary>
|
|
|
+ public void SendPhoneValidateCode(string phone, int language, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ string url = $"{serverURL}/phoneValidate/sendPhoneValidateCode" +
|
|
|
+ $"?phone={UnityWebRequest.EscapeURL(phone)}&language={language}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 验证手机验证码
|
|
|
+ /// </summary>
|
|
|
+ public void ValidatePhoneCode(string phone, int code, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ string url = $"{serverURL}/phoneValidate/validatePhone" +
|
|
|
+ $"?phone={UnityWebRequest.EscapeURL(phone)}&code={code}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发送邮箱验证码
|
|
|
+ /// </summary>
|
|
|
+ public void SendEmailValidateCode(string email, int language, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ string url = $"{serverURL}/emailValidate/sendEmailValidateCode" +
|
|
|
+ $"?email={UnityWebRequest.EscapeURL(email)}&language={language}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 验证邮箱验证码
|
|
|
+ /// </summary>
|
|
|
+ public void ValidateEmailCode(string email, int code, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ string url = $"{serverURL}/emailValidate/validateEmail" +
|
|
|
+ $"?email={UnityWebRequest.EscapeURL(email)}&code={code}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 用户注册
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="serverIndex">服务器索引</param>
|
|
|
+ /// <param name="username">用户名</param>
|
|
|
+ /// <param name="password">密码</param>
|
|
|
+ /// <param name="email">邮箱</param>
|
|
|
+ /// <param name="phone">手机号</param>
|
|
|
+ /// <param name="code">当前接收的code,海外用邮箱 serverIndex = 1,国内 serverIndex = 0用手机号</param>
|
|
|
+ /// <param name="callback">回调</param>
|
|
|
+ public void RegisterByCode(int serverIndex, string username, string password, string email, string phone,int code, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ string url = $"{serverURL}/gameLogin/registerByCode" +
|
|
|
+ $"?serverIndex={serverIndex}" +
|
|
|
+ $"&username={UnityWebRequest.EscapeURL(username)}" +
|
|
|
+ $"&password={UnityWebRequest.EscapeURL(password)}" +
|
|
|
+ $"&email={UnityWebRequest.EscapeURL(email)}" +
|
|
|
+ $"&phone={UnityWebRequest.EscapeURL(phone)}" +
|
|
|
+ $"&code={code}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ //public IEnumerator ListUsernamesByEmail(string email, long timestamp, string sign, Action<RequestResult> callback)
|
|
|
+ //{
|
|
|
+ // string url = serverURL + "/gameLogin/listUsernamesByEmail";
|
|
|
+ // WWWForm form = new WWWForm();
|
|
|
+ // form.AddField("email", email);
|
|
|
+ // form.AddField("timestamp", timestamp.ToString());
|
|
|
+ // form.AddField("sign", sign);
|
|
|
+ // using (UnityWebRequest request = UnityWebRequest.Post(url, form))
|
|
|
+ // {
|
|
|
+ // yield return request.SendWebRequest();
|
|
|
+ // RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
|
|
|
+ // if (callback != null) callback(requestResult);
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+ //public IEnumerator ListUsernamesByPhone(string phone, long timestamp, string sign, Action<RequestResult> callback)
|
|
|
+ //{
|
|
|
+ // string url = serverURL + "/gameLogin/listUsernamesByPhone";
|
|
|
+ // WWWForm form = new WWWForm();
|
|
|
+ // form.AddField("phone", phone);
|
|
|
+ // form.AddField("timestamp", timestamp.ToString());
|
|
|
+ // form.AddField("sign", sign);
|
|
|
+ // using (UnityWebRequest request = UnityWebRequest.Post(url, form))
|
|
|
+ // {
|
|
|
+ // yield return request.SendWebRequest();
|
|
|
+ // RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
|
|
|
+ // if (callback != null) callback(requestResult);
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+ //public IEnumerator ResetPassword(string sign, long timestamp, string username, string password, Action<RequestResult> callback)
|
|
|
+ //{
|
|
|
+ // string url = serverURL + "/gameLogin/resetPassword";
|
|
|
+ // WWWForm form = new WWWForm();
|
|
|
+ // form.AddField("sign", sign);
|
|
|
+ // form.AddField("timestamp", timestamp.ToString());
|
|
|
+ // form.AddField("username", username);
|
|
|
+ // form.AddField("password", password);
|
|
|
+ // using (UnityWebRequest request = UnityWebRequest.Post(url, form))
|
|
|
+ // {
|
|
|
+ // yield return request.SendWebRequest();
|
|
|
+ // RequestResult requestResult = JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text);
|
|
|
+ // if (callback != null) callback(requestResult);
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ //重置密码
|
|
|
+ public void ResetPasswordByAccount(int serverIndex,string account, string codeAccount, int code, string newPassword, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ StartCoroutine(ResetPasswordByAccountCoroutine(serverIndex,account, codeAccount, code, newPassword, callback));
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 重置密码流程,先验证Code,在获取list,再重置对应的账号。
|
|
|
+ /// 基本和弓箭app流程一样
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="serverIndex"></param>
|
|
|
+ /// <param name="account"></param>
|
|
|
+ /// <param name="codeAccount"></param>
|
|
|
+ /// <param name="code"></param>
|
|
|
+ /// <param name="newPassword"></param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private IEnumerator ResetPasswordByAccountCoroutine(int serverIndex,string account,string codeAccount, int code, string newPassword, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ RequestResult validateResult = null;
|
|
|
+
|
|
|
+ if (!(serverIndex >= 0 && serverIndex <= 2))
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult
|
|
|
+ {
|
|
|
+ code = -10,
|
|
|
+ msg = "serverIndex 错误!",
|
|
|
+ });
|
|
|
+ yield break;
|
|
|
+ }
|
|
|
+
|
|
|
+ bool isPhone = serverIndex == 0 ? true : false;
|
|
|
+ // 1. 验证验证码
|
|
|
+ string validateUrl = isPhone
|
|
|
+ ? $"{serverURL}/phoneValidate/validatePhone?phone={UnityWebRequest.EscapeURL(codeAccount)}&code={code}"
|
|
|
+ : $"{serverURL}/emailValidate/validateEmail?email={UnityWebRequest.EscapeURL(codeAccount)}&code={code}";
|
|
|
+
|
|
|
+ yield return Post(validateUrl, new WWWForm(), result => validateResult = result);
|
|
|
+
|
|
|
+ if (validateResult == null || validateResult.code != 0)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult
|
|
|
+ {
|
|
|
+ code = -10,
|
|
|
+ msg = isPhone ? "手机号验证码验证失败" : "邮箱验证码验证失败"
|
|
|
+ });
|
|
|
+ yield break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 提取验证信息
|
|
|
+ JObject data = validateResult.data as JObject;
|
|
|
+ string verifiedAccount = data.Value<string>(isPhone ? "phone" : "email");
|
|
|
+ long timestamp = data.Value<long>("timestamp");
|
|
|
+ string sign = data.Value<string>("sign");
|
|
|
+
|
|
|
+ // 3. 查询用户名
|
|
|
+ RequestResult listResult = null;
|
|
|
+ string listUrl = isPhone
|
|
|
+ ? $"{serverURL}/gameLogin/listUsernamesByPhone"
|
|
|
+ : $"{serverURL}/gameLogin/listUsernamesByEmail";
|
|
|
+
|
|
|
+ WWWForm listForm = new WWWForm();
|
|
|
+ listForm.AddField(isPhone ? "phone" : "email", verifiedAccount);
|
|
|
+ listForm.AddField("timestamp", timestamp.ToString());
|
|
|
+ listForm.AddField("sign", sign);
|
|
|
+
|
|
|
+ yield return Post(listUrl, listForm, result => listResult = result);
|
|
|
+
|
|
|
+ if (listResult == null || listResult.code != 0)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { code = -11, msg = "未找到绑定的账号" });
|
|
|
+ yield break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 精确匹配账号名再重置密码
|
|
|
+ JArray users = listResult.data as JArray;
|
|
|
+ bool matched = false;
|
|
|
+
|
|
|
+ foreach (var item in users)
|
|
|
+ {
|
|
|
+ string username = item.Value<string>("username");
|
|
|
+ long ts = item.Value<long>("timestamp");
|
|
|
+ string sgn = item.Value<string>("sign");
|
|
|
+
|
|
|
+ SmartBowLogger.Log(this,$"server: {username} vs account: {account}");
|
|
|
+
|
|
|
+ if (account.ToLower() == username.ToLower())
|
|
|
+ {
|
|
|
+ matched = true;
|
|
|
+
|
|
|
+ SmartBowLogger.Log(this,"匹配成功:" + username.ToLower());
|
|
|
+
|
|
|
+ // 5. 请求重置密码
|
|
|
+ string resetUrl = $"{serverURL}/gameLogin/resetPassword";
|
|
|
+ WWWForm resetForm = new WWWForm();
|
|
|
+ resetForm.AddField("sign", sgn);
|
|
|
+ resetForm.AddField("timestamp", ts.ToString());
|
|
|
+ resetForm.AddField("username", username);
|
|
|
+ resetForm.AddField("password", newPassword);
|
|
|
+
|
|
|
+ yield return Post(resetUrl, resetForm, callback);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 6. 如果没有匹配账号,提示
|
|
|
+ if (!matched)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { code = -12, msg = "未找到对应账号绑定" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 登录
|
|
|
+ /// gameID和channelID请询问插件给予者给予
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="gameID"></param>
|
|
|
+ /// <param name="channelID"></param>
|
|
|
+ /// <param name="username"></param>
|
|
|
+ /// <param name="password"></param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
public void Login(string gameID, string channelID, string username, string password, Action<LoginResult> callback)
|
|
|
{
|
|
|
WWWForm form = new WWWForm();
|
|
|
@@ -32,13 +285,19 @@ namespace SmartBowSDK
|
|
|
callback?.Invoke(loginResult);
|
|
|
}));
|
|
|
}
|
|
|
-
|
|
|
+ /// <summary>
|
|
|
+ /// 登出
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="callback"></param>
|
|
|
public void Logout(Action<bool> callback)
|
|
|
{
|
|
|
loginToken = null;
|
|
|
callback?.Invoke(true);
|
|
|
}
|
|
|
-
|
|
|
+ /// <summary>
|
|
|
+ /// 获取用户信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="callback"></param>
|
|
|
public void GetUserInfo(Action<GetUserInfoResult> callback)
|
|
|
{
|
|
|
GetUserInfoResult getUserInfoResult = new GetUserInfoResult();
|
|
|
@@ -62,6 +321,240 @@ namespace SmartBowSDK
|
|
|
callback?.Invoke(getUserInfoResult);
|
|
|
}));
|
|
|
}
|
|
|
+ /// <summary>
|
|
|
+ /// 设置用户名
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="nickname">用户名字</param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
+ public void SaveUserName(string nickname, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/saveUserName?token={loginToken}&nickname={UnityWebRequest.EscapeURL(nickname)}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 设置用户的多个信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userInfo">用户信息对象</param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
+ public void SaveUserInfo(UserInfoExtended userInfo, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ string json = JsonConvert.SerializeObject(userInfo);
|
|
|
+ UnityWebRequest request = new UnityWebRequest($"{serverURL}/SmartBowSDK/saveUserInfo?token={loginToken}", "POST");
|
|
|
+ byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json);
|
|
|
+ request.uploadHandler = new UploadHandlerRaw(bodyRaw);
|
|
|
+ request.downloadHandler = new DownloadHandlerBuffer();
|
|
|
+ request.SetRequestHeader("Content-Type", "application/json");
|
|
|
+
|
|
|
+ StartCoroutine(SendRequest(request, callback));
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 根据密钥上传分数
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="secret"></param>
|
|
|
+ /// <param name="score"></param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
+ public void UploadSeasonSinglePlayerGameRes(string secret, int score, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/UploadSeasonSinglePlayerGameRes?token={loginToken}&secret={UnityWebRequest.EscapeURL(secret)}&score={score}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 上传赛季PK分数
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="roomKey">PK房间ID</param>
|
|
|
+ /// <param name="secret">密钥,游戏类型(解析得到)</param>
|
|
|
+ /// <param name="p2ID">对手ID</param>
|
|
|
+ /// <param name="gameRes">结果(0:我赢;1:他赢;2:平局)</param>
|
|
|
+ /// <param name="callback">回调</param>
|
|
|
+ public void UploadSeasonPKGameRes(string roomKey, string secret, int p2ID, int gameRes, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/UploadSeasonPKGameRes" +
|
|
|
+ $"?token={loginToken}" +
|
|
|
+ $"&roomKey={UnityWebRequest.EscapeURL(roomKey)}" +
|
|
|
+ $"&secret={UnityWebRequest.EscapeURL(secret)}" +
|
|
|
+ $"&p2ID={p2ID}" +
|
|
|
+ $"&gameRes={gameRes}";
|
|
|
+
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 根据密钥获取排行榜
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="secret">密钥</param>
|
|
|
+ /// <param name="rankArea">排行区域 3:国,1:省,2市,其他:全球</param>
|
|
|
+ /// <param name="country">国家</param>
|
|
|
+ /// <param name="state">省</param>
|
|
|
+ /// <param name="city">城市</param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
+ public void GetSeasonRankListByGameType(string secret, int rankArea, string country, string state, string city, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/GetSeasonRankListByGameType?" +
|
|
|
+ $"token={loginToken}" +
|
|
|
+ $"&rankArea={rankArea}" +
|
|
|
+ $"&secret={UnityWebRequest.EscapeURL(secret)}" +
|
|
|
+ $"&countryCode={UnityWebRequest.EscapeURL(country)}" +
|
|
|
+ $"&stateCode={UnityWebRequest.EscapeURL(state)}" +
|
|
|
+ $"&cityCode={UnityWebRequest.EscapeURL(city)}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 根据密钥获取自定义排行榜
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="secret">密钥</param>
|
|
|
+ /// <param name="rankArea">排行区域 3:国,1:省,2市,其他:全球</param>
|
|
|
+ /// <param name="country">国家</param>
|
|
|
+ /// <param name="state">省</param>
|
|
|
+ /// <param name="city">市</param>
|
|
|
+ /// <param name="rankType">1是降序,其他是升序(不能小于0)</param>
|
|
|
+ /// <param name="count">数量:不能小于0</param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
+ public void GetSeasonRankListByCustom(string secret, int rankArea, string country, string state, string city, int rankType, int count, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/GetSeasonRankListByCustom?" +
|
|
|
+ $"token={loginToken}" +
|
|
|
+ $"&rankArea={rankArea}" +
|
|
|
+ $"&secret={UnityWebRequest.EscapeURL(secret)}" +
|
|
|
+ $"&countryCode={UnityWebRequest.EscapeURL(country)}" +
|
|
|
+ $"&stateCode={UnityWebRequest.EscapeURL(state)}" +
|
|
|
+ $"&cityCode={UnityWebRequest.EscapeURL(city)}" +
|
|
|
+ $"&rankType={rankType}" +
|
|
|
+ $"&count={count}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 获取自己的用户信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="secret">密钥</param>
|
|
|
+ /// <param name="rankArea">排行区域 3:国,1:省,2市,其他:全球</param>
|
|
|
+ /// <param name="country">国家</param>
|
|
|
+ /// <param name="state">省</param>
|
|
|
+ /// <param name="city">市</param>
|
|
|
+ /// <param name="rankType">1是降序,其他是升序(不能小于0)</param>
|
|
|
+ /// <param name="count">数量:不能小于0</param>
|
|
|
+ /// <param name="callback"></param>
|
|
|
+ public void GetUserRankByGameType(string secret, int rankArea, string country, string state, string city, int rankType, int count, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/getUserRankByGameType?" +
|
|
|
+ $"token={loginToken}" +
|
|
|
+ $"&rankArea={rankArea}" +
|
|
|
+ $"&secret={UnityWebRequest.EscapeURL(secret)}" +
|
|
|
+ $"&countryCode={UnityWebRequest.EscapeURL(country)}" +
|
|
|
+ $"&stateCode={UnityWebRequest.EscapeURL(state)}" +
|
|
|
+ $"&cityCode={UnityWebRequest.EscapeURL(city)}" +
|
|
|
+ $"&rankType={rankType}" +
|
|
|
+ $"&count={count}";
|
|
|
+ StartCoroutine(Post(url, new WWWForm(), callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 上传排行榜分数(定制)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="secret">密钥</param>
|
|
|
+ /// <param name="taskId">任务类型</param>
|
|
|
+ /// <param name="difficultType">难度</param>
|
|
|
+ /// <param name="modeType">模式</param>
|
|
|
+ /// <param name="deviceType">设备类型</param>
|
|
|
+ /// <param name="score">分数(>=0)</param>
|
|
|
+ /// <param name="callback">回调</param>
|
|
|
+ public void UploadCustomLeaderboardScore(string secret, int taskId, int difficultType, int modeType, int deviceType, int score, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (score < 0)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "分数不能小于0" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/UploadCustomLeaderboardScore";
|
|
|
+
|
|
|
+ WWWForm form = new WWWForm();
|
|
|
+ form.AddField("token", loginToken);
|
|
|
+ form.AddField("secret", secret);
|
|
|
+ form.AddField("taskId", taskId);
|
|
|
+ form.AddField("difficultType", difficultType);
|
|
|
+ form.AddField("modeType", modeType);
|
|
|
+ form.AddField("deviceType", deviceType);
|
|
|
+ form.AddField("score", score);
|
|
|
+
|
|
|
+ StartCoroutine(Post(url, form, callback));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取排行榜(自定义)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="secret">密钥</param>
|
|
|
+ /// <param name="taskId">任务类型</param>
|
|
|
+ /// <param name="difficultType">难度</param>
|
|
|
+ /// <param name="modeType">模式</param>
|
|
|
+ /// <param name="deviceType">设备类型</param>
|
|
|
+ /// <param name="timeType">时间维度</param>
|
|
|
+ /// <param name="callback">回调</param>
|
|
|
+ public void GetCustomLeaderboard(string secret, int taskId, int difficultType, int modeType, int deviceType, int timeType, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ if (loginToken == null)
|
|
|
+ {
|
|
|
+ callback?.Invoke(new RequestResult { msg = "尚未登录" });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ string url = $"{serverURL}/SmartBowSDK/GetCustomLeaderboard";
|
|
|
+
|
|
|
+ WWWForm form = new WWWForm();
|
|
|
+ form.AddField("token", loginToken);
|
|
|
+ form.AddField("secret", secret);
|
|
|
+ form.AddField("taskId", taskId);
|
|
|
+ form.AddField("difficultType", difficultType);
|
|
|
+ form.AddField("modeType", modeType);
|
|
|
+ form.AddField("deviceType", deviceType);
|
|
|
+ form.AddField("timeType", timeType);
|
|
|
+
|
|
|
+ StartCoroutine(Post(url, form, callback));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
private string GetCalibrateDataStorageLocalKey(string mac)
|
|
|
{
|
|
|
@@ -126,6 +619,15 @@ namespace SmartBowSDK
|
|
|
callback?.Invoke(sprite);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private IEnumerator SendRequest(UnityWebRequest request, Action<RequestResult> callback)
|
|
|
+ {
|
|
|
+ yield return request.SendWebRequest();
|
|
|
+ if (request.result == UnityWebRequest.Result.Success)
|
|
|
+ callback?.Invoke(JsonConvert.DeserializeObject<RequestResult>(request.downloadHandler.text));
|
|
|
+ else
|
|
|
+ callback?.Invoke(new RequestResult());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public class RequestResult
|
|
|
@@ -178,4 +680,39 @@ namespace SmartBowSDK
|
|
|
/// </summary>
|
|
|
public int gender;
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 用户数据
|
|
|
+ /// </summary>
|
|
|
+ public class UserInfoExtended
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// //头像url
|
|
|
+ /// </summary>
|
|
|
+ public string avatarUrl;
|
|
|
+ /// <summary>
|
|
|
+ /// //名字
|
|
|
+ /// </summary>
|
|
|
+ public string nickname;
|
|
|
+ /// <summary>
|
|
|
+ /// //性别 1 男,2女
|
|
|
+ /// </summary>
|
|
|
+ public int gender;
|
|
|
+ /// <summary>
|
|
|
+ /// 生日
|
|
|
+ /// </summary>
|
|
|
+ public string birthday;
|
|
|
+ /// <summary>
|
|
|
+ /// 国家
|
|
|
+ /// </summary>
|
|
|
+ public string country;
|
|
|
+ /// <summary>
|
|
|
+ /// 省
|
|
|
+ /// </summary>
|
|
|
+ public string state;
|
|
|
+ /// <summary>
|
|
|
+ /// 城市
|
|
|
+ /// </summary>
|
|
|
+ public string city;
|
|
|
+ }
|
|
|
}
|