5 // Created by Cornelius Horstmann on 26.02.17.
6 // Copyright © 2017 PIWIK. All rights reserved.
12 /// Unique ID per visitor (device in this case). Should be
13 /// generated upon first start and never changed after.
17 /// An optional user identifier such as email or username.
23 static func current(in matomoUserDefaults: MatomoUserDefaults) -> Visitor {
24 var matomoUserDefaults = matomoUserDefaults
26 if let existingId = matomoUserDefaults.clientId {
29 let newId = newVisitorID()
30 matomoUserDefaults.clientId = newId
33 let userId = matomoUserDefaults.visitorUserId
34 return Visitor(id: id, userId: userId)
37 static func newVisitorID() -> String {
38 let uuid = UUID().uuidString
39 let sanitizedUUID = uuid.replacingOccurrences(of: "-", with: "")
40 let start = sanitizedUUID.startIndex
41 let end = sanitizedUUID.index(start, offsetBy: 16)
42 return String(sanitizedUUID[start..<end])