@@ -25,12 +25,11 @@ import Foundation
2525final public class SimpleAnalytics : NSObject {
2626 /// The hostname of the website in Simple Analytics the tracking should be send to. Without `https://`
2727 let hostname : String
28- private let userAgent : String
28+ private var userAgent : String ?
2929 private let userLanguage : String
3030 private let userTimezone : String
3131 /// The last date a unique visit was tracked.
3232 private var visitDate : Date ?
33- private let userAgentProvider = UserAgentProvider ( )
3433 private var sharedDefaultsSuiteName : String ?
3534
3635 /// Defines if the user is opted out. When set to `true`, all tracking will be skipped. This is persisted between sessions.
@@ -47,7 +46,6 @@ final public class SimpleAnalytics: NSObject {
4746 /// - Parameter hostname: The hostname as found in SimpleAnalytics, without `https://`
4847 public init ( hostname: String ) {
4948 self . hostname = hostname
50- self . userAgent = userAgentProvider. userAgent
5149 self . userLanguage = Locale . current. identifier
5250 self . userTimezone = TimeZone . current. identifier
5351 self . visitDate = UserDefaults . standard. object ( forKey: Keys . visitDateKey) as? Date
@@ -58,7 +56,6 @@ final public class SimpleAnalytics: NSObject {
5856 /// - Parameter: sharedDefaultsSuiteName: When extensions (such as a main app and widget) have a set of sharedDefaults (using an App Group) that unique user can be counted once using this (instead of two or more times when using app and widget, etc.)
5957 public init ( hostname: String , sharedDefaultsSuiteName: String ) {
6058 self . hostname = hostname
61- self . userAgent = userAgentProvider. userAgent
6259 self . userLanguage = Locale . current. identifier
6360 self . userTimezone = TimeZone . current. identifier
6461 self . sharedDefaultsSuiteName = sharedDefaultsSuiteName
@@ -96,6 +93,7 @@ final public class SimpleAnalytics: NSObject {
9693 guard !isOptedOut else {
9794 return
9895 }
96+ let userAgent = try await getUserAgent ( )
9997 let event = Event (
10098 type: . pageview,
10199 hostname: hostname,
@@ -115,6 +113,7 @@ final public class SimpleAnalytics: NSObject {
115113 guard !isOptedOut else {
116114 return
117115 }
116+ let userAgent = try await getUserAgent ( )
118117 let event = Event (
119118 type: . event,
120119 hostname: hostname,
@@ -188,6 +187,14 @@ final public class SimpleAnalytics: NSObject {
188187 }
189188 }
190189
190+ /// Get the cached userAgent or fetch a new one
191+ internal func getUserAgent( ) async throws -> String {
192+ if let userAgent { return userAgent }
193+ let newUserAgent = try await UserAgentFetcher . fetch ( )
194+ userAgent = newUserAgent
195+ return newUserAgent
196+ }
197+
191198 /// Keys used to store things in UserDefaults
192199 internal struct Keys {
193200 static let visitDateKey = " simpleanalytics.visitdate "
0 commit comments