using UnityEngine; using Firebase; using UnityEngine.Events; using System.Threading.Tasks; using System; public class FirebaseManager : MonoBehaviour { public Firebase.Auth.FirebaseAuth auth; public Firebase.Auth.FirebaseUser user; void Start() { auth = Firebase.Auth.FirebaseAuth.DefaultInstance; auth.StateChanged += AuthStateChanged; } public async Task Register(string email,string password){ try{ var RegisterTask = auth.CreateUserWithEmailAndPasswordAsync(email, password); await RegisterTask; if(RegisterTask.IsCanceled){ return "2-取消"; }else if(RegisterTask.IsFaulted){ Debug.Log(RegisterTask.Exception.InnerException.Message); return "1-"+RegisterTask.Exception.InnerException.Message; }else if (RegisterTask.IsCompletedSuccessfully){ Debug.Log("註冊成功"); string userID = RegisterTask.Result.User.UserId; ulong creationDate = RegisterTask.Result.User.Metadata.CreationTimestamp; double num; SQL_game_sys.SQL_使用者_查詢編號(); if(SQL_Module.dr.Read()){num = double.Parse(SQL_Module.dr[0].ToString());}else{num =0;} num += 1; SQL_game_sys.SQL_使用者_新增(userID,creationDate.ToString() ,"遊客",num.ToString().PadLeft(9,'0'), password,"0","","0"); return "0-註冊成功"; }else{ Debug.Log("註冊失敗,未知錯誤"); return "1-未知错误"; } }catch(Exception ex){ Debug.Log("註冊失敗:" + ex.Message); return "1-" + ex.Message; } } public async Task 登入(string email,string password){ try{ var signInTask = auth.SignInWithEmailAndPasswordAsync(email, password); await signInTask; if (signInTask.IsFaulted){ Debug.Log(signInTask.Exception.InnerException.Message); return "1-" + signInTask.Exception.InnerException.Message; }else if (signInTask.IsCompletedSuccessfully){ Debug.Log("登录成功!"); Main.Global.登入條件=0; return "0-登录成功!"; }else{ Debug.Log("登录失败:未知错误"); return "1-未知错误"; } }catch (Exception ex){ Debug.Log("登录失败:" + ex.Message); return "1-" + ex.Message; } } /*public async Task Google登入(string googleIdToken,string googleAccessToken){ try{ Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken); var googlesignintask=auth.SignInAndRetrieveDataWithCredentialAsync(credential); await googlesignintask; if (googlesignintask.IsFaulted) { return "1-1."+googlesignintask.Exception.InnerException.Message; }else if(googlesignintask.IsCompletedSuccessfully){ Main.Global.登入條件=1; string userID = googlesignintask.Result.User.UserId; ulong creationDate = googlesignintask.Result.User.Metadata.CreationTimestamp; SQL_game_sys.SQL_使用者_查詢暱稱(userID); if(SQL_Module.dr.Read()){}else{ double num;SQL_game_sys.SQL_使用者_查詢編號(); if(SQL_Module.dr.Read()){num = double.Parse(SQL_Module.dr[0].ToString());}else{num =0;} num += 1; SQL_game_sys.SQL_使用者_新增(userID,creationDate.ToString(),"GOOGLE遊客",num.ToString().PadLeft(9,'0')); } return "0"; }else { return "1-2.未知错误"; } }catch (Exception ex){ return "1-3." + ex.Message; } }*/ public async Task AppleSignIn(string appletoken,string row_nonce,string password){ Firebase.Auth.Credential credential = Firebase.Auth.OAuthProvider.GetCredential("apple.com",appletoken,row_nonce); var applesignintask = auth.SignInWithCredentialAsync(credential); await applesignintask; if(applesignintask.IsCanceled){ return "3-1.Cabceld"; }else if(applesignintask.IsFaulted){ return "3-2."+applesignintask.Exception.InnerException.Message; }else if(applesignintask.IsCompletedSuccessfully){ string userID = applesignintask.Result.UserId; ulong creationDate = applesignintask.Result.Metadata.CreationTimestamp; string email = applesignintask.Result.Email; SQL_game_sys.SQL_使用者_查詢暱稱(userID); if(SQL_Module.dr.Read()){}else{ Main.Global.使用者ID=password; double num;SQL_game_sys.SQL_使用者_查詢編號(); if(SQL_Module.dr.Read()){num = double.Parse(SQL_Module.dr[0].ToString());}else{num =0;} num += 1; SQL_game_sys.SQL_使用者_新增(userID,creationDate.ToString(),"APPLE遊客",num.ToString().PadLeft(9,'0'), password,"1",email,"1"); } return "0"; }else{ return "3-3.未知錯誤"; } } public async Task 遊客登入(){ try{ var signInTask = auth.SignInAnonymouslyAsync(); await signInTask; if (signInTask.IsCompleted && !signInTask.IsCanceled && !signInTask.IsFaulted){ Debug.Log("遊客登入成功!"); string userID = signInTask.Result.User.UserId; ulong creationDate = signInTask.Result.User.Metadata.CreationTimestamp; double num;SQL_game_sys.SQL_使用者_查詢編號(); if(SQL_Module.dr.Read()){num = double.Parse(SQL_Module.dr[0].ToString());}else{num =0;} num += 1; SQL_game_sys.SQL_使用者_新增(userID,creationDate.ToString() ,"匿名遊客",num.ToString().PadLeft(9,'0'),"","0","","0"); return "0"; }else{ Debug.LogError("2-1." + signInTask.Exception); return "2-1." + signInTask.Exception; } }catch (Exception ex){ Debug.LogError("2-2." + ex.Message); return "2-2." + ex.Message; } } public void DeleteUserInfo(){ Firebase.Auth.FirebaseUser user = auth.CurrentUser; user?.DeleteAsync().ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("DeleteAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("DeleteAsync encountered an error: " + task.Exception); return; } Debug.Log("User deleted successfully."); }); } public void 登出(){ auth.SignOut(); } void AuthStateChanged(object sender,System.EventArgs eventArgs){ if(auth.CurrentUser != user){ user = auth.CurrentUser; if(user != null){ Debug.Log($"登入帳號 - {user.Email}"); } } } void OnDestroy() { auth.StateChanged -= AuthStateChanged; } }