gplayAuth.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using GooglePlayGames;
  5. using GooglePlayGames.BasicApi;
  6. using UnityEngine.SocialPlatforms;
  7. using System.Threading;
  8. using UnityEngine.UI;
  9. using Firebase.Firestore;
  10. using Firebase.Extensions;
  11. using System;
  12. using UnityEngine.Networking;
  13. using System.Text.RegularExpressions;
  14. using TMPro;
  15. using UnityEngine.SceneManagement;
  16. public class gplayAuth : MonoBehaviour{
  17. public TMP_Text gplayText;
  18. public TMP_Text firebaseStatText;
  19. public string AuthCode;
  20. public static string userID;
  21. bool IsConnected;
  22. public TMP_InputField saveName, coins, item1, item2, item3 ;
  23. public TMP_Text saveStatText;
  24. public static string userNameCloud;
  25. public TMP_Text saveNameTxt , coinsTxt, item1Txt, item2Txt, item3Txt;
  26. #if UNITY_ANDROID
  27. void Start() {
  28. IsConnected =false;
  29. PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().RequestServerAuthCode(false)
  30. .RequestEmail().RequestIdToken().EnableSavedGames().Build();
  31. PlayGamesPlatform.InitializeInstance(config);
  32. PlayGamesPlatform.DebugLogEnabled = true;
  33. PlayGamesPlatform.Activate();
  34. //GPGSLogin();
  35. }
  36. public void GPGSLogin(){
  37. PlayGamesPlatform.Instance.Authenticate((success) => {
  38. if(success == true){
  39. //logged into Google Play Games
  40. gplayText.text = "G-Play Connected";
  41. Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
  42. if(task.Result == Firebase.DependencyStatus.Available){
  43. //no dependency issue with firebase, continue to login
  44. ConnectToFirebase();
  45. }
  46. else{
  47. //error with firebase Dependecies plugin
  48. firebaseStatText.text = "Dependency Error";
  49. }
  50. }
  51. );
  52. }
  53. else{
  54. Debug.LogError("Gplay failed");
  55. }
  56. }
  57. );
  58. }
  59. public void SaveData(){
  60. //checking if connected to firebase
  61. if(IsConnected){
  62. FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
  63. string playerName = saveName.text;
  64. int playerCoin = int.Parse(coins.text);
  65. List<string> plyaerInventoryItems = new List<string>();
  66. plyaerInventoryItems.Add(item1.text);
  67. plyaerInventoryItems.Add(item2.text);
  68. plyaerInventoryItems.Add(item3.text);
  69. Dictionary<string, object> saveValues = new Dictionary<string, object>{
  70. {"playerName" , playerName},
  71. {"playerCoin" , playerCoin},
  72. {"playerInventory" , plyaerInventoryItems},
  73. };
  74. DocumentReference docRef = db.Collection("PlayerData").Document(userID);
  75. docRef.SetAsync(saveValues).ContinueWithOnMainThread(task => {
  76. if(task.IsCompleted){
  77. saveStatText.text = "Save Completed Firestore";
  78. }
  79. else{
  80. saveStatText.text = "Failed to save data to firestore";
  81. }
  82. });
  83. }else{
  84. //firebase_Not_Connected_error
  85. Debug.LogError("firebase Not connected to save");
  86. }
  87. }
  88. public void LoadData(){
  89. if(IsConnected){
  90. FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
  91. DocumentReference docRef = db.Collection("PlayerData").Document(userID);
  92. docRef.GetSnapshotAsync().ContinueWithOnMainThread(task => {
  93. DocumentSnapshot snapshot = task.Result;
  94. if(snapshot.Exists){
  95. //load data
  96. Dictionary<string,object> dic = snapshot.ToDictionary(ServerTimestampBehavior.Estimate);
  97. Debug.Log("Reading data");
  98. foreach(KeyValuePair<string,object> item in dic){
  99. Debug.Log(item.Key + " : " +item.Value.ToString());
  100. }
  101. saveNameTxt.text = snapshot.GetValue<string>("playerName");
  102. coinsTxt.text = snapshot.GetValue<int>("playerCoin").ToString();
  103. List<string> inventoryList = snapshot.GetValue<List<string>>("playerInventory");
  104. item1Txt.text = inventoryList[0];
  105. item2Txt.text = inventoryList[1];
  106. item3Txt.text = inventoryList[2];
  107. }else{
  108. //show error previous data doesnt exists to load
  109. Debug.Log("No previous data to load");
  110. }
  111. });
  112. }
  113. }
  114. public TMP_InputField registerEmail, registerPassword;
  115. public void RegisterUser(){
  116. Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  117. auth.CreateUserWithEmailAndPasswordAsync(registerEmail.text, registerPassword.text).ContinueWith(task => {
  118. if (task.IsCanceled) {
  119. Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
  120. return;
  121. }
  122. if (task.IsFaulted) {
  123. Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
  124. return;
  125. }
  126. // Firebase user has been created.
  127. Firebase.Auth.AuthResult result = task.Result;
  128. Debug.LogFormat("Firebase user created successfully: {0} ({1})",
  129. result.User.DisplayName, result.User.UserId);
  130. OnAuthSuccess(result.User);
  131. userNameCloud = registerEmail.text;
  132. });
  133. }
  134. public TMP_InputField loginEmail, loginPassword;
  135. public void LoginUser(){
  136. Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  137. auth.SignInWithEmailAndPasswordAsync(loginEmail.text, loginPassword.text).ContinueWith(task => {
  138. if (task.IsCanceled) {
  139. Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
  140. return;
  141. }
  142. if (task.IsFaulted) {
  143. Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
  144. return;
  145. }
  146. Firebase.Auth.AuthResult result = task.Result;
  147. Debug.LogFormat("User signed in successfully: {0} ({1})",
  148. result.User.DisplayName, result.User.UserId);
  149. OnAuthSuccess(result.User);
  150. userNameCloud = loginEmail.text;
  151. });
  152. }
  153. void ConnectToFirebase(){
  154. AuthCode=PlayGamesPlatform.Instance.GetServerAuthCode();
  155. Debug.Log("Gplay auth " + AuthCode);
  156. Firebase.Auth.FirebaseAuth FBAuth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  157. Firebase.Auth.Credential FBCred = Firebase.Auth.PlayGamesAuthProvider.GetCredential(AuthCode);
  158. FBAuth.SignInWithCredentialAsync(FBCred).ContinueWithOnMainThread(task => {
  159. if(task.IsCanceled){
  160. firebaseStatText.text = "sign in cancelled";
  161. }
  162. if(task.IsFaulted){
  163. firebaseStatText.text = "Error:"+task.Result;
  164. }
  165. Firebase.Auth.FirebaseUser user = FBAuth.CurrentUser;
  166. if(user != null){
  167. // userID = user.UserId;
  168. // firebaseStatText.text = "Signed in As :"+ user.DisplayName;
  169. // IsConnected = true;
  170. OnAuthSuccess(user);
  171. userNameCloud = user.DisplayName;
  172. }
  173. else{
  174. //error getting username
  175. }
  176. });
  177. // PlayGamesPlatform.Instance.RequestServerSideAccess(true , code => {
  178. // AuthCode = code;
  179. // Firebase.Auth.FirebaseAuth FBAuth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  180. // Firebase.Auth.Credential FBCred = Firebase.Auth.PlayGamesAuthProvider.GetCredential(AuthCode);
  181. // FBAuth.SignInWithCredentialAsync(FBCred).ContinueWithOnMainThread(task => {
  182. // if(task.IsCanceled){
  183. // firebaseStatText.text = "sign in cancelled";
  184. // }
  185. // if(task.IsFaulted){
  186. // firebaseStatText.text = "Error:"+task.Result;
  187. // }
  188. // Firebase.Auth.FirebaseUser user = FBAuth.CurrentUser;
  189. // if(user != null){
  190. // firebaseStatText.text = "Signed in As :"+ user.DisplayName;
  191. // }
  192. // else{
  193. // //error getting username
  194. // }
  195. // });
  196. // });
  197. }
  198. public void OnAuthSuccess(Firebase.Auth.FirebaseUser user){
  199. userID = user.UserId;
  200. firebaseStatText.text = "Signed in As :"+ user.DisplayName;
  201. IsConnected = true;
  202. //load game scene
  203. SceneManager.LoadScene("MenuScene");
  204. }
  205. #endif
  206. }