Skip to content

Commit 12ddf99

Browse files
committed
Add GDT to Firebase Sessions
1 parent a0b86ce commit 12ddf99

File tree

6 files changed

+84
-3
lines changed

6 files changed

+84
-3
lines changed

firebase-sessions/firebase-sessions.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ dependencies {
5151

5252
runtimeOnly("com.google.firebase:firebase-installations:17.1.3")
5353

54+
implementation("com.google.android.datatransport:transport-api:3.0.0")
55+
// implementation("com.google.android.datatransport:transport-runtime:3.1.8")
56+
// implementation("com.google.android.datatransport:transport-backend-cct:3.1.8")
57+
5458
testImplementation(libs.androidx.test.junit)
5559
testImplementation(libs.androidx.test.runner)
5660
testImplementation(libs.junit)

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.google.firebase.sessions
1919
import android.app.Application
2020
import android.util.Log
2121
import androidx.annotation.Discouraged
22+
import com.google.android.datatransport.TransportFactory
2223
import com.google.firebase.FirebaseApp
2324
import com.google.firebase.installations.FirebaseInstallationsApi
2425
import com.google.firebase.ktx.Firebase
@@ -29,10 +30,12 @@ class FirebaseSessions
2930
internal constructor(
3031
private val firebaseApp: FirebaseApp,
3132
firebaseInstallations: FirebaseInstallationsApi,
32-
backgroundDispatcher: CoroutineDispatcher
33+
backgroundDispatcher: CoroutineDispatcher,
34+
transportFactory: TransportFactory,
3335
) {
3436
private val sessionGenerator = SessionGenerator(collectEvents = true)
35-
private val sessionCoordinator = SessionCoordinator(firebaseInstallations, backgroundDispatcher)
37+
private val sessionCoordinator =
38+
SessionCoordinator(firebaseInstallations, backgroundDispatcher, transportFactory)
3639

3740
init {
3841
val sessionInitiator = SessionInitiator(WallClock::elapsedRealtime, this::initiateSessionStart)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package com.google.firebase.sessions
1616

1717
import androidx.annotation.Keep
18+
import com.google.android.datatransport.TransportFactory
1819
import com.google.firebase.FirebaseApp
1920
import com.google.firebase.annotations.concurrent.Background
2021
import com.google.firebase.components.Component
@@ -40,11 +41,13 @@ internal class FirebaseSessionsRegistrar : ComponentRegistrar {
4041
.add(Dependency.required(firebaseApp))
4142
.add(Dependency.required(firebaseInstallationsApi))
4243
.add(Dependency.required(backgroundDispatcher))
44+
.add(Dependency.required(transportFactory))
4345
.factory { container ->
4446
FirebaseSessions(
4547
container.get(firebaseApp),
4648
container.get(firebaseInstallationsApi),
4749
container.get(backgroundDispatcher),
50+
container.get(transportFactory),
4851
)
4952
}
5053
.eagerInDefaultApp()
@@ -59,5 +62,6 @@ internal class FirebaseSessionsRegistrar : ComponentRegistrar {
5962
private val firebaseInstallationsApi = unqualified(FirebaseInstallationsApi::class.java)
6063
private val backgroundDispatcher =
6164
qualified(Background::class.java, CoroutineDispatcher::class.java)
65+
private val transportFactory = unqualified(TransportFactory::class.java)
6266
}
6367
}

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,16 @@
1717
package com.google.firebase.sessions
1818

1919
import android.util.Log
20+
import com.google.android.datatransport.TransportFactory
2021
import com.google.firebase.installations.FirebaseInstallationsApi
2122
import kotlinx.coroutines.CoroutineDispatcher
2223
import kotlinx.coroutines.CoroutineScope
2324
import kotlinx.coroutines.launch
2425
import kotlinx.coroutines.tasks.await
26+
import sun.jvm.hotspot.debugger.win32.coff.DebugVC50X86RegisterEnums.TAG
27+
28+
29+
2530

2631
/**
2732
* [SessionCoordinator] is responsible for coordinating the systems in this SDK involved with
@@ -31,7 +36,8 @@ import kotlinx.coroutines.tasks.await
3136
*/
3237
internal class SessionCoordinator(
3338
private val firebaseInstallations: FirebaseInstallationsApi,
34-
backgroundDispatcher: CoroutineDispatcher
39+
backgroundDispatcher: CoroutineDispatcher,
40+
private val transportFactory: TransportFactory,
3541
) {
3642
private val scope = CoroutineScope(backgroundDispatcher)
3743

@@ -47,6 +53,25 @@ internal class SessionCoordinator(
4753
}
4854

4955
Log.i(TAG, "Initiate session start: $sessionEvent")
56+
57+
try {
58+
transportFactory
59+
.getTransport(
60+
FirelogAnalytics.FCM_LOG_SOURCE,
61+
MessagingClientEventExtension::class.java,
62+
Encoding.of("proto"),
63+
MessagingClientEventExtension::toByteArray
64+
)
65+
.send(
66+
Event.ofData(
67+
MessagingClientEventExtension.newBuilder()
68+
.setMessagingClientEvent(clientEvent)
69+
.build()
70+
)
71+
)
72+
} catch (e: RuntimeException) {
73+
Log.w(TAG, "Failed to log Session Start event: ", e)
74+
}
5075
}
5176

5277
companion object {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.google.firebase.sessions
1919
import androidx.test.ext.junit.runners.AndroidJUnit4
2020
import com.google.common.truth.Truth.assertThat
2121
import com.google.firebase.sessions.testing.FakeFirebaseInstallations
22+
import com.google.firebase.sessions.testing.FakeTransportFactory
2223
import kotlinx.coroutines.ExperimentalCoroutinesApi
2324
import kotlinx.coroutines.test.StandardTestDispatcher
2425
import kotlinx.coroutines.test.runCurrent
@@ -35,6 +36,7 @@ class SessionCoordinatorTest {
3536
SessionCoordinator(
3637
firebaseInstallations = FakeFirebaseInstallations("FaKeFiD"),
3738
backgroundDispatcher = StandardTestDispatcher(testScheduler),
39+
transportFactory = FakeTransportFactory(),
3840
)
3941

4042
// Construct an event with no fid set.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2023 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.firebase.sessions.testing
18+
19+
import com.google.android.datatransport.Encoding
20+
import com.google.android.datatransport.Transformer
21+
import com.google.android.datatransport.Transport
22+
import com.google.android.datatransport.TransportFactory
23+
24+
/** Fake [FakeTransportFactory] that implements [getTransport]. */
25+
internal class FakeTransportFactory() : TransportFactory {
26+
@Deprecated("This is deprecated in the API")
27+
override fun <T> getTransport(
28+
name: String?,
29+
payloadType: java.lang.Class<T>?,
30+
payloadTransformer: Transformer<T, ByteArray?>?
31+
): Transport<T>? {
32+
return null
33+
}
34+
35+
override fun <T> getTransport(
36+
name: String?,
37+
payloadType: java.lang.Class<T>?,
38+
payloadEncoding: Encoding?,
39+
payloadTransformer: Transformer<T, ByteArray?>?
40+
): Transport<T>? {
41+
return null
42+
}
43+
}

0 commit comments

Comments
 (0)