// // Visitor.swift // PiwikTracker // // Created by Cornelius Horstmann on 26.02.17. // Copyright © 2017 PIWIK. All rights reserved. // import Foundation struct Visitor { /// Unique ID per visitor (device in this case). Should be /// generated upon first start and never changed after. /// api-key: _id let id: String /// An optional user identifier such as email or username. /// api-key: uid let userId: String? } extension Visitor { static func current(in matomoUserDefaults: MatomoUserDefaults) -> Visitor { var matomoUserDefaults = matomoUserDefaults let id: String if let existingId = matomoUserDefaults.clientId { id = existingId } else { let newId = newVisitorID() matomoUserDefaults.clientId = newId id = newId } let userId = matomoUserDefaults.visitorUserId return Visitor(id: id, userId: userId) } static func newVisitorID() -> String { let uuid = UUID().uuidString let sanitizedUUID = uuid.replacingOccurrences(of: "-", with: "") let start = sanitizedUUID.startIndex let end = sanitizedUUID.index(start, offsetBy: 16) return String(sanitizedUUID[start..