diff --git a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift index 7315fc942..618a6cbf1 100644 --- a/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift +++ b/apple/OmnivoreKit/Sources/Services/AudioSession/AudioController.swift @@ -231,9 +231,16 @@ public class AudioController: NSObject, ObservableObject, AVAudioPlayerDelegate self.itemAudioProperties = itemAudioProperties startAudio() + + EventTracker.track( + .audioSessionStart(linkID: itemAudioProperties.itemID) + ) } public func stop() { + let stoppedId = itemAudioProperties?.itemID + let stoppedTimeElapsed = timeElapsed + player?.pause() timer?.invalidate() @@ -251,6 +258,12 @@ public class AudioController: NSObject, ObservableObject, AVAudioPlayerDelegate timeElapsed = 0 duration = 1 durations = nil + + if let stoppedId = stoppedId { + EventTracker.track( + .audioSessionEnd(linkID: stoppedId, timeElapsed: stoppedTimeElapsed ?? 0.0) + ) + } } public func generateVoiceList() -> [(name: String, key: String, selected: Bool)] { diff --git a/apple/OmnivoreKit/Sources/Utils/EventTracking/TrackableEvents.swift b/apple/OmnivoreKit/Sources/Utils/EventTracking/TrackableEvents.swift index 0c663f231..e4bdc7840 100644 --- a/apple/OmnivoreKit/Sources/Utils/EventTracking/TrackableEvents.swift +++ b/apple/OmnivoreKit/Sources/Utils/EventTracking/TrackableEvents.swift @@ -4,6 +4,8 @@ public enum TrackableEvent { case linkRead(linkID: String, slug: String, originalArticleURL: String) case debugMessage(message: String) case backgroundFetch(jobStatus: BackgroundFetchJobStatus, itemCount: Int, secondsElapsed: Int) + case audioSessionStart(linkID: String) + case audioSessionEnd(linkID: String, timeElapsed: Double) } public enum BackgroundFetchJobStatus: String { @@ -22,6 +24,10 @@ public extension TrackableEvent { return "debug_message" case .backgroundFetch: return "background_fetch" + case .audioSessionStart: + return "audio_session_start" + case .audioSessionEnd: + return "audio_session_end" } } @@ -41,6 +47,15 @@ public extension TrackableEvent { "seconds_elapsed": String(secondsElapsed), "fetched_item_count": String(itemCount) ] + case let .audioSessionStart(linkID: linkID): + return [ + "link": linkID + ] + case let .audioSessionEnd(linkID: linkID, timeElapsed: timeElapsed): + return [ + "link": linkID, + "timeElapsed": String(timeElapsed) + ] } } }