using DidabuCloud.Unity.Core; using Firebase; using Firebase.Analytics; using Firebase.Extensions; using Mogafa.App.LogEvents; using Mogafa.Unity.FirebaseAnalytics; using System; using System.Collections.Generic; using UnityEngine; namespace DidabuCloud.Unity.Firebase.Analytics { public static class DidabuFirebaseAnalyticsExtension { private static string reporterName = ""; public static void InitFirebase(this Didabu didabu) { FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var dependencyStatus = task.Result; if (dependencyStatus == DependencyStatus.Available) { FirebaseAnalytics.SetAnalyticsCollectionEnabled(true); // Set the user's sign up method. FirebaseAnalytics.SetUserProperty( FirebaseAnalytics.UserPropertySignUpMethod, "Google"); // Set the user ID. if (!string.IsNullOrEmpty(didabu.User.DidabuId)) { FirebaseAnalytics.SetUserId(didabu.User.DidabuId); } else { didabu.OnInitialSuccessed += OnDidabuInitialSuccessed; if (!string.IsNullOrEmpty(didabu.User.DidabuId)) { FirebaseAnalytics.SetUserId(didabu.User.DidabuId); } } // Set default session duration values. FirebaseAnalytics.SetSessionTimeoutDuration(new TimeSpan(0, 30, 0)); } else { Debug.LogError( "Could not resolve all Firebase dependencies: " + dependencyStatus); } }); } private static void OnDidabuInitialSuccessed(string obj) { FirebaseAnalytics.SetUserId(obj); } private static bool firebaseAnalyticsLogEventAdded = false; public static void UseFirebaseAnalyticsLogEvent(this Didabu didabu, List eventNames = null, Dictionary eventNameMap = null, Dictionary eventParameterNameMap = null) { if (!firebaseAnalyticsLogEventAdded) { var reporter = new FirebaseAnalyticsLogEventReporter(); reporterName = reporter.Name; didabu.OnGetConfigurationSuccessed += OnGetConfigurationSuccessed; if (eventNames == null && didabu.Config != null) { eventNames = didabu.Config.GetEnabledEvents(reporterName); } LogEventReporter.AddEventReporter(reporter, eventNames, eventNameMap, eventParameterNameMap); firebaseAnalyticsLogEventAdded = true; return; } if (eventNames == null && didabu.Config != null) { eventNames = didabu.Config.GetEnabledEvents(reporterName); } if(eventNames != null) { LogEventReporter.ChangeEnabledEventNames(reporterName, eventNames.ToArray()); } LogEventReporter.ChangeEventNameMap(reporterName, eventNameMap); LogEventReporter.ChangeEventParameterNameMap(reporterName, eventParameterNameMap); } private static void OnGetConfigurationSuccessed(DidabuCoreConfig config) { var eventNames = config.GetEnabledEvents(reporterName); if(eventNames == null) { eventNames = new List(); } LogEventReporter.ChangeEnabledEventNames(reporterName, eventNames.ToArray()); } } }