diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs index a63d2d6..dd0a076 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.Auth.cs @@ -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 /// /// /// - private static void LoginFirebaseWithToken(Action onLoginResult = null, string authToken = "", bool autoRetry = true) + private static void LoginFirebaseWithToken(Action 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 onLoginResult = null) + private static void LoginFirebase(string authToken = "", bool autoRetry = true, Action 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 callback, string token = "") + // { + // var delay = new WaitForSeconds(delaySeconds); + // CoroutineHelper.Instance.StartDelayed(delay, ()=> LoginFirebaseWithToken(callback, token)); + // } + /// - /// 延迟调用 Firebase 登录请求 + /// 延迟再次调用 Firebase 的登录接口 /// /// /// /// - private static void DelayCallFirebaseLogin(float delaySeconds, Action callback, string token = "") + private static async void DelayCallFirebaseLogin(float delaySeconds, Action callback, string token = "") { - var delay = new WaitForSeconds(delaySeconds); - CoroutineHelper.Instance.StartDelayed(delay, ()=> LoginFirebaseWithToken(callback, token)); + await Task.Delay((int)(delaySeconds * 1000)); + LoginFirebaseWithToken(callback, token); } } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs index ec50666..ff71115 100644 --- a/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs +++ b/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs @@ -1,3 +1,5 @@ +using Firebase.Auth; + namespace Guru { using System; @@ -18,7 +20,7 @@ namespace Guru private static Action _onCheckAndFixDepsHandler; private static Action _onGetFirebaseIdHandler; private static Action _onGetGuruUIDHandler; - private static Action _onFirebaseLoginResult; + private static Action _onFirebaseLoginResult; /// /// 初始化 Firebase @@ -28,7 +30,7 @@ namespace Guru /// Firebase 授权回调 /// public static void Init(Action onDepsCheckResult, Action onGetFirebaseId = null, - Action onGetGuruUIDResult = null, Action onFirebaseLoginResult = null) + Action onGetGuruUIDResult = null, Action onFirebaseLoginResult = null) { _isReady = false; _onCheckAndFixDepsHandler = onDepsCheckResult; @@ -199,14 +201,15 @@ namespace Guru { LoginFirebaseWithToken(OnFirebaseLoginComplete, IPMConfig.IPM_FIREBASE_TOKEN); // 成功后进行 Firebase 认证 } - + /// /// Firebase 认证用户完成 /// /// - private static void OnFirebaseLoginComplete(bool success) + /// + private static void OnFirebaseLoginComplete(bool success, FirebaseUser firebaseUser = null) { - _onFirebaseLoginResult?.Invoke(success); + _onFirebaseLoginResult?.Invoke(success, firebaseUser); } #endregion