263 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			263 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | #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 |