using System; using Bit.App.Abstractions; using Google.Analytics; namespace Bit.iOS.Core.Services { public class GoogleAnalyticsService : IGoogleAnalyticsService { private readonly ITracker _tracker; private readonly IAuthService _authService; private bool _setUserId = true; public GoogleAnalyticsService( IAppIdService appIdService, IAuthService authService) { _authService = authService; Gai.SharedInstance.DispatchInterval = 10; Gai.SharedInstance.TrackUncaughtExceptions = true; _tracker = Gai.SharedInstance.GetTracker("UA-81915606-1"); _tracker.SetAllowIdfaCollection(true); _tracker.Set(GaiConstants.ClientId, appIdService.AnonymousAppId); } public void RefreshUserId() { _tracker.Set(GaiConstants.UserId, null); _setUserId = true; } public void TrackAppEvent(string eventName, string label = null) { TrackEvent("App", eventName, label); } public void TrackExtensionEvent(string eventName, string label = null) { TrackEvent("Extension", eventName, label); } public void TrackEvent(string category, string eventName, string label = null) { SetUserId(); var dict = DictionaryBuilder.CreateEvent(category, eventName, label, null).Build(); _tracker.Send(dict); Gai.SharedInstance.Dispatch(); } public void TrackException(string message, bool fatal) { SetUserId(); var dict = DictionaryBuilder.CreateException(message, fatal).Build(); _tracker.Send(dict); } public void TrackPage(string pageName) { SetUserId(); _tracker.Set(GaiConstants.ScreenName, pageName); var dict = DictionaryBuilder.CreateScreenView().Build(); _tracker.Send(dict); } public void Dispatch(Action completionHandler = null) { Gai.SharedInstance.Dispatch((result) => { completionHandler?.Invoke(); }); } private void SetUserId() { if(_setUserId && _authService.IsAuthenticated) { _tracker.Set(GaiConstants.UserId, _authService.UserId); _setUserId = false; } } } }