From d835a51237335d7dc32ab9c43b13bb1b410d401c Mon Sep 17 00:00:00 2001 From: Themis wang Date: Wed, 9 Apr 2025 10:12:14 -0400 Subject: [PATCH] send session event based on data collection and setting config --- .../firebase/sessions/SessionFirelogPublisher.kt | 13 ++++++++----- .../firebase/sessions/SharedSessionRepository.kt | 5 +---- .../sessions/SessionFirelogPublisherTest.kt | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionFirelogPublisher.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionFirelogPublisher.kt index 6e4b6153f8d..b6a3c87e1dc 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionFirelogPublisher.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionFirelogPublisher.kt @@ -34,7 +34,7 @@ import kotlinx.coroutines.launch internal fun interface SessionFirelogPublisher { /** Asynchronously logs the session represented by the given [SessionDetails] to Firelog. */ - fun logSession(sessionDetails: SessionDetails) + fun mayLogSession(sessionDetails: SessionDetails) companion object { val instance: SessionFirelogPublisher @@ -64,7 +64,7 @@ constructor( * This will pull all the necessary information about the device in order to create a full * [SessionEvent], and then upload that through the Firelog interface. */ - override fun logSession(sessionDetails: SessionDetails) { + override fun mayLogSession(sessionDetails: SessionDetails) { CoroutineScope(backgroundDispatcher).launch { if (shouldLogSession()) { val installationId = InstallationId.create(firebaseInstallations) @@ -94,13 +94,16 @@ constructor( /** Determines if the SDK should log a session to Firelog. */ private suspend fun shouldLogSession(): Boolean { - Log.d(TAG, "Data Collection is enabled for at least one Subscriber") - + val subscribers = FirebaseSessionsDependencies.getRegisteredSubscribers() + if (subscribers.values.none { it.isDataCollectionEnabled }) { + Log.d(TAG, "Sessions SDK disabled through data collection. Events will not be sent.") + return false + } // This will cause remote settings to be fetched if the cache is expired. sessionSettings.updateSettings() if (!sessionSettings.sessionsEnabled) { - Log.d(TAG, "Sessions SDK disabled. Events will not be sent.") + Log.d(TAG, "Sessions SDK disabled through settings API. Events will not be sent.") return false } diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt index 234730985c0..92b726bfc10 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SharedSessionRepository.kt @@ -103,10 +103,7 @@ constructor( } } } - - // TODO(mrober): If data collection is enabled for at least one subscriber... - // https://github.com/firebase/firebase-android-sdk/blob/a53ab64150608c2eb3eafb17d81dfe217687d955/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt#L110 - sessionFirelogPublisher.logSession(sessionDetails = newSessionDetails) + sessionFirelogPublisher.mayLogSession(sessionDetails = newSessionDetails) } } diff --git a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionFirelogPublisherTest.kt b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionFirelogPublisherTest.kt index 01d6bba540b..76c6864f491 100644 --- a/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionFirelogPublisherTest.kt +++ b/firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionFirelogPublisherTest.kt @@ -75,7 +75,7 @@ class SessionFirelogPublisherTest { ) // Construct an event with no fid set. - publisher.logSession(TestSessionEventData.TEST_SESSION_DETAILS) + publisher.mayLogSession(TestSessionEventData.TEST_SESSION_DETAILS) runCurrent() @@ -105,7 +105,7 @@ class SessionFirelogPublisherTest { ) // Construct an event with no fid set. - publisher.logSession(TestSessionEventData.TEST_SESSION_DETAILS) + publisher.mayLogSession(TestSessionEventData.TEST_SESSION_DETAILS) runCurrent() @@ -134,7 +134,7 @@ class SessionFirelogPublisherTest { ) // Construct an event with no fid set. - publisher.logSession(TestSessionEventData.TEST_SESSION_DETAILS) + publisher.mayLogSession(TestSessionEventData.TEST_SESSION_DETAILS) runCurrent()