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