2023-12-26 04:22:19 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
using Firebase;
|
|
|
|
|
|
using Firebase.Analytics;
|
|
|
|
|
|
using Firebase.Extensions;
|
2024-07-16 11:19:04 +00:00
|
|
|
|
using UnityEngine;
|
2023-12-26 04:22:19 +00:00
|
|
|
|
|
|
|
|
|
|
namespace Guru
|
|
|
|
|
|
{
|
|
|
|
|
|
public static partial class FirebaseUtil
|
|
|
|
|
|
{
|
|
|
|
|
|
private static readonly string LOG_TAG = "Firebase";
|
2024-03-08 12:15:33 +00:00
|
|
|
|
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;
|
2024-03-13 09:28:04 +00:00
|
|
|
|
public static Action<bool> onInitComplete;
|
2024-03-31 09:16:45 +00:00
|
|
|
|
|
|
|
|
|
|
public static Action<bool> OnFirebaseAuthResult;
|
|
|
|
|
|
public static Action<bool> OnUserAuthResult;
|
2024-07-12 02:29:39 +00:00
|
|
|
|
public static Action<string> OnAdjustDeeplinkCallback = null;
|
2024-03-31 09:16:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
2024-07-12 02:29:39 +00:00
|
|
|
|
public static void InitFirebase(Action callback)
|
2023-12-26 04:22:19 +00:00
|
|
|
|
{
|
2024-03-13 09:28:04 +00:00
|
|
|
|
_isReady = false;
|
2024-07-25 14:59:47 +00:00
|
|
|
|
// Analytics.InitAnalytics(); // 打点提前初始化
|
2024-03-13 09:28:04 +00:00
|
|
|
|
|
2024-05-11 00:38:31 +00:00
|
|
|
|
// Loom.StartUp(); // 确保主线程开启
|
2024-04-09 09:25:22 +00:00
|
|
|
|
|
2024-03-13 09:28:04 +00:00
|
|
|
|
// 初始化 Fireabse 依赖
|
2023-12-26 04:22:19 +00:00
|
|
|
|
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
|
|
|
|
|
|
DependencyStatus = task.Result;
|
2024-03-08 12:15:33 +00:00
|
|
|
|
if (DependencyStatus == DependencyStatus.Available)
|
2023-12-26 04:22:19 +00:00
|
|
|
|
{
|
2024-03-08 12:15:33 +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);
|
|
|
|
|
|
}
|
2024-03-13 09:28:04 +00:00
|
|
|
|
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(); // 老项目沿用此逻辑
|
2024-03-13 09:28:04 +00:00
|
|
|
|
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(() =>
|
|
|
|
|
|
{
|
2024-03-31 09:16:45 +00:00
|
|
|
|
OnUserAuthResult?.Invoke(true);
|
2024-05-22 13:50:23 +00:00
|
|
|
|
AuthUser(InitializeMessage);
|
2024-03-31 09:16:45 +00:00
|
|
|
|
}).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)
|
2024-05-22 13:50:23 +00:00
|
|
|
|
.SetSuccessCallBack(()=> AuthUser(InitializeMessage))
|
2023-12-26 04:22:19 +00:00
|
|
|
|
.Send();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2024-05-22 13:50:23 +00:00
|
|
|
|
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>
|
2024-01-08 07:01:52 +00:00
|
|
|
|
private static void InitAdjustService()
|
2023-12-26 04:22:19 +00:00
|
|
|
|
{
|
|
|
|
|
|
FirebaseAnalytics.GetAnalyticsInstanceIdAsync()
|
|
|
|
|
|
.ContinueWithOnMainThread(task =>
|
|
|
|
|
|
{
|
2024-07-12 02:29:39 +00:00
|
|
|
|
|
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!");
|
|
|
|
|
|
}
|
2024-01-08 07:01:52 +00:00
|
|
|
|
|
|
|
|
|
|
// 启动 AdjustService
|
|
|
|
|
|
string appToken = GuruSettings.Instance.AdjustSetting?.GetAppToken() ?? "";
|
2024-01-10 05:34:45 +00:00
|
|
|
|
string fbAppId = GuruSettings.Instance.IPMSetting.FacebookAppId;
|
2024-07-17 01:57:44 +00:00
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(IPMConfig.ADJUST_ID))
|
|
|
|
|
|
ReportAdjustId(IPMConfig.ADJUST_ID); // 二次启动后,若有值则立即上报属性
|
2024-07-16 11:19:04 +00:00
|
|
|
|
|
2024-07-25 03:49:32 +00:00
|
|
|
|
AdjustService.StartService(appToken, fbAppId, OnGetAdjustId, OnAdjustDeeplinkCallback);
|
|
|
|
|
|
|
2023-12-26 04:22:19 +00:00
|
|
|
|
});
|
|
|
|
|
|
}
|
2024-07-16 11:19:04 +00:00
|
|
|
|
|
2024-07-25 03:49:32 +00:00
|
|
|
|
private static void OnGetAdjustId(string adjustId)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 获取 ADID
|
|
|
|
|
|
if (string.IsNullOrEmpty(adjustId))
|
|
|
|
|
|
{
|
|
|
|
|
|
adjustId = "not_set";
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
IPMConfig.ADJUST_ID = adjustId;
|
|
|
|
|
|
}
|
|
|
|
|
|
ReportAdjustId(adjustId);
|
2024-07-25 14:59:47 +00:00
|
|
|
|
|
|
|
|
|
|
Analytics.OnAdjustInitComplete();
|
2024-07-25 03:49:32 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-07-16 11:19:04 +00:00
|
|
|
|
|
2024-07-17 01:57:44 +00:00
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|