using System.Collections; using System.Collections.Generic; using UnityEngine; using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading; using UnityEngine.UI; using Firebase.Firestore; using Firebase.Extensions; using System; using UnityEngine.Networking; using System.Text.RegularExpressions; using TMPro; using UnityEngine.SceneManagement; public class gplayAuth : MonoBehaviour{ public TMP_Text gplayText; public TMP_Text firebaseStatText; public string AuthCode; public static string userID; bool IsConnected; public TMP_InputField saveName, coins, item1, item2, item3 ; public TMP_Text saveStatText; public static string userNameCloud; public TMP_Text saveNameTxt , coinsTxt, item1Txt, item2Txt, item3Txt; #if UNITY_ANDROID void Start() { IsConnected =false; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().RequestServerAuthCode(false) .RequestEmail().RequestIdToken().EnableSavedGames().Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.DebugLogEnabled = true; PlayGamesPlatform.Activate(); //GPGSLogin(); } public void GPGSLogin(){ PlayGamesPlatform.Instance.Authenticate((success) => { if(success == true){ //logged into Google Play Games gplayText.text = "G-Play Connected"; Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => { if(task.Result == Firebase.DependencyStatus.Available){ //no dependency issue with firebase, continue to login ConnectToFirebase(); } else{ //error with firebase Dependecies plugin firebaseStatText.text = "Dependency Error"; } } ); } else{ Debug.LogError("Gplay failed"); } } ); } public void SaveData(){ //checking if connected to firebase if(IsConnected){ FirebaseFirestore db = FirebaseFirestore.DefaultInstance; string playerName = saveName.text; int playerCoin = int.Parse(coins.text); List plyaerInventoryItems = new List(); plyaerInventoryItems.Add(item1.text); plyaerInventoryItems.Add(item2.text); plyaerInventoryItems.Add(item3.text); Dictionary saveValues = new Dictionary{ {"playerName" , playerName}, {"playerCoin" , playerCoin}, {"playerInventory" , plyaerInventoryItems}, }; DocumentReference docRef = db.Collection("PlayerData").Document(userID); docRef.SetAsync(saveValues).ContinueWithOnMainThread(task => { if(task.IsCompleted){ saveStatText.text = "Save Completed Firestore"; } else{ saveStatText.text = "Failed to save data to firestore"; } }); }else{ //firebase_Not_Connected_error Debug.LogError("firebase Not connected to save"); } } public void LoadData(){ if(IsConnected){ FirebaseFirestore db = FirebaseFirestore.DefaultInstance; DocumentReference docRef = db.Collection("PlayerData").Document(userID); docRef.GetSnapshotAsync().ContinueWithOnMainThread(task => { DocumentSnapshot snapshot = task.Result; if(snapshot.Exists){ //load data Dictionary dic = snapshot.ToDictionary(ServerTimestampBehavior.Estimate); Debug.Log("Reading data"); foreach(KeyValuePair item in dic){ Debug.Log(item.Key + " : " +item.Value.ToString()); } saveNameTxt.text = snapshot.GetValue("playerName"); coinsTxt.text = snapshot.GetValue("playerCoin").ToString(); List inventoryList = snapshot.GetValue>("playerInventory"); item1Txt.text = inventoryList[0]; item2Txt.text = inventoryList[1]; item3Txt.text = inventoryList[2]; }else{ //show error previous data doesnt exists to load Debug.Log("No previous data to load"); } }); } } public TMP_InputField registerEmail, registerPassword; public void RegisterUser(){ Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; auth.CreateUserWithEmailAndPasswordAsync(registerEmail.text, registerPassword.text).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception); return; } // Firebase user has been created. Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Firebase user created successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); OnAuthSuccess(result.User); userNameCloud = registerEmail.text; }); } public TMP_InputField loginEmail, loginPassword; public void LoginUser(){ Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; auth.SignInWithEmailAndPasswordAsync(loginEmail.text, loginPassword.text).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInWithEmailAndPasswordAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); OnAuthSuccess(result.User); userNameCloud = loginEmail.text; }); } void ConnectToFirebase(){ AuthCode=PlayGamesPlatform.Instance.GetServerAuthCode(); Debug.Log("Gplay auth " + AuthCode); Firebase.Auth.FirebaseAuth FBAuth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential FBCred = Firebase.Auth.PlayGamesAuthProvider.GetCredential(AuthCode); FBAuth.SignInWithCredentialAsync(FBCred).ContinueWithOnMainThread(task => { if(task.IsCanceled){ firebaseStatText.text = "sign in cancelled"; } if(task.IsFaulted){ firebaseStatText.text = "Error:"+task.Result; } Firebase.Auth.FirebaseUser user = FBAuth.CurrentUser; if(user != null){ // userID = user.UserId; // firebaseStatText.text = "Signed in As :"+ user.DisplayName; // IsConnected = true; OnAuthSuccess(user); userNameCloud = user.DisplayName; } else{ //error getting username } }); // PlayGamesPlatform.Instance.RequestServerSideAccess(true , code => { // AuthCode = code; // Firebase.Auth.FirebaseAuth FBAuth = Firebase.Auth.FirebaseAuth.DefaultInstance; // Firebase.Auth.Credential FBCred = Firebase.Auth.PlayGamesAuthProvider.GetCredential(AuthCode); // FBAuth.SignInWithCredentialAsync(FBCred).ContinueWithOnMainThread(task => { // if(task.IsCanceled){ // firebaseStatText.text = "sign in cancelled"; // } // if(task.IsFaulted){ // firebaseStatText.text = "Error:"+task.Result; // } // Firebase.Auth.FirebaseUser user = FBAuth.CurrentUser; // if(user != null){ // firebaseStatText.text = "Signed in As :"+ user.DisplayName; // } // else{ // //error getting username // } // }); // }); } public void OnAuthSuccess(Firebase.Auth.FirebaseUser user){ userID = user.UserId; firebaseStatText.text = "Signed in As :"+ user.DisplayName; IsConnected = true; //load game scene SceneManager.LoadScene("MenuScene"); } #endif }