using AppleAuth; using CodeStage.AntiCheat.Storage; //using Firebase.Auth; //using Google; using System.Collections; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; #if UNITY_ANDROID using UnityEngine.Android; #endif public class TitleLoadingUI : MonoBehaviour { public TextMeshProUGUI label_version, t_proc; public Slider slider_proc; private IAppleAuthManager appleAuthManager; bool activeButtons, GoLogin, bServerComplete = false, bSreenTouch = false; int LoginFail = 0; float Proc_Value; private void OnEnable() { slider_proc.gameObject.SetActive(true); slider_proc.value = 0f; Proc_Value = 1f; t_proc.text = "0%"; InActive_LoginButton(); StartCoroutine(Co_Start()); } IEnumerator Co_Start() { ServerInfo.Ins.VersionCode = int.Parse(Resources.Load("VersionCode").text); label_version.text = DSUtil.Format("{0}({1})", Application.version, ServerInfo.Ins.VersionCode); //Add_ProcValue(0.1f); // 버전 로딩 10% slider_proc.value = 0f; // 테이블 로딩 기다리기 while (!TableChecker.Ins.CheckAllLoad()) yield return null; //Add_ProcValue(0.7f); // 테이블 로딩 70% //yield return StartCoroutine(Title_Mgr.Ins.Co_Check(Add_ProcValue)); //Login(); } void Update() { if (Proc_Value > slider_proc.value) { slider_proc.value += Time.deltaTime * 1.75f; if (Proc_Value <= slider_proc.value) slider_proc.value = Proc_Value; if (slider_proc.value >= 0.99f) GameUI.Ins.Set_UI(1); } if (this.appleAuthManager != null) this.appleAuthManager.Update(); if (activeButtons) Active_LoginButton(); if (GoLogin) Login(); if (LoginFail > 0) { switch (LoginFail) { case 1: // 애플 로그인 실패 Popup.Ins.Set(ePopupType.Two, 116, Login_SigninwithAppleID, Active_LoginButton); break; case 2: // 구글 로그인 실패 Popup.Ins.Set(ePopupType.Two, 117, Login_To_GooglePlay, Active_LoginButton); break; } LoginFail = 0; } if (bServerComplete && slider_proc.value >= 0.99f && !bSreenTouch) Set_OnClickScreen(); } void Add_ProcValue(float add) { Proc_Value += add; } public void OnChange_SliderValue() { t_proc.text = MyText.Get_PercentValueText_100(DSUtil.Get_SliderValue(slider_proc.value)); } void Active_LoginButton() { activeButtons = false; #if FGB_OneStore DSUtil.InActivateGameObjects(gos_LoginButton, 1); #else //DSUtil.ActivateGameObjects(gos_LoginButton); //DSUtil.InActivateGameObjects(gos_LoginButton, 2); // TODO 정인호 : 지금은 게스트만 #endif } void InActive_LoginButton() { activeButtons = false; //DSUtil.InActivateGameObjects(gos_LoginButton); } void Login() { GoLogin = false; #if UNITY_EDITOR OnClick_DevLogin(); #else //var type = ObscuredPrefs.GetInt(MyValue.OptionKey_UserType); //if (type == 0) //{ // label_msg.text = table_localtext.Ins.Get_Text(121); // Active_LoginButton(); // this.appleAuthManager = new AppleAuthManager(new PayloadDeserializer()); //} //else { //label_msg.text = table_localtext.Ins.Get_Text(122); //InActive_LoginButton(); //ServerInfo.Ins.UserID = ObscuredPrefs.GetString(MyValue.OptionKey_UserID); //Debug.Log("type : " + type + ", ID : " + ServerInfo.Ins.UserID); ServerInfo.Ins.UserID = SystemInfo.deviceUniqueIdentifier; ServerInfo.Ins.Login(ServerComplete); } #endif } public void OnClick_DevLogin() { ServerInfo.Ins.Login(ServerComplete); } public void Login_SigninwithAppleID() { InActive_LoginButton(); //FirebaseAuth auth = FirebaseAuth.DefaultInstance; #if UNITY_ANDROID //FederatedOAuthProviderData providerData = new FederatedOAuthProviderData(); //providerData.ProviderId = "apple.com"; //providerData.CustomParameters = new Dictionary(); //providerData.CustomParameters.Add("language", "ko_KR"); //FederatedOAuthProvider provider = new FederatedOAuthProvider(); //provider.SetProviderData(providerData); //auth.SignInWithProviderAsync(provider).ContinueWith(task => //{ // if (task.IsCanceled) // { // Debug.Log("SignInWithProviderAsync was canceled."); // LoginFail = 1; // return; // } // if (task.IsFaulted) // { // LoginFail = 1; // task.Exception.Handle(e => // { // return true; // }); // return; // } // ObscuredPrefs.SetInt(MyValue.OptionKey_UserType, 1); // ObscuredPrefs.SetString(MyValue.OptionKey_UserID, task.Result.User.UserId); // GoLogin = true; //}); #else //this.appleAuthManager.LoginWithAppleId(new AppleAuthLoginArgs(LoginOptions.IncludeEmail | LoginOptions.IncludeFullName), // async credential => // { // try // { // var rawNonce = GenerateRandomString(32); // var nonce = GenerateSHA256NonceFromRawNonce(rawNonce); // // Obtained credential, cast it to IAppleIDCredential // var appleIdCredential = credential as IAppleIDCredential; // var identityToken = Encoding.UTF8.GetString(appleIdCredential.IdentityToken); // var authorizationCode = Encoding.UTF8.GetString(appleIdCredential.AuthorizationCode); // var firebaseCredential = OAuthProvider.GetCredential( // "apple.com", // identityToken, // rawNonce, // authorizationCode); // await auth.SignInWithCredentialAsync(firebaseCredential); // ObscuredPrefs.SetInt(MyValue.OptionKey_UserType, 1); // ObscuredPrefs.SetString(MyValue.OptionKey_UserID, auth.CurrentUser.UserId); // Apple ID가 아닌 Firebase ID // if (appleIdCredential.FullName != null) // { // var myName = appleIdCredential.FullName.ToLocalizedString(); // //ObscuredPrefs.SetString(MyValue.OptionKey_UserNickName, myName); // 애플 검수 시 최초 닉네임 적어야 하는 것 있으면 본인 이름 가져와야하고 클라에 저장해놔야 함 // await auth.CurrentUser.UpdateUserProfileAsync(new UserProfile { DisplayName = myName }); // } // GoLogin = true; // } // catch (AggregateException ex) // { // Debug.Log(ex); // LoginFail = 1; // } // catch (Exception ex) // { // Debug.Log(ex); // LoginFail = 1; // } // }, // error => // { // // Something went wrong // var authorizationErrorCode = error.GetAuthorizationErrorCode(); // Debug.Log(authorizationErrorCode); // LoginFail = 1; // }); #endif } public void Login_To_GooglePlay() { InActive_LoginButton(); //if (GoogleSignIn.Configuration == null) //{ // 설정 // GoogleSignIn.Configuration = new GoogleSignInConfiguration // { // RequestIdToken = true, // RequestEmail = true, // // Copy this value from the google-service.json file. // // oauth_client with type == 3 // WebClientId = "555047237522-ric2l62a2lvp2bkbg2qsdg87jungpn3g.apps.googleusercontent.com" // }; //} //if (GoogleSignIn.DefaultInstance == null) //{ // LoginFail = 2; // return; //} //var sign = GoogleSignIn.DefaultInstance.SignIn(); //if (sign == null) //{ // LoginFail = 2; // return; //} //sign.ContinueWith(task => //{ // if (task == null) // { // LoginFail = 2; // return; // } // if (!task.IsCanceled && !task.IsFaulted) // { // ObscuredPrefs.SetInt(MyValue.OptionKey_UserType, 2); // ObscuredPrefs.SetString(MyValue.OptionKey_UserID, task.Result.UserId); // GoLogin = true; // } // else // LoginFail = 2; //}); } public void Login_SigninwithGuest() { Popup.Ins.Set(ePopupType.Two, 123, () => { Login(); }, null); } void ServerComplete(bool _newuser) { bServerComplete = true; } void Set_OnClickScreen() { bSreenTouch = true; } public void OnClick_Screen() { if (bSreenTouch) { //LoadingUI.Ins.Start_Loading(); SceneManager.LoadScene("02_Game"); } } void LoadingEnd() { //SceneManager.LoadScene(eScene.InGame.ToString()); //LoadingUI.Ins.End_UI(); } private string GenerateRandomString(int length) { const string charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._"; var cryptographicallySecureRandomNumberGenerator = new RNGCryptoServiceProvider(); var result = string.Empty; var remainingLength = length; var randomNumberHolder = new byte[1]; while (remainingLength > 0) { var randomNumbers = new List(16); for (var randomNumberCount = 0; randomNumberCount < 16; randomNumberCount++) { cryptographicallySecureRandomNumberGenerator.GetBytes(randomNumberHolder); randomNumbers.Add(randomNumberHolder[0]); } for (var randomNumberIndex = 0; randomNumberIndex < randomNumbers.Count; randomNumberIndex++) { if (remainingLength == 0) { break; } var randomNumber = randomNumbers[randomNumberIndex]; if (randomNumber < charset.Length) { result += charset[randomNumber]; remainingLength--; } } } return result; } private string GenerateSHA256NonceFromRawNonce(string rawNonce) { var sha = new SHA256Managed(); var utf8RawNonce = Encoding.UTF8.GetBytes(rawNonce); var hash = sha.ComputeHash(utf8RawNonce); var result = string.Empty; for (var i = 0; i < hash.Length; i++) { result += hash[i].ToString("x2"); } return result; } }