update: 更新和重构 Auth 部分的引用和回调, 干掉成员属性, 改为回调内传递 Firebase 用户
Signed-off-by: huyufei <yufei.hu@castbox.fm>
							parent
							
								
									9c6f2cf962
								
							
						
					
					
						commit
						880a90cce4
					
				|  | @ -1,16 +1,13 @@ | |||
| 
 | ||||
| 
 | ||||
| namespace Guru | ||||
| { | ||||
| 	using System; | ||||
| 	using System.Threading.Tasks; | ||||
| 	using Firebase.Auth; | ||||
| 	using Firebase.Extensions; | ||||
| 	using UnityEngine; | ||||
| 	 | ||||
| 	public static partial class FirebaseUtil | ||||
| 	{ | ||||
| 		private static FirebaseUser FirebaseUser => FirebaseAuth.DefaultInstance.CurrentUser; | ||||
| 
 | ||||
| 		private const float LOGIN_RETRY_MAX_TIME = 60; // 最大请求间隔时间 | ||||
| 		private const float LOGIN_RETRY_INTERVAL = 10; // 最大请求间隔时间 | ||||
| 		private static float _retryDelayTime = 10; // 登录重试时间 | ||||
|  | @ -21,13 +18,16 @@ namespace Guru | |||
| 		///  <param name="authToken"></param> | ||||
| 		///  <param name="onLoginResult"></param> | ||||
| 		///  <param name="autoRetry"></param> | ||||
| 		private static void LoginFirebaseWithToken(Action<bool> onLoginResult = null, string authToken = "", bool autoRetry = true) | ||||
| 		private static void LoginFirebaseWithToken(Action<bool, FirebaseUser> onLoginResult = null, string authToken = "", bool autoRetry = true) | ||||
| 		{ | ||||
| 			var firebaseUser = FirebaseAuth.DefaultInstance.CurrentUser; | ||||
| 			 | ||||
| 			 | ||||
| 			// #1 Firebase 已获取用户 | ||||
| 			if (FirebaseUser != null) | ||||
| 			if (firebaseUser != null) | ||||
| 			{ | ||||
| 				Log.I(LOG_TAG, $"[Auth] user exists,UserId:{FirebaseUser.UserId}"); | ||||
| 				onLoginResult?.Invoke(true); | ||||
| 				Log.I(LOG_TAG, $"[Auth] user exists,UserId:{firebaseUser.UserId}"); | ||||
| 				onLoginResult?.Invoke(true, firebaseUser); | ||||
| 				return; | ||||
| 			} | ||||
| 			 | ||||
|  | @ -51,12 +51,13 @@ namespace Guru | |||
| 			else | ||||
| 			{ | ||||
| 				// 不再重试 | ||||
| 				onLoginResult?.Invoke(false); | ||||
| 				onLoginResult?.Invoke(false, null); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		private static void LoginFirebase(string authToken = "", bool autoRetry = true, Action<bool> onLoginResult = null) | ||||
| 		private static void LoginFirebase(string authToken = "", bool autoRetry = true, Action<bool, FirebaseUser> onLoginResult = null) | ||||
| 		{ | ||||
| 			 | ||||
| 			FirebaseAuth.DefaultInstance.SignInWithCustomTokenAsync(authToken) | ||||
| 			.ContinueWithOnMainThread(task => | ||||
| 			{ | ||||
|  | @ -70,31 +71,37 @@ namespace Guru | |||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						onLoginResult?.Invoke(false); // 不再重试 | ||||
| 						onLoginResult?.Invoke(false, null); // 不再重试 | ||||
| 					} | ||||
| 					return; | ||||
| 				} | ||||
| 				// ----- Check Result -----  | ||||
| 				bool success = FirebaseUser != null; | ||||
| 				onLoginResult?.Invoke(success); | ||||
| 				var firebaseUser = FirebaseAuth.DefaultInstance.CurrentUser; | ||||
| 				bool success = firebaseUser != null; | ||||
| 				onLoginResult?.Invoke(success, firebaseUser); | ||||
| 				_retryDelayTime = LOGIN_RETRY_INTERVAL; | ||||
| 				 | ||||
| 				Analytics.SetSignUpMethod("google"); // 上报用户登录属性 | ||||
| 			}); | ||||
| 		} | ||||
| 		 | ||||
| 
 | ||||
| 		// TODO:P0 协程不应该用在此场景  | ||||
| 		// private static void DelayCallFirebaseLogin(float delaySeconds, Action<bool> callback, string token = "") | ||||
| 		// { | ||||
| 		// 	var delay = new WaitForSeconds(delaySeconds); | ||||
| 		// 	CoroutineHelper.Instance.StartDelayed(delay, ()=> LoginFirebaseWithToken(callback, token)); | ||||
| 		// } | ||||
| 		 | ||||
| 		/// <summary> | ||||
| 		/// 延迟调用 Firebase 登录请求 | ||||
| 		/// 延迟再次调用 Firebase 的登录接口 | ||||
| 		/// </summary> | ||||
| 		/// <param name="delaySeconds"></param> | ||||
| 		/// <param name="callback"></param> | ||||
| 		/// <param name="token"></param> | ||||
| 		private static void DelayCallFirebaseLogin(float delaySeconds, Action<bool> callback, string token = "") | ||||
| 		private static async void DelayCallFirebaseLogin(float delaySeconds, Action<bool, FirebaseUser> callback, string token = "") | ||||
| 		{ | ||||
| 			var delay = new WaitForSeconds(delaySeconds); | ||||
| 			CoroutineHelper.Instance.StartDelayed(delay, ()=> LoginFirebaseWithToken(callback, token)); | ||||
| 			await Task.Delay((int)(delaySeconds * 1000)); | ||||
| 			LoginFirebaseWithToken(callback, token); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -1,3 +1,5 @@ | |||
| using Firebase.Auth; | ||||
| 
 | ||||
| namespace Guru | ||||
| { | ||||
| 	using System; | ||||
|  | @ -18,7 +20,7 @@ namespace Guru | |||
| 		private static Action<bool> _onCheckAndFixDepsHandler; | ||||
| 		private static Action<string> _onGetFirebaseIdHandler; | ||||
| 		private static Action<bool> _onGetGuruUIDHandler; | ||||
| 		private static Action<bool> _onFirebaseLoginResult; | ||||
| 		private static Action<bool, FirebaseUser> _onFirebaseLoginResult; | ||||
| 
 | ||||
| 		/// <summary> | ||||
| 		/// 初始化 Firebase | ||||
|  | @ -28,7 +30,7 @@ namespace Guru | |||
| 		/// <param name="onGetGuruUIDResult">Firebase 授权回调</param> | ||||
| 		/// <param name="onFirebaseLoginResult"></param> | ||||
| 		public static void Init(Action<bool> onDepsCheckResult, Action<string> onGetFirebaseId = null,  | ||||
| 			Action<bool> onGetGuruUIDResult = null, Action<bool> onFirebaseLoginResult = null) | ||||
| 			Action<bool> onGetGuruUIDResult = null, Action<bool, FirebaseUser>  onFirebaseLoginResult = null) | ||||
| 		{ | ||||
| 			_isReady = false; | ||||
| 			_onCheckAndFixDepsHandler = onDepsCheckResult; | ||||
|  | @ -199,14 +201,15 @@ namespace Guru | |||
| 		{ | ||||
| 			LoginFirebaseWithToken(OnFirebaseLoginComplete, IPMConfig.IPM_FIREBASE_TOKEN); // 成功后进行 Firebase 认证 | ||||
| 		} | ||||
| 		 | ||||
| 
 | ||||
| 		/// <summary> | ||||
| 		/// Firebase 认证用户完成 | ||||
| 		/// </summary> | ||||
| 		/// <param name="success"></param> | ||||
| 		private static void OnFirebaseLoginComplete(bool success) | ||||
| 		/// <param name="firebaseUser"></param> | ||||
| 		private static void OnFirebaseLoginComplete(bool success, FirebaseUser firebaseUser = null) | ||||
| 		{ | ||||
| 			_onFirebaseLoginResult?.Invoke(success); | ||||
| 			_onFirebaseLoginResult?.Invoke(success, firebaseUser); | ||||
| 		} | ||||
| 		 | ||||
| 		#endregion | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue