Skip to content

Commit

Permalink
User properties enhancements with owned stations and wallet (#121)
Browse files Browse the repository at this point in the history
* WIP

* Set has wallet false on logout

* Set/remove owned stations property

* Set weather units properties on app launch

* Removed testing code

---------

Co-authored-by: Pantelis Giazitsis <[email protected]>
  • Loading branch information
pantelisss and Pantelis Giazitsis authored Jul 25, 2024
1 parent e64d5d0 commit 6070bda
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 6 deletions.
21 changes: 16 additions & 5 deletions PresentationLayer/Utils/Weather/WeatherUnitsManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class WeatherUnitsManager: ObservableObject {

init(mainUseCase: MainUseCase) {
self.mainUseCase = mainUseCase
setWeatherUnitsAnalytics()
}

var temperatureUnit: TemperatureUnitsEnum {
Expand All @@ -31,7 +32,7 @@ class WeatherUnitsManager: ObservableObject {

set {
mainUseCase.saveOrUpdateWeatherMetric(unitProtocol: newValue)
WXMAnalytics.shared.setUserProperty(key: .temperature, value: temperatureUnit.analyticsValue)
setWeatherUnitsAnalytics()
}
}

Expand All @@ -42,7 +43,7 @@ class WeatherUnitsManager: ObservableObject {

set {
mainUseCase.saveOrUpdateWeatherMetric(unitProtocol: newValue)
WXMAnalytics.shared.setUserProperty(key: .precipitation, value: precipitationUnit.analyticsValue)
setWeatherUnitsAnalytics()
}
}

Expand All @@ -53,7 +54,7 @@ class WeatherUnitsManager: ObservableObject {

set {
mainUseCase.saveOrUpdateWeatherMetric(unitProtocol: newValue)
WXMAnalytics.shared.setUserProperty(key: .wind, value: windSpeedUnit.analyticsValue)
setWeatherUnitsAnalytics()
}
}

Expand All @@ -64,7 +65,7 @@ class WeatherUnitsManager: ObservableObject {

set {
mainUseCase.saveOrUpdateWeatherMetric(unitProtocol: newValue)
WXMAnalytics.shared.setUserProperty(key: .windDirection, value: windDirectionUnit.analyticsValue)
setWeatherUnitsAnalytics()
}
}

Expand All @@ -75,7 +76,7 @@ class WeatherUnitsManager: ObservableObject {

set {
mainUseCase.saveOrUpdateWeatherMetric(unitProtocol: newValue)
WXMAnalytics.shared.setUserProperty(key: .pressure, value: pressureUnit.analyticsValue)
setWeatherUnitsAnalytics()
}
}

Expand Down Expand Up @@ -124,3 +125,13 @@ class WeatherUnitsManager: ObservableObject {
return pressureUnits
}
}

private extension WeatherUnitsManager {
func setWeatherUnitsAnalytics() {
WXMAnalytics.shared.setUserProperty(key: .temperature, value: temperatureUnit.analyticsValue)
WXMAnalytics.shared.setUserProperty(key: .precipitation, value: precipitationUnit.analyticsValue)
WXMAnalytics.shared.setUserProperty(key: .wind, value: windSpeedUnit.analyticsValue)
WXMAnalytics.shared.setUserProperty(key: .windDirection, value: windDirectionUnit.analyticsValue)
WXMAnalytics.shared.setUserProperty(key: .pressure, value: pressureUnit.analyticsValue)
}
}
13 changes: 13 additions & 0 deletions wxm-ios/DataLayer/UserDevicesService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ public class UserDevicesService {
object: nil,
queue: nil) { [weak self] _ in
self?.invalidateCaches()
self?.updateOwnedStationsAnalyticsProperty()
}

updateOwnedStationsAnalyticsProperty()
}

deinit {
Expand Down Expand Up @@ -78,6 +81,7 @@ public class UserDevicesService {
WidgetCenter.shared.reloadAllTimelines()

NotificationCenter.default.post(name: .userDevicesListUpdated, object: nil)
self?.updateOwnedStationsAnalyticsProperty()
}
return Just(response)
}
Expand Down Expand Up @@ -251,4 +255,13 @@ private extension UserDevicesService {
followStatesCache.invalidate()
userDevicesCache.invalidate()
}

func updateOwnedStationsAnalyticsProperty() {
guard let ownedDevicesCount = getCachedDevices()?.filter({ $0.relation == .owned }).count else {
WXMAnalytics.shared.removeUserProperty(key: .stationsOwn)
return
}

WXMAnalytics.shared.setUserProperty(key: .stationsOwn, value: .custom("\(ownedDevicesCount)"))
}
}
5 changes: 5 additions & 0 deletions wxm-ios/DataLayer/UserInfoService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class UserInfoService {
object: nil,
queue: nil) { [weak self] _ in
self?.userInfoSubject.send(nil)
WXMAnalytics.shared.removeUserProperty(key: .hasWallet)
}
}

Expand All @@ -36,6 +37,10 @@ public class UserInfoService {
return
}
WXMAnalytics.shared.setUserId(value.id)

let hasWallet = value.wallet?.address?.isEmpty == false
WXMAnalytics.shared.setUserProperty(key: .hasWallet, value: .custom(String(hasWallet)))

self?.userInfoSubject.send(value)
}
.store(in: &cancellableSet)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ extension Parameter: CustomStringConvertible {
switch self {
case .action, .actionName, .contentName, .contentId, .promptName, .promptType,
.step, .state, .date, .theme, .temperature, .wind, .windDirection, .precipitation, .pressure,
.sortBy, .filter, .groupBy, .status, .appId:
.sortBy, .filter, .groupBy, .status, .appId, .hasWallet, .stationsOwn:
return rawValue
case .contentType:
return AnalyticsParameterContentType
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ public enum Parameter: String {
case groupBy = "GROUP_BY"
case status = "STATUS"
case appId = "APP_ID"
case stationsOwn = "STATIONS_OWN"
case hasWallet = "HAS_WALLET"
}

public enum ParameterValue {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ protocol AnalyticsProviderImplementation {
func trackEvent(_ event: Event, parameters: [Parameter: ParameterValue]?)
func setUserId(_ userId: String?)
func setUserProperty(key: Parameter, value: ParameterValue)
func removeUserProperty(key: Parameter)
func setDefaultParameter(key: Parameter, value: ParameterValue)
func setAnalyticsCollectionEnabled(_ enabled: Bool)
}
4 changes: 4 additions & 0 deletions wxm-ios/Toolkit/Toolkit/Analytics/FirebaseAnalytics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ struct FirebaseAnalytics: AnalyticsProviderImplementation {
Analytics.setUserProperty(value.rawValue, forName: key.description)
}

func removeUserProperty(key: Parameter) {
Analytics.setUserProperty(nil, forName: key.description)
}

func setDefaultParameter(key: Parameter, value: ParameterValue) {
Analytics.setDefaultEventParameters([key.description: value.rawValue])
}
Expand Down
4 changes: 4 additions & 0 deletions wxm-ios/Toolkit/Toolkit/Analytics/MixpanelAnalytics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ struct MixpanelAnalytics: AnalyticsProviderImplementation {
Mixpanel.mainInstance().people.set(property: key.description, to: value.rawValue)
}

func removeUserProperty(key: Parameter) {
Mixpanel.mainInstance().people.unset(properties: [key.description])
}

func setDefaultParameter(key: Parameter, value: ParameterValue) {
addMixpanelSuperProperties(properties: [key: value].toMixpanelParamsDictionary ?? [:])
}
Expand Down
1 change: 1 addition & 0 deletions wxm-ios/Toolkit/Toolkit/Analytics/MockAnalytics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ struct MockAnalytics: AnalyticsProviderImplementation {
func trackEvent(_ event: Event, parameters: [Parameter: ParameterValue]?) {}
func setUserId(_ userId: String?) {}
func setUserProperty(key: Parameter, value: ParameterValue) {}
func removeUserProperty(key: Parameter) {}
func setDefaultParameter(key: Parameter, value: ParameterValue) {}
func setAnalyticsCollectionEnabled(_ enabled: Bool) {}
}
4 changes: 4 additions & 0 deletions wxm-ios/Toolkit/Toolkit/Analytics/WXMAnalytics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ public extension WXMAnalytics {
providers.forEach { $0.setUserProperty(key: key, value: value) }
}

func removeUserProperty(key: Parameter) {
providers.forEach { $0.removeUserProperty(key: key) }
}

func setDefaultParameter(key: Parameter, value: ParameterValue) {
providers.forEach { $0.setDefaultParameter(key: key, value: value) }
}
Expand Down

0 comments on commit 6070bda

Please sign in to comment.