update: 更新和重构 Auth 部分的引用和回调, 干掉成员属性, 改为回调内传递 Firebase 用户

Signed-off-by: huyufei <yufei.hu@castbox.fm>
胡宇飞 2024-08-11 15:34:20 +08:00
parent 9c6f2cf962
commit 880a90cce4
2 changed files with 33 additions and 23 deletions

View File

@ -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 existsUserId:{FirebaseUser.UserId}");
onLoginResult?.Invoke(true);
Log.I(LOG_TAG, $"[Auth] user existsUserId:{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);
}
}
}

View File

@ -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