com.guru.unity.sdk.core/Runtime/GuruCore/Runtime/Firebase/FirebaseUtil.cs

157 lines
4.1 KiB
C#
Raw Normal View History

2023-12-26 04:22:19 +00:00
using System;
using Firebase;
using Firebase.Analytics;
using Firebase.Extensions;
using UnityEngine;
2023-12-26 04:22:19 +00:00
namespace Guru
{
public static partial class FirebaseUtil
{
private static readonly string LOG_TAG = "Firebase";
private static bool _isReady = false;
public static bool IsReady => _isReady;
2023-12-26 04:22:19 +00:00
public static DependencyStatus DependencyStatus = DependencyStatus.UnavailableOther;
public static bool IsFirebaseInitialized => DependencyStatus == DependencyStatus.Available;
public static Action<bool> onInitComplete;
public static Action<bool> OnFirebaseAuthResult;
public static Action<bool> OnUserAuthResult;
public static Action<string> OnAdjustDeeplinkCallback = null;
public static void InitFirebase(Action callback)
2023-12-26 04:22:19 +00:00
{
_isReady = false;
// Analytics.InitAnalytics(); // 打点提前初始化
// Loom.StartUp(); // 确保主线程开启
// 初始化 Fireabse 依赖
2023-12-26 04:22:19 +00:00
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
DependencyStatus = task.Result;
if (DependencyStatus == DependencyStatus.Available)
2023-12-26 04:22:19 +00:00
{
_isReady = true;
2023-12-26 04:22:19 +00:00
InitializeFirebaseComp();
callback?.Invoke();
}
else
{
Log.E(LOG_TAG, "Could not resolve all Firebase dependencies: " + DependencyStatus);
}
onInitComplete?.Invoke(_isReady);
2023-12-26 04:22:19 +00:00
});
}
private static void InitializeFirebaseComp()
{
2024-01-06 05:46:25 +00:00
InitCrashlytics(); // 老项目沿用此逻辑
InitRemoteConfig(); // 老项目沿用此逻辑
InitAdjustService(); // 初始化 Firebase 服务
2023-12-26 04:22:19 +00:00
if (IPMConfig.IPM_UID.IsNullOrEmpty())
{
Log.I(LOG_TAG, "没有存储UID时从中台获取匿名认证授权");
//没有存储UID时从中台获取匿名认证授权
new AuthUserRequest()
.SetRetryTimes(-1)
.SetSuccessCallBack(() =>
{
OnUserAuthResult?.Invoke(true);
AuthUser(InitializeMessage);
}).SetFailCallBack(() =>
{
OnUserAuthResult?.Invoke(false);
2023-12-26 04:22:19 +00:00
})
.Send();
}
else
{
InitializeMessage();
int currentTimeStamp = TimeUtil.GetCurrentTimeStampSecond();
if(currentTimeStamp - IPMConfig.IPM_TOKEN_TIME >= IPMConfig.TOKEN_VALID_TIME)
{
//中台Token失效从中台重新获取Token
new RefreshTokenRequest().SetRetryTimes(-1).Send();
}
if(currentTimeStamp - IPMConfig.IPM_FIREBASE_TOKEN_TIME >= IPMConfig.FIREBASE_TOKEN_VALID_TIME)
{
//中台firebaseToken失效从中台重新获取firebaseToken
new RefreshFirebaseTokenRequest()
.SetRetryTimes(-1)
.SetSuccessCallBack(()=> AuthUser(InitializeMessage))
2023-12-26 04:22:19 +00:00
.Send();
}
else
{
AuthUser(InitializeMessage);
2023-12-26 04:22:19 +00:00
}
}
}
2024-01-10 05:34:45 +00:00
#region 启动 Adjust 服务
2023-12-26 04:22:19 +00:00
/// <summary>
2024-01-10 05:34:45 +00:00
/// 启动 Adjust 服务
2023-12-26 04:22:19 +00:00
/// </summary>
private static void InitAdjustService()
2023-12-26 04:22:19 +00:00
{
FirebaseAnalytics.GetAnalyticsInstanceIdAsync()
.ContinueWithOnMainThread(task =>
{
2023-12-26 04:22:19 +00:00
if (task.IsCompleted && !string.IsNullOrEmpty(task.Result))
{
// 保存本地ID备份
string fid = task.Result;
IPMConfig.FIREBASE_ID = fid; // 保存FirebaseID
}
else
{
UnityEngine.Debug.LogError($"Fetch FirebaseID failed on start!");
}
// 启动 AdjustService
string appToken = GuruSettings.Instance.AdjustSetting?.GetAppToken() ?? "";
2024-01-10 05:34:45 +00:00
string fbAppId = GuruSettings.Instance.IPMSetting.FacebookAppId;
if (!string.IsNullOrEmpty(IPMConfig.ADJUST_ID))
ReportAdjustId(IPMConfig.ADJUST_ID); // 二次启动后,若有值则立即上报属性
AdjustService.StartService(appToken, fbAppId, OnGetAdjustId, OnAdjustDeeplinkCallback);
2023-12-26 04:22:19 +00:00
});
}
private static void OnGetAdjustId(string adjustId)
{
// 获取 ADID
if (string.IsNullOrEmpty(adjustId))
{
adjustId = "not_set";
}
else
{
IPMConfig.ADJUST_ID = adjustId;
}
ReportAdjustId(adjustId);
Analytics.OnAdjustInitComplete();
}
private static void ReportAdjustId(string adjustId)
{
FirebaseAnalytics.SetUserProperty("adjust_id", adjustId); // 仅上报 Firebase 用户属性
Debug.Log($"[SDK] --- Firebase + Adjust ID: {adjustId}");
}
2023-12-26 04:22:19 +00:00
#endregion
}
}