Fabric and Firebase use different SDKs to calculate crash-free user statistics and metrics such as active users. In Fabric, this is powered by Fabric Analytics whereas in Firebase it's powered by Google Analytics, which also results in differences in the reported metrics.
Several things may cause Fabric Analytics to discard events that might have led to a session. If an app rapidly transitions between foreground and background states, Fabric Analytics will not report separate sessions for each period of time the app spent in the foreground if it spent less than 30 seconds in the intervening background states. Also, if something occurs that prevents a background event from being detected, Fabric Analytics will not consider the prior foregrounding event as part of a session.
However, with Firebase, a user_engagement event is necessary to define activity. A user_engagement event is triggered when a user interacts with the app for a minimum duration, which can be controlled using the setMinimumSessionDuration() method call, but by default is set to 10 seconds. Analytics counts multiple app foregrounds/backgrounds as part of the same session as long as they are within 30 minutes of each other, versus the 30 seconds of Fabric Analytics. Again, in Analytics, this 30 minutes is default but customizable.
Frequently, Fabric Analytics counts more sessions and users than Google Analytics because it requires the app to have less time in foreground and background before a session/active user is officially captured and counted. This leads to small discrepancies in higher-volume apps and potentially larger discrepancies in low-volume apps with perhaps only several users and sessions per day.