Skip to content

Commit de676f6

Browse files
authored
Apply the Crashlytics Settings Configs to the SDK. (#10637)
1 parent 6c05665 commit de676f6

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

FirebaseSessions/Sources/FirebaseSessions.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,13 @@ protocol SessionsProvider {
6161
fireLogger: fireLogger,
6262
sampler: SessionSampler()
6363
)
64-
let initiator = SessionInitiator()
64+
6565
let appInfo = ApplicationInfo(appID: appID)
6666
let settings = SessionsSettings(
6767
appInfo: appInfo,
6868
installations: installations
6969
)
70+
let initiator = SessionInitiator(settings: settings)
7071

7172
self.init(appID: appID,
7273
identifiers: identifiers,
@@ -93,10 +94,15 @@ protocol SessionsProvider {
9394
// On each session start, first update Settings if expired
9495
self.settings.updateSettings()
9596
self.identifiers.generateNewSessionID()
96-
let event = SessionStartEvent(identifiers: self.identifiers, appInfo: self.appInfo)
97-
DispatchQueue.global().async {
98-
self.coordinator.attemptLoggingSessionStart(event: event) { result in
97+
// Generate a session start event only when session data collection is enabled.
98+
if self.settings.sessionsEnabled {
99+
let event = SessionStartEvent(identifiers: self.identifiers, appInfo: self.appInfo)
100+
DispatchQueue.global().async {
101+
self.coordinator.attemptLoggingSessionStart(event: event) { result in
102+
}
99103
}
104+
} else {
105+
Logger.logDebug("Session logging is disabled by configuration settings.")
100106
}
101107
}
102108
}

FirebaseSessions/Sources/SessionInitiator.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ import Foundation
3030
/// and comes to the foreground.
3131
///
3232
class SessionInitiator {
33-
let sessionTimeout: TimeInterval = 30 * 60 // 30 minutes
3433
let currentTime: () -> Date
34+
var settings: SessionsSettings
3535
var backgroundTime = Date.distantFuture
3636
var initiateSessionStart: () -> Void = {}
3737

38-
init(currentTimeProvider: @escaping () -> Date = Date.init) {
38+
init(settings: SessionsSettings, currentTimeProvider: @escaping () -> Date = Date.init) {
3939
currentTime = currentTimeProvider
40+
self.settings = settings
4041
}
4142

4243
func beginListening(initiateSessionStart: @escaping () -> Void) {
@@ -95,7 +96,9 @@ class SessionInitiator {
9596

9697
@objc private func appForegrounded() {
9798
let interval = currentTime().timeIntervalSince(backgroundTime)
98-
if interval > sessionTimeout {
99+
100+
// If the interval is greater the the session timeout duration, generate a new session.
101+
if interval > settings.sessionTimeout {
99102
initiateSessionStart()
100103
}
101104
}

FirebaseSessions/Tests/Unit/InitiatorTests.swift

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,36 @@ import XCTest
2727
class InitiatorTests: XCTestCase {
2828
// 2021-11-01 @ 00:00:00 (EST)
2929
let date = Date(timeIntervalSince1970: 1_635_739_200)
30+
let validSettings: [String: Any] = [:]
31+
32+
var cache: SettingsCacheClient!
33+
var appInfo: MockApplicationInfo!
34+
var downloader: MockSettingsDownloader!
35+
var remoteSettings: RemoteSettings!
36+
var localOverrideSettings: LocalOverrideSettings!
37+
var sdkDefaultSettings: SDKDefaultSettings!
38+
var sessionSettings: SessionsSettings!
39+
40+
override func setUp() {
41+
super.setUp()
42+
appInfo = MockApplicationInfo()
43+
cache = SettingsCache()
44+
cache.removeCache() // just reinstantiating cache isn't enough because of persistence
45+
downloader = MockSettingsDownloader(successResponse: validSettings)
46+
remoteSettings = RemoteSettings(appInfo: appInfo, downloader: downloader, cache: cache)
47+
remoteSettings.updateSettings(currentTime: Date())
48+
49+
localOverrideSettings = LocalOverrideSettings()
50+
sdkDefaultSettings = SDKDefaultSettings()
51+
52+
sessionSettings = SessionsSettings(
53+
appInfo: appInfo,
54+
installations: MockInstallationsProtocol(),
55+
sdkDefaults: sdkDefaultSettings,
56+
localOverrides: localOverrideSettings,
57+
remoteSettings: remoteSettings
58+
)
59+
}
3060

3161
func postBackgroundedNotification() {
3262
let notificationCenter = NotificationCenter.default
@@ -61,7 +91,7 @@ class InitiatorTests: XCTestCase {
6191
}
6292

6393
func test_beginListening_initiatesColdStart() throws {
64-
let initiator = SessionInitiator()
94+
let initiator = SessionInitiator(settings: sessionSettings)
6595
var initiateCalled = false
6696
initiator.beginListening {
6797
initiateCalled = true
@@ -72,7 +102,10 @@ class InitiatorTests: XCTestCase {
72102
func test_appForegrounded_initiatesNewSession() throws {
73103
// Given
74104
var pausedClock = date
75-
let initiator = SessionInitiator(currentTimeProvider: { pausedClock })
105+
let initiator = SessionInitiator(
106+
settings: sessionSettings,
107+
currentTimeProvider: { pausedClock }
108+
)
76109
var sessionCount = 0
77110
initiator.beginListening {
78111
sessionCount += 1

0 commit comments

Comments
 (0)