mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Decouple the bug report service from the analytics one
This commit is contained in:
committed by
Stefan Ceriu
parent
c3571f4f4e
commit
a4c9135b58
@@ -15,6 +15,7 @@
|
||||
//
|
||||
|
||||
import AnalyticsEvents
|
||||
import Combine
|
||||
import PostHog
|
||||
|
||||
/// A class responsible for managing a variety of analytics clients
|
||||
@@ -34,20 +35,23 @@ class AnalyticsService {
|
||||
/// The analytics client to send events with.
|
||||
private let client: AnalyticsClientProtocol
|
||||
private let appSettings: AppSettings
|
||||
private let bugReportService: BugReportServiceProtocol
|
||||
|
||||
/// A signpost client for performance testing the app. This client doesn't respect the
|
||||
/// `isRunning` state or behave any differently when `start`/`reset` are called.
|
||||
let signpost = Signposter()
|
||||
|
||||
/// Whether or not the object is enabled and sending events to the server.
|
||||
private let isRunningSubject: CurrentValueSubject<Bool, Never> = .init(false)
|
||||
var isRunningPublisher: CurrentValuePublisher<Bool, Never> {
|
||||
isRunningSubject.asCurrentValuePublisher()
|
||||
}
|
||||
|
||||
init(client: AnalyticsClientProtocol, appSettings: AppSettings, bugReportService: BugReportServiceProtocol) {
|
||||
init(client: AnalyticsClientProtocol, appSettings: AppSettings) {
|
||||
self.client = client
|
||||
self.appSettings = appSettings
|
||||
self.bugReportService = bugReportService
|
||||
}
|
||||
|
||||
/// Whether or not the object is enabled and sending events to the server.
|
||||
var isRunning: Bool { client.isRunning }
|
||||
isRunningSubject.send(client.isRunning)
|
||||
}
|
||||
|
||||
/// Whether to show the user the analytics opt in prompt.
|
||||
var shouldShowAnalyticsPrompt: Bool {
|
||||
@@ -72,20 +76,21 @@ class AnalyticsService {
|
||||
// The order is important here. PostHog ignores the reset if stopped.
|
||||
reset()
|
||||
client.stop()
|
||||
bugReportService.stop()
|
||||
|
||||
isRunningSubject.send(false)
|
||||
MXLog.info("Stopped.")
|
||||
}
|
||||
|
||||
/// Starts the analytics client if the user has opted in, otherwise does nothing.
|
||||
func startIfEnabled() {
|
||||
guard isEnabled, !isRunning else { return }
|
||||
guard isEnabled, !isRunningPublisher.value else { return }
|
||||
|
||||
client.start(analyticsConfiguration: appSettings.analyticsConfiguration)
|
||||
bugReportService.start()
|
||||
|
||||
// Sanity check in case something went wrong.
|
||||
guard client.isRunning else { return }
|
||||
|
||||
isRunningSubject.send(true)
|
||||
MXLog.info("Started.")
|
||||
}
|
||||
|
||||
@@ -95,7 +100,6 @@ class AnalyticsService {
|
||||
/// Note: **MUST** be called before stopping PostHog or the reset is ignored.
|
||||
func reset() {
|
||||
client.reset()
|
||||
bugReportService.reset()
|
||||
MXLog.info("Reset.")
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ class PostHogAnalyticsClient: AnalyticsClientProtocol {
|
||||
|
||||
// Add super property cryptoSDK to the captured events, to allow easy
|
||||
// filtering of events across different client by using same filter.
|
||||
superProperties = AnalyticsEvent.SuperProperties(appPlatform: nil, cryptoSDK: .Rust, cryptoSDKVersion: nil)
|
||||
superProperties = AnalyticsEvent.SuperProperties(appPlatform: .EXI, cryptoSDK: .Rust, cryptoSDKVersion: nil)
|
||||
postHog?.optIn()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user