analytics #9

Merged
t.schmitt merged 9 commits from analytics into master 2025-07-17 09:15:43 +02:00
12 changed files with 472 additions and 121 deletions
Showing only changes of commit bc17e23039 - Show all commits

View File

@@ -88,67 +88,6 @@ class MatomoAnalyticsManager: AnalyticsManagerProtocol {
} }
} }
// MARK: - Matomo
class MatomoAnalyticsManager: AnalyticsManagerProtocol {
// MARK: - Properties
private var tracker: MatomoTracker
// MARK: - Init
init(siteId: String, url: String) {
debugPrint("[Matomo service] Server URL: \(url)")
debugPrint("[Matomo service] Site ID: \(siteId)")
tracker = MatomoTracker(
siteId: siteId,
baseURL: URL(string: url)!
)
#if DEBUG
tracker.dispatchInterval = 5
#endif
#if DEBUG
tracker.logger = DefaultLogger(minLevel: .verbose)
#endif
debugPrint("[Matomo service] Configured with content base: \(tracker.contentBase?.absoluteString ?? "-")")
debugPrint("[Matomo service] Opt out: \(tracker.isOptedOut)")
}
// MARK: - Methods
func logScreen(name: String, path: String) {
guard !tracker.isOptedOut else { return }
guard let trackerUrl = tracker.contentBase?.absoluteString else { return }
let urlString = URL(string: "\(trackerUrl)" + "/" + "\(path)" + "iOS")
tracker.track(
view: [name],
url: urlString
)
}
func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
) {
guard !tracker.isOptedOut else { return }
tracker.track(
eventWithCategory: category,
action: action,
name: name,
number: nil,
url: nil
)
}
}
// MARK: - Firebase // MARK: - Firebase
class FirebaseAnalyticsManager: AnalyticsManagerProtocol { class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
@@ -223,15 +162,25 @@ class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
} }
} }
// MARK: - Traker Type
enum TrackerType: CaseIterable {
case matomo
case firebase
}
// MARK: - Manager // MARK: - Manager
class AnalyticsManager { class AnalyticsManager {
static var shared = AnalyticsManager() static var shared = AnalyticsManager()
private init() {}
// MARK: - Properties // MARK: - Properties
var managers: [TargetType: AnalyticsManagerProtocol] = [] var managers: [TrackerType: AnalyticsManagerProtocol] = [:]
private var isEnabled: Bool { private var isEnabled: Bool {
if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" { if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" {
@@ -243,7 +192,7 @@ class AnalyticsManager {
// MARK: - Methods // MARK: - Methods
private func setAnalytics(enable: Bool) { private func setAnalytics(enable: Bool, _ analytics: [TrackerType]) {
managers.forEach { (key, value) in managers.forEach { (key, value) in
if analytics.contains(where: { type in if analytics.contains(where: { type in
type == key type == key
@@ -253,12 +202,12 @@ class AnalyticsManager {
} }
} }
func enableAnalytics(_ analytics: [TargetType] = TargetType.allCases) { func enableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) {
setAnalytics(enable: true) setAnalytics(enable: true, analytics)
} }
func disableAnalytics(_ analytics: [TargetType] = TargetType.allCases) { func disableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) {
setAnalytics(enable: false) setAnalytics(enable: false, analytics)
} }
func configure(siteId: String, url: String) { func configure(siteId: String, url: String) {
@@ -269,7 +218,11 @@ class AnalyticsManager {
managers[TrackerType.firebase] = FirebaseAnalyticsManager() managers[TrackerType.firebase] = FirebaseAnalyticsManager()
} }
private func logScreen(name: String, path: String) { private func logScreen(
name: String,
path: String,
params: [String: Any]?
) {
guard isEnabled else { return } guard isEnabled else { return }
managers.values.forEach { manager in managers.values.forEach { manager in

View File

@@ -50,7 +50,7 @@ swift run -c release ResgenSwift strings tags $FORCE_FLAG "./Tags/sampleTags.txt
--extension-name "Tags" \ --extension-name "Tags" \
--extension-suffix "GenAllScript" --extension-suffix "GenAllScript"
#echo "\n-------------------------\n" echo "\n-------------------------\n"
# Analytics # Analytics
swift run -c release ResgenSwift analytics $FORCE_FLAG "./Tags/sampleTags.yml" \ swift run -c release ResgenSwift analytics $FORCE_FLAG "./Tags/sampleTags.yml" \

View File

@@ -90,9 +90,9 @@ enum AnalyticsGenerator {
""" """
// Generated by ResgenSwift.\(Analytics.toolName) \(ResgenSwiftVersion) // Generated by ResgenSwift.\(Analytics.toolName) \(ResgenSwiftVersion)
\(Self.getImport()) \(Self.getImport(targets: targets))
\(Self.getAnalyticsProtocol()) \(Self.getAnalyticsProtocol(targets: targets))
\(Self.getTrackerTypeEnum()) \(Self.getTrackerTypeEnum())
@@ -102,13 +102,15 @@ enum AnalyticsGenerator {
static var shared = AnalyticsManager() static var shared = AnalyticsManager()
private init() {}
// MARK: - Properties // MARK: - Properties
var managers: [TrackerType: AnalyticsManagerProtocol] = [:] var managers: [TrackerType: AnalyticsManagerProtocol] = [:]
\(Self.getEnabledContent()) \(Self.getEnabledContent())
\(Self.getAnalyticsProperties()) \(Self.getAnalyticsProperties(targets: targets))
\(Self.getPrivateLogFunction()) \(Self.getPrivateLogFunction())
""" """
@@ -164,6 +166,8 @@ enum AnalyticsGenerator {
private static func getImport(targets: [TrackerType]) -> String { private static func getImport(targets: [TrackerType]) -> String {
var result: [String] = [] var result: [String] = []
result.append("import Foundation")
if targets.contains(TrackerType.matomo) { if targets.contains(TrackerType.matomo) {
result.append("import MatomoTracker") result.append("import MatomoTracker")
} }

View File

@@ -147,7 +147,7 @@ class AnalyticsFileParser {
} }
if let parameters { if let parameters {
definition.parameters = getParameters(from: parameters) definition.parameters = AnalyticsFileParser.getParameters(from: parameters)
} }
return definition return definition