From f39bb0712b7f60785353939ba208bcbcb01a2b5a Mon Sep 17 00:00:00 2001 From: Roel Date: Wed, 8 Nov 2023 14:27:47 +0100 Subject: [PATCH] Adds isOptedOut storage in UserDefaults --- .../SimpleAnalytics/RequestDispatcher.swift | 1 - Sources/SimpleAnalytics/SimpleAnalytics.swift | 28 +++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Sources/SimpleAnalytics/RequestDispatcher.swift b/Sources/SimpleAnalytics/RequestDispatcher.swift index 2cf4e0d..8651981 100644 --- a/Sources/SimpleAnalytics/RequestDispatcher.swift +++ b/Sources/SimpleAnalytics/RequestDispatcher.swift @@ -17,7 +17,6 @@ internal struct RequestDispatcher { parameters: event, encoder: JSONParameterEncoder.default).responseData { response in - debugPrint(response) if let httpStatusCode = response.response?.statusCode { switch httpStatusCode { case 201: diff --git a/Sources/SimpleAnalytics/SimpleAnalytics.swift b/Sources/SimpleAnalytics/SimpleAnalytics.swift index bddd2e8..154edc0 100644 --- a/Sources/SimpleAnalytics/SimpleAnalytics.swift +++ b/Sources/SimpleAnalytics/SimpleAnalytics.swift @@ -22,7 +22,7 @@ import Foundation /// static let shared: SimpleAnalytics = SimpleAnalytics(hostname: "mobileapp.yourdomain.com") /// } /// ```` -public class SimpleAnalytics: NSObject { +final public class SimpleAnalytics: NSObject { /// The hostname of the website in Simple Analytics the tracking should be send to. Without `https://` private let hostname: String private let userAgent: String @@ -30,11 +30,16 @@ public class SimpleAnalytics: NSObject { private let userTimezone: String /// The last date a unique visit was tracked. private var visitDate: Date? - /// Key used to store the visit date in UserDefaults - private var visitDateKey = "simpleanalytics.visitdate" - /// Defines if the user is opted out. When set to `true`, all tracking will be skipped. This is not persisted between sessions. - public var isOptedOut: Bool = false + /// Defines if the user is opted out. When set to `true`, all tracking will be skipped. This is persisted between sessions. + public var isOptedOut: Bool { + get { + UserDefaults.standard.bool(forKey: Keys.optedOutKey) + } + set { + UserDefaults.standard.setValue(newValue, forKey: Keys.optedOutKey) + } + } /// Create the SimpleAnalytics instance that can be used to trigger events and pageviews. /// - Parameter hostname: The hostname as found in SimpleAnalytics, without `https://` @@ -43,7 +48,7 @@ public class SimpleAnalytics: NSObject { self.userAgent = UserAgent.userAgentString() self.userLanguage = Locale.current.identifier self.userTimezone = TimeZone.current.identifier - self.visitDate = UserDefaults.standard.object(forKey: visitDateKey) as? Date + self.visitDate = UserDefaults.standard.object(forKey: Keys.visitDateKey) as? Date } /// Track a pageview @@ -118,13 +123,20 @@ public class SimpleAnalytics: NSObject { } else { // Last visit is not in today, so unique. self.visitDate = Date() - UserDefaults.standard.set(visitDate, forKey: visitDateKey) + UserDefaults.standard.set(visitDate, forKey: Keys.visitDateKey) return true } } else { + // No visit date yet, initialize it visitDate = Date() - UserDefaults.standard.set(visitDate, forKey: visitDateKey) + UserDefaults.standard.set(visitDate, forKey: Keys.visitDateKey) return true } } + + /// Keys used to store things in UserDefaults + internal struct Keys { + static let visitDateKey = "simpleanalytics.visitdate" + static let optedOutKey = "simpleanalytics.isoptedout" + } }