mixpanel-swift/Sources/SessionMetadata.swift
2025-05-29 17:45:08 -07:00

51 lines
1.3 KiB
Swift

//
// Metadata.swift
// Mixpanel
//
// Created by Yarden Eitan on 10/24/17.
// Copyright © 2017 Mixpanel. All rights reserved.
//
import Foundation
class SessionMetadata {
var eventsCounter: UInt64 = 0
var peopleCounter: UInt64 = 0
var sessionID: String = String.randomId()
var sessionStartEpoch: UInt64 = 0
var trackingQueue: DispatchQueue
init(trackingQueue: DispatchQueue) {
self.trackingQueue = trackingQueue
}
func applicationWillEnterForeground() {
trackingQueue.async { [weak self] in
guard let self = self else { return }
self.eventsCounter = 0
self.peopleCounter = 0
self.sessionID = String.randomId()
self.sessionStartEpoch = UInt64(Date().timeIntervalSince1970)
}
}
func toDict(isEvent: Bool = true) -> InternalProperties {
let dict: [String: Any] = [
"$mp_metadata": [
"$mp_event_id": String.randomId(),
"$mp_session_id": sessionID,
"$mp_session_seq_id": (isEvent ? eventsCounter : peopleCounter),
"$mp_session_start_sec": sessionStartEpoch,
] as [String: Any]
]
isEvent ? (eventsCounter += 1) : (peopleCounter += 1)
return dict
}
}
extension String {
fileprivate static func randomId() -> String {
return String(format: "%08x%08x", arc4random(), arc4random())
}
}