From 99db621731a7a0a94267fa6d4506cdc08e500521 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 16 Feb 2024 13:54:18 +0100 Subject: [PATCH 1/4] fix reset session when reset or close are called --- CHANGELOG.md | 2 ++ PostHog/PostHogSDK.swift | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f022709ac..a6a7a389bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## Next +- fix reset session when reset or close are called [#106](https://github.com/PostHog/posthog-ios/pull/106) + ## 3.1.3 - 2024-02-09 - fix ISO8601 formatter to always use the 24h format [#106](https://github.com/PostHog/posthog-ios/pull/106) diff --git a/PostHog/PostHogSDK.swift b/PostHog/PostHogSDK.swift index 206af94099..c1be3517a9 100644 --- a/PostHog/PostHogSDK.swift +++ b/PostHog/PostHogSDK.swift @@ -245,9 +245,18 @@ private let sessionChangeThreshold: TimeInterval = 60 * 30 return } + // storage also removes all feature flags storage?.reset() queue?.clear() flagCallReported.removeAll() + resetSession() + } + + private func resetSession() { + sessionLock.withLock { + sessionId = nil + sessionLastTimestamp = nil + } } private func getGroups() -> [String: String] { @@ -674,12 +683,22 @@ private let sessionChangeThreshold: TimeInterval = 60 * 30 sessionManager = nil config = PostHogConfig(apiKey: "") api = nil + featureFlags = nil + storage = nil #if !os(watchOS) self.reachability?.stopNotifier() reachability = nil #endif flagCallReported.removeAll() featureFlags = nil + context = nil + resetSession() + unregisterNotifications() + capturedAppInstalled = false + appFromBackground = false + isInBackground = false + toggleHedgeLog(false) + // TODO: remove swizzlers } } @@ -689,6 +708,20 @@ private let sessionChangeThreshold: TimeInterval = 60 * 30 return postHog } + private func unregisterNotifications() { + let defaultCenter = NotificationCenter.default + + #if os(iOS) || os(tvOS) + defaultCenter.removeObserver(self, name: UIApplication.didFinishLaunchingNotification, object: nil) + defaultCenter.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil) + defaultCenter.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil) + #elseif os(macOS) + defaultCenter.removeObserver(self, name: NSApplication.didFinishLaunchingNotification, object: nil) + defaultCenter.removeObserver(self, name: NSApplication.didResignActiveNotification, object: nil) + defaultCenter.removeObserver(self, name: NSApplication.didBecomeActiveNotification, object: nil) + #endif + } + private func registerNotifications() { let defaultCenter = NotificationCenter.default From 01021ce789a9c13a82ee352398ae532ed653868e Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 16 Feb 2024 13:54:42 +0100 Subject: [PATCH 2/4] fix --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6a7a389bb..c388bdcd00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## Next -- fix reset session when reset or close are called [#106](https://github.com/PostHog/posthog-ios/pull/106) +- fix reset session when reset or close are called [#107](https://github.com/PostHog/posthog-ios/pull/107) ## 3.1.3 - 2024-02-09 From 8836a98c7d9c54a8ef3036205bdf744b50138b0e Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 16 Feb 2024 14:05:51 +0100 Subject: [PATCH 3/4] add test --- PostHogTests/PostHogSDKTest.swift | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/PostHogTests/PostHogSDKTest.swift b/PostHogTests/PostHogSDKTest.swift index bb0cbab01d..e40af14d2f 100644 --- a/PostHogTests/PostHogSDKTest.swift +++ b/PostHogTests/PostHogSDKTest.swift @@ -649,6 +649,36 @@ class PostHogSDKTest: QuickSpec { sut.reset() sut.close() } + + it("clears sessionId after reset") { + let sut = self.getSut(captureApplicationLifecycleEvents: true, flushAt: 1) + let mockNow = MockDate() + sut.now = { mockNow.date } + + sut.handleAppDidEnterBackground() // Background "timer": 0 mins + + var events = getBatchedEvents(server) + expect(events.count) == 1 + + expect(events[0].properties["$session_id"] as? String).toNot(beNil()) + + sut.reset() + + server.stop() + server = nil + server = MockPostHogServer() + server.start() + + sut.capture("event captured while in background") + + events = getBatchedEvents(server) + expect(events.count) == 1 + + expect(events[0].properties["$session_id"] as? String).to(beNil()) + + sut.reset() + sut.close() + } } } From eea5d0d5e7788795d5ed7e34b87664ad23deca74 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Fri, 16 Feb 2024 14:07:00 +0100 Subject: [PATCH 4/4] fix --- PostHogTests/PostHogSDKTest.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PostHogTests/PostHogSDKTest.swift b/PostHogTests/PostHogSDKTest.swift index e40af14d2f..ab59b0fbd4 100644 --- a/PostHogTests/PostHogSDKTest.swift +++ b/PostHogTests/PostHogSDKTest.swift @@ -655,7 +655,7 @@ class PostHogSDKTest: QuickSpec { let mockNow = MockDate() sut.now = { mockNow.date } - sut.handleAppDidEnterBackground() // Background "timer": 0 mins + sut.capture("event captured with session") var events = getBatchedEvents(server) expect(events.count) == 1 @@ -669,7 +669,7 @@ class PostHogSDKTest: QuickSpec { server = MockPostHogServer() server.start() - sut.capture("event captured while in background") + sut.capture("event captured w/o session") events = getBatchedEvents(server) expect(events.count) == 1