Skip to content

Commit 5045fe8

Browse files
committed
Fix behaviour with multiple subscribers
1 parent 4303a9f commit 5045fe8

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

firebase-sessions/src/main/kotlin/com/google/firebase/sessions/FirebaseSessions.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ internal constructor(
7878
"Registering Sessions SDK subscriber with name: ${subscriber.sessionSubscriberName}, " +
7979
"data collection enabled: ${subscriber.isDataCollectionEnabled}"
8080
)
81+
82+
// Immediately call the callback if Sessions generated a session before the
83+
// subscriber subscribed, otherwise subscribers might miss the first session.
84+
if (sessionGenerator.hasGenerateSession) {
85+
subscriber.onSessionChanged(
86+
SessionSubscriber.SessionDetails(sessionGenerator.currentSession.sessionId)
87+
)
88+
}
8189
}
8290

8391
private fun initiateSessionStart() {

firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionGenerator.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ internal class SessionGenerator(
4646
lateinit var currentSession: SessionDetails
4747
private set
4848

49+
/** Returns if a session has been generated. */
50+
val hasGenerateSession: Boolean
51+
get() = ::currentSession.isInitialized
52+
4953
/** Generates a new session. The first session's sessionId will match firstSessionId. */
5054
fun generateNewSession(): SessionDetails {
5155
sessionIndex++

firebase-sessions/src/test/kotlin/com/google/firebase/sessions/SessionGeneratorTest.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,22 @@ class SessionGeneratorTest {
4343
sessionGenerator.currentSession
4444
}
4545

46+
@Test
47+
fun hasGenerateSession_beforeGenerate_returnsFalse() {
48+
val sessionGenerator = SessionGenerator(collectEvents = false)
49+
50+
assertThat(sessionGenerator.hasGenerateSession).isFalse()
51+
}
52+
53+
@Test
54+
fun hasGenerateSession_afterGenerate_returnsTrue() {
55+
val sessionGenerator = SessionGenerator(collectEvents = false)
56+
57+
sessionGenerator.generateNewSession()
58+
59+
assertThat(sessionGenerator.hasGenerateSession).isTrue()
60+
}
61+
4662
@Test
4763
fun generateNewSession_generatesValidSessionIds() {
4864
val sessionGenerator = SessionGenerator(collectEvents = true) // defaults to UUID::randomUUID

0 commit comments

Comments
 (0)