Skip to content

Commit ac50f12

Browse files
authored
Merge pull request #371 from woocommerce/fix/370-tracks-alias
Tracks: fix username alias when switching to authenticated user
2 parents 50b03fb + f4590f8 commit ac50f12

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

WooCommerce/Classes/Analytics/TracksProvider.swift

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@ public class TracksProvider: AnalyticsProvider {
2424
//
2525
public extension TracksProvider {
2626
func refreshUserData() {
27-
if StoresManager.shared.isAuthenticated, let account = StoresManager.shared.sessionManager.defaultAccount {
28-
tracksService.switchToAuthenticatedUser(withUsername: account.username, userID: String(account.userID), skipAliasEventCreation: true)
29-
} else {
30-
tracksService.switchToAnonymousUser(withAnonymousID: StoresManager.shared.sessionManager.anonymousUserID)
31-
}
27+
switchTracksUsersIfNeeded()
3228
refreshMetadata()
3329
}
3430

@@ -51,6 +47,27 @@ public extension TracksProvider {
5147
// MARK: - Private Helpers
5248
//
5349
private extension TracksProvider {
50+
func switchTracksUsersIfNeeded() {
51+
let currentAnalyticsUsername = UserDefaults.standard[.analyticsUsername] as? String ?? ""
52+
if StoresManager.shared.isAuthenticated, let account = StoresManager.shared.sessionManager.defaultAccount {
53+
if currentAnalyticsUsername.isEmpty {
54+
// No previous username logged
55+
UserDefaults.standard[.analyticsUsername] = account.username
56+
tracksService.switchToAuthenticatedUser(withUsername: account.username, userID: String(account.userID), skipAliasEventCreation: false)
57+
} else if currentAnalyticsUsername == account.username {
58+
// Username did not change - just make sure Tracks client has it
59+
tracksService.switchToAuthenticatedUser(withUsername: account.username, userID: String(account.userID), skipAliasEventCreation: true)
60+
} else {
61+
// Username changed for some reason - switch back to anonymous first
62+
tracksService.switchToAnonymousUser(withAnonymousID: StoresManager.shared.sessionManager.anonymousUserID)
63+
tracksService.switchToAuthenticatedUser(withUsername: account.username, userID: String(account.userID), skipAliasEventCreation: false)
64+
}
65+
} else {
66+
UserDefaults.standard[.analyticsUsername] = nil
67+
tracksService.switchToAnonymousUser(withAnonymousID: StoresManager.shared.sessionManager.anonymousUserID)
68+
}
69+
}
70+
5471
func refreshMetadata() {
5572
DDLogInfo("♻️ Refreshing tracks metadata...")
5673
var userProperties = [String: Any]()

WooCommerce/Classes/Extensions/UserDefaults+Woo.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ extension UserDefaults {
1111
case defaultStoreID
1212
case defaultAnonymousID
1313
case versionOfLastRun
14+
case analyticsUsername
1415
}
1516
}
1617

0 commit comments

Comments
 (0)