diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/AbstractEventDriver.cs b/Runtime/GuruCore/Runtime/Analytics/Events/AbstractEventDriver.cs index 6bf9786..de69f4c 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Events/AbstractEventDriver.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Events/AbstractEventDriver.cs @@ -1,8 +1,25 @@ +using System.Collections.Generic; + namespace Guru { - public abstract class AbstractEventDriver: IEventDriver + + public interface IEventDriver { - private GuruEventBuffer _buffer = new GuruEventBuffer(); + void TriggerFlush(); + void AddEvent(TrackingEvent trackingEvent); + } + + public interface IPropertyCollecter + { + void AddProperty(string key, string value); + } + + + + public abstract class AbstractEventDriver: IEventDriver, IPropertyCollecter + { + private GuruEventBuffer _eventBuffer = new GuruEventBuffer(); + private GuruEventBuffer _propertyBuffer = new GuruEventBuffer(); // Firebase 是否可用 private bool _isDriverReady = false; @@ -12,7 +29,20 @@ namespace Guru _isDriverReady = true; FlushAll(); } - public void Append(TrackingEvent trackingEvent) + + + public void AddEvent(string eventName, Dictionary data = null, + Analytics.EventSetting setting = null, int priority = -1) + { + var trackingEvent= new TrackingEvent(eventName, data, setting, priority); + AddEvent(trackingEvent); + } + + /// + /// 添加事件 + /// + /// + public void AddEvent(TrackingEvent trackingEvent) { if (_isDriverReady) { @@ -20,18 +50,42 @@ namespace Guru } else { - _buffer.Push(trackingEvent); - } - - + _eventBuffer.Push(trackingEvent); + } } + /// + /// 添加属性 + /// + /// + /// + public void AddProperty(string key, string value) + { + var property = new TrackingProperty(key, value); + if (_isDriverReady) + { + FlushProperty(property); + } + else + { + _propertyBuffer.Push(property); + } + } + + /// + /// 写入所有 + /// private void FlushAll() { - while(_buffer.Pop(out var trackingEvent)) + while(_eventBuffer.Pop(out var trackingEvent)) { FlushTrackingEvent(trackingEvent); } + + while (_propertyBuffer.Pop(out var property)) + { + FlushProperty(property); + } } @@ -42,5 +96,11 @@ namespace Guru protected abstract void FlushTrackingEvent(TrackingEvent trackEvent); + protected abstract void FlushProperty(TrackingProperty property); + + } + + + } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/AdjustEventDriver.cs b/Runtime/GuruCore/Runtime/Analytics/Events/AdjustEventDriver.cs index 8f93057..a91e54b 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Events/AdjustEventDriver.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Events/AdjustEventDriver.cs @@ -30,6 +30,10 @@ namespace Guru Adjust.trackEvent(adjustEvent); } } - + + protected override void FlushProperty(TrackingProperty property) + { + + } } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/FBEventDriver.cs b/Runtime/GuruCore/Runtime/Analytics/Events/FBEventDriver.cs index 0467f41..9cba219 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Events/FBEventDriver.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Events/FBEventDriver.cs @@ -17,5 +17,10 @@ namespace Guru FBService.LogEvent(eventName, null, data); } + + protected override void FlushProperty(TrackingProperty property) + { + + } } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/FirebaseEventDriver.cs b/Runtime/GuruCore/Runtime/Analytics/Events/FirebaseEventDriver.cs index c7bb446..16526cd 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Events/FirebaseEventDriver.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Events/FirebaseEventDriver.cs @@ -50,6 +50,15 @@ namespace Guru FirebaseAnalytics.LogEvent(eventName); } } + + /// + /// 输出属性 + /// + /// + protected override void FlushProperty(TrackingProperty property) + { + FirebaseAnalytics.SetUserProperty(property.key, property.value); + } } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventBuffer.cs b/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventBuffer.cs index b871ab6..78b185b 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventBuffer.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventBuffer.cs @@ -1,51 +1,40 @@ - - -using System.Collections.Generic; - namespace Guru { using System.Collections.Concurrent; - public class GuruEventBuffer + public class GuruEventBuffer { - private ConcurrentQueue _eventQueue; - - public int Count => _eventQueue?.Count ?? -1; - - + private ConcurrentQueue _buffer; + /// /// 构造函数 /// public GuruEventBuffer() { - _eventQueue = new ConcurrentQueue(); + _buffer = new ConcurrentQueue(); } /// /// 入栈 /// - /// - public void Push(TrackingEvent trackEvent) + /// + public void Push(T item) { - _eventQueue.Enqueue(trackEvent); + _buffer.Enqueue(item); } /// /// 出栈 /// - /// + /// /// - public bool Pop(out TrackingEvent trackingEvent) + public bool Pop(out T item) { - return _eventQueue.TryDequeue(out trackingEvent); + return _buffer.TryDequeue(out item); } } - public interface IEventDriver - { - void TriggerFlush(); - void Append(TrackingEvent trackingEvent); - } + diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventDriver.cs b/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventDriver.cs index 9eec77a..27aa75f 100644 --- a/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventDriver.cs +++ b/Runtime/GuruCore/Runtime/Analytics/Events/GuruEventDriver.cs @@ -6,6 +6,15 @@ namespace Guru { GuruAnalytics.Instance.LogEvent(trackingEvent.eventName, trackingEvent.data, trackingEvent.priority); } + + /// + /// 输出属性 + /// + /// + protected override void FlushProperty(TrackingProperty property) + { + GuruAnalytics.Instance.SetUserProperty(property.key, property.value); + } } } \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/GuruPropertyBuffer.cs b/Runtime/GuruCore/Runtime/Analytics/Events/GuruPropertyBuffer.cs new file mode 100644 index 0000000..9284616 --- /dev/null +++ b/Runtime/GuruCore/Runtime/Analytics/Events/GuruPropertyBuffer.cs @@ -0,0 +1,12 @@ +namespace Guru +{ + using System.Collections.Concurrent; + + public class GuruPropertyBuffer + { + private ConcurrentQueue _propertyQueue; + + + + } +} \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/GuruPropertyBuffer.cs.meta b/Runtime/GuruCore/Runtime/Analytics/Events/GuruPropertyBuffer.cs.meta new file mode 100644 index 0000000..06bb884 --- /dev/null +++ b/Runtime/GuruCore/Runtime/Analytics/Events/GuruPropertyBuffer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 38faf6b8af864e829144d9de91c4b0a5 +timeCreated: 1721983424 \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/TrackingEvent.cs b/Runtime/GuruCore/Runtime/Analytics/Events/TrackingEvent.cs new file mode 100644 index 0000000..968ddee --- /dev/null +++ b/Runtime/GuruCore/Runtime/Analytics/Events/TrackingEvent.cs @@ -0,0 +1,65 @@ + + +namespace Guru +{ + using System.Collections.Generic; + + /// + /// 追踪事件 + /// + public class TrackingEvent + { + public string eventName; + public int priority; + public Dictionary data; + public Analytics.EventSetting setting; + + public TrackingEvent() + { + } + + /// + /// 保存打点信息 + /// + /// + /// + /// + /// + public TrackingEvent(string eventName, Dictionary data = null, Analytics.EventSetting setting = null, int priority = -1) + { + this.eventName = eventName; + this.data = data; + this.setting = setting; + this.priority = priority; + } + + public override string ToString() + { + return $"eventName: {eventName}, data: {data}, setting: {setting}, priority: {priority}"; + } + } + + /// + /// 追踪用户属性 + /// + public class TrackingProperty + { + public string key; + public string value; + + public TrackingProperty(string key, string value) + { + this.key = key; + this.value = value; + } + + public override string ToString() + { + return $"property: {key}:{value}"; + } + } + + + + +} \ No newline at end of file diff --git a/Runtime/GuruCore/Runtime/Analytics/Events/TrackingEvent.cs.meta b/Runtime/GuruCore/Runtime/Analytics/Events/TrackingEvent.cs.meta new file mode 100644 index 0000000..25da81b --- /dev/null +++ b/Runtime/GuruCore/Runtime/Analytics/Events/TrackingEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6b9532ec20444115a888ffc89276172a +timeCreated: 1721983520 \ No newline at end of file