chicken_dy/Assets/TKGSDK/Common/SDKTools/FirebaseTool.cs

263 lines
8.4 KiB
C#
Raw Normal View History

2022-05-31 15:14:44 +00:00
#if USE_FIREBASE
using System;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Analytics;
using Firebase.RemoteConfig;
using Touka;
public class FirebaseTool : NormalSingleton<FirebaseTool>
{
public event Action OnInitializeDone;
public event Action OnRemoteConfigSucceed;
public event Action OnRemoteConfigFail;
public bool IsReady => mIsReady;
private bool mIsReady = false;
private bool mIsDefaultConfigReady = false;
private bool mIsRemoteConfigReady = false;
private bool mIsConfigDone => mIsDefaultConfigReady && mIsRemoteConfigReady;
private Dictionary<string, object> mConfigDic = new Dictionary<string, object>();
public void Initialize()
{
foreach (string tKey in ToukaInnerParams.OnlineParamDic.Keys)//加入touka内置参数
{
mConfigDic.Add(tKey, ToukaInnerParams.OnlineParamDic[tKey]);
}
foreach (string tKey in TKGParams.OnlineParamDic.Keys)//加入自定义参数
{
mConfigDic.Add(tKey, TKGParams.OnlineParamDic[tKey]);
}
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(pTask =>
{
DependencyStatus tStatus = pTask.Result;
if (tStatus == DependencyStatus.Available)
{
InitDone();
#if ANDROID_GP
FirebaseAnalytics.SetUserProperty("ALLOW_AD_PERSONALIZATION_SIGNALS", "true");
FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);
#endif
}
else
{
mIsReady = false;
Debug.LogError(string.Format("Could not resolve all Firebase dependencies: {0}", tStatus));
}
});
}
private void InitDone()
{
Debug.Log("Firebase init successfully!!");
mIsReady = true;
FirebaseApp.LogLevel = LogLevel.Debug;
OnInitializeDone?.Invoke();
InitRemoteConfig();
}
private void InitRemoteConfig()
{
FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(mConfigDic).ContinueWith(t =>
{
mIsDefaultConfigReady = true;
Debug.Log("firebase default config ready");
});
FirebaseRemoteConfig.DefaultInstance.FetchAndActivateAsync().ContinueWith(t =>
{
mIsRemoteConfigReady = true;
Debug.Log("firebase remote config ready");
ConfigInfo tInfo = FirebaseRemoteConfig.DefaultInstance.Info;
switch (tInfo.LastFetchStatus)
{
case LastFetchStatus.Success:
Debug.Log(string.Format("Remote data loaded and ready (last fetch time {0}).", tInfo.FetchTime));
string tKVLog = "";
foreach (string tKey in TKGParams.OnlineParamDic.Keys)
{
tKVLog = tKey + "_" + TKGSDKManager.Instance.GetConfigStr(tKey);
TKGSDKManager.Instance.LogEvent(tKVLog);
Debug.Log("TKG get firebase remote config is: " + tKVLog);
}
foreach (string tKey in ToukaInnerParams.OnlineParamDic.Keys)
{
tKVLog = tKey + "_" + TKGSDKManager.Instance.GetConfigStr(tKey);
TKGSDKManager.Instance.LogEvent(tKVLog);
Debug.Log("TKG get firebase remote config is: " + tKVLog);
}
OnRemoteConfigSucceed?.Invoke();
break;
case LastFetchStatus.Failure:
switch (tInfo.LastFetchFailureReason)
{
case FetchFailureReason.Error:
Debug.Log("Fetch failed for unknown reason");
break;
case FetchFailureReason.Throttled:
Debug.Log("Fetch throttled until " + tInfo.ThrottledEndTime);
break;
}
OnRemoteConfigFail?.Invoke();
break;
case LastFetchStatus.Pending:
Debug.Log("Latest Fetch call still pending.");
OnRemoteConfigFail?.Invoke();
break;
}
});
}
public void LogEvent(string pEvtName)
{
if (!mIsReady)
return;
Debug.Log("Firebase log event : " + pEvtName);
FirebaseAnalytics.LogEvent(pEvtName);
}
public void LogEvent(string pEvtName, string pEvtParam, string pEvtValue)
{
if (!mIsReady)
return;
FirebaseAnalytics.LogEvent(pEvtName, pEvtParam, pEvtValue);
}
public void LogEvent(string pEvtName, Dictionary<string, string> pParamDic)
{
if (!mIsReady)
return;
Parameter[] tParams = new Parameter[pParamDic.Count];
int tIndex = 0;
foreach (string tParamName in pParamDic.Keys)
{
tParams[tIndex] = new Parameter(tParamName, pParamDic[tParamName]);
tIndex++;
}
FirebaseAnalytics.LogEvent(pEvtName, tParams);
}
public string GetString(string pKey, string pDefault = "")
{
#if UNITY_EDITOR
if (mConfigDic.ContainsKey(pKey))
return mConfigDic[pKey].ToString();
return pDefault;
#endif
if (!(mIsReady && mIsConfigDone))
return mConfigDic[pKey].ToString();
return FirebaseRemoteConfig.DefaultInstance.GetValue(pKey).StringValue;
}
public int GetInt(string pKey, int pDefault = 0)
{
#if UNITY_EDITOR
if (mConfigDic.ContainsKey(pKey))
return int.Parse(mConfigDic[pKey].ToString());
return pDefault;
#endif
if (!(mIsReady && mIsConfigDone))
return int.Parse(mConfigDic[pKey].ToString());
return (int)FirebaseRemoteConfig.DefaultInstance.GetValue(pKey).LongValue;
}
public bool GetBool(string pKey, bool pDefault = false)
{
#if UNITY_EDITOR
if (mConfigDic.ContainsKey(pKey))
return bool.Parse(mConfigDic[pKey].ToString());
return pDefault;
#endif
if (!(mIsReady && mIsConfigDone))
return bool.Parse(mConfigDic[pKey].ToString());
return FirebaseRemoteConfig.DefaultInstance.GetValue(pKey).BooleanValue;
}
public double GetDouble(string pKey, double pDefault = 0)
{
#if UNITY_EDITOR
if (mConfigDic.ContainsKey(pKey))
return double.Parse(mConfigDic[pKey].ToString());
return pDefault;
#endif
if (!(mIsReady && mIsConfigDone))
return double.Parse(mConfigDic[pKey].ToString());
return FirebaseRemoteConfig.DefaultInstance.GetValue(pKey).DoubleValue;
}
#if ANDROID_GP
private const string AD_REVENUE = "ad_revenue";
private const string EVENT_SINGLE_REVENUE = "Single_Ads_Revenue";
private const string EVENT_ACCUMULATIVE_REVENUE = "Total_Ads_Revenue";
public void RecordAdRevenue(MaxSdkBase.AdInfo pAdInfo, string pAdType)
{
if (pAdInfo.Revenue > 0)
{
double tAddRevenue = pAdInfo.Revenue;
//log single revenue
LogAdRevenueEvent(EVENT_SINGLE_REVENUE, pAdInfo, pAdType);
//log accumulative revenue
float tBeforeRevenue = PlayerPrefs.GetFloat(AD_REVENUE, 0);
float tTotalRevenue = (float)(tAddRevenue + tBeforeRevenue);
if (tTotalRevenue >= 0.01)
{
LogAdRevenueEvent(EVENT_ACCUMULATIVE_REVENUE, pAdInfo, pAdType);
PlayerPrefs.SetFloat(AD_REVENUE, 0);
}
else
{
PlayerPrefs.SetFloat(AD_REVENUE, tTotalRevenue);
}
}
}
private void LogAdRevenueEvent(string pEventName, MaxSdkBase.AdInfo pAdInfo, string pAdType)
{
if (!mIsReady)
return;
if (pAdInfo != null)
{
Parameter[] tEventParams =
{
new Parameter("ad_platform", "Max"),
new Parameter("ad_source", pAdInfo.NetworkName),
new Parameter("ad_unit_name", pAdInfo.AdUnitIdentifier),
new Parameter(FirebaseAnalytics.ParameterCurrency,"USD"),
new Parameter("value", pAdInfo.Revenue),
new Parameter("ad_type",pAdType)
};
FirebaseAnalytics.LogEvent(pEventName, tEventParams);
}
}
#endif
}
#endif