Skip to content

Commit 4303a9f

Browse files
authored
Add Sessions to Crashlytics (#4993)
* Add thread safe FirebaseSessionsDependencies * Remove debug line * Format * Add register api to FirebaseSessions so products can integrate * Fix Android tests and api txt file * Add Sessions to Crashlytics * Address comments * Address comments * Rename to getRegisteredSubscribers * Fix callsite * Add todo
1 parent d4b6e1c commit 4303a9f

File tree

5 files changed

+40
-1
lines changed

5 files changed

+40
-1
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ buildscript {
3939
classpath 'com.google.gms:google-services:4.3.15'
4040
classpath "com.ncorti.ktfmt.gradle:plugin:0.11.0"
4141
classpath 'com.google.firebase:firebase-appdistribution-gradle:3.0.2'
42+
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5'
4243
}
4344
}
4445

firebase-crashlytics/firebase-crashlytics.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ dependencies {
7272
runtimeOnly 'com.google.firebase:firebase-installations:17.1.3'
7373
implementation 'com.google.firebase:firebase-measurement-connector:18.0.2'
7474
implementation "com.google.android.gms:play-services-tasks:18.0.1"
75+
implementation project(':firebase-sessions')
7576

7677
javadocClasspath 'com.google.code.findbugs:jsr305:3.0.2'
7778

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/CrashlyticsRegistrar.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,29 @@
2424
import com.google.firebase.inject.Deferred;
2525
import com.google.firebase.installations.FirebaseInstallationsApi;
2626
import com.google.firebase.platforminfo.LibraryVersionComponent;
27+
import com.google.firebase.sessions.FirebaseSessions;
28+
import com.google.firebase.sessions.api.FirebaseSessionsDependencies;
29+
import com.google.firebase.sessions.api.SessionSubscriber;
2730
import java.util.Arrays;
2831
import java.util.List;
2932

3033
/** @hide */
3134
public class CrashlyticsRegistrar implements ComponentRegistrar {
3235
private static final String LIBRARY_NAME = "fire-cls";
3336

37+
static {
38+
// Add Crashlytics as a dependency of Sessions when this class is loaded into memory.
39+
FirebaseSessionsDependencies.INSTANCE.addDependency(SessionSubscriber.Name.CRASHLYTICS);
40+
}
41+
3442
@Override
3543
public List<Component<?>> getComponents() {
3644
return Arrays.asList(
3745
Component.builder(FirebaseCrashlytics.class)
3846
.name(LIBRARY_NAME)
3947
.add(Dependency.required(FirebaseApp.class))
4048
.add(Dependency.required(FirebaseInstallationsApi.class))
49+
.add(Dependency.required(FirebaseSessions.class))
4150
.add(Dependency.deferred(CrashlyticsNativeComponent.class))
4251
.add(Dependency.deferred(AnalyticsConnector.class))
4352
.factory(this::buildCrashlytics)
@@ -57,7 +66,9 @@ private FirebaseCrashlytics buildCrashlytics(ComponentContainer container) {
5766

5867
FirebaseInstallationsApi firebaseInstallations = container.get(FirebaseInstallationsApi.class);
5968

69+
FirebaseSessions firebaseSessions = container.get(FirebaseSessions.class);
70+
6071
return FirebaseCrashlytics.init(
61-
app, firebaseInstallations, nativeComponent, analyticsConnector);
72+
app, firebaseInstallations, firebaseSessions, nativeComponent, analyticsConnector);
6273
}
6374
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/FirebaseCrashlytics.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import com.google.firebase.crashlytics.internal.settings.SettingsController;
4141
import com.google.firebase.inject.Deferred;
4242
import com.google.firebase.installations.FirebaseInstallationsApi;
43+
import com.google.firebase.sessions.FirebaseSessions;
44+
import com.google.firebase.sessions.api.SessionSubscriber;
4345
import java.util.List;
4446
import java.util.concurrent.Callable;
4547
import java.util.concurrent.ExecutorService;
@@ -62,6 +64,7 @@ public class FirebaseCrashlytics {
6264
static @Nullable FirebaseCrashlytics init(
6365
@NonNull FirebaseApp app,
6466
@NonNull FirebaseInstallationsApi firebaseInstallationsApi,
67+
@NonNull FirebaseSessions firebaseSessions,
6568
@NonNull Deferred<CrashlyticsNativeComponent> nativeComponent,
6669
@NonNull Deferred<AnalyticsConnector> analyticsConnector) {
6770

@@ -176,6 +179,27 @@ public Void call() throws Exception {
176179
}
177180
});
178181

182+
// TODO(mrober): Replace with a real session implementation.
183+
firebaseSessions.register(new SessionSubscriber() {
184+
@Override
185+
public void onSessionChanged(@NonNull SessionDetails sessionDetails) {
186+
Logger.getLogger().d("onSessionChanged: " + sessionDetails);
187+
// TODO(mrober): Set new field in report and remove this.
188+
core.setInternalKey("sessionId", sessionDetails.getSessionId());
189+
}
190+
191+
@Override
192+
public boolean isDataCollectionEnabled() {
193+
return arbiter.isAutomaticDataCollectionEnabled();
194+
}
195+
196+
@NonNull
197+
@Override
198+
public SessionSubscriber.Name getSessionSubscriberName() {
199+
return SessionSubscriber.Name.CRASHLYTICS;
200+
}
201+
});
202+
179203
return new FirebaseCrashlytics(core);
180204
}
181205

firebase-sessions/test-app/test-app.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ plugins {
2222
id("com.android.application")
2323
id("org.jetbrains.kotlin.android")
2424
id("com.google.gms.google-services")
25+
id("com.google.firebase.crashlytics")
2526
}
2627

2728
android {
@@ -45,6 +46,7 @@ android {
4546

4647
dependencies {
4748
// TODO(mrober): Remove when we have configurable deps on Crashlytics and Fireperf.
49+
implementation(project(":firebase-crashlytics"))
4850
implementation(project(":firebase-sessions"))
4951

5052
implementation("androidx.appcompat:appcompat:1.6.1")

0 commit comments

Comments
 (0)