Firebase(Android版)中的session_start出错

移动开发 2026-07-09

在我的Android应用中遇到一个随机问题:在大多数Firebase崩溃日志里,突然出现大量来自 session_start 的事件,简直离谱。这在我其他项目中从未见过,并且是随机开始的。我也搞不清楚为什么会有这么多。我把会话超时设置为30分钟,然而它却一直这样发生。我真的不太明白这是怎么回事。

在我的应用中,我得到的是:

private lateinit var analytics: FirebaseAnalytics
private lateinit var crashlytics: FirebaseCrashlytics

以及在 onCreate

analytics = Firebase.analytics
analytics.setSessionTimeoutDuration(30 * 60 * 1000L)
crashlytics = Firebase.crashlytics

此外,还有一个遗留的跟踪对象也在使用它:

import com.google.firebase.analytics.analytics
import com.google.firebase.crashlytics.crashlytics

object Tracker : KoinComponent {
    private val firebaseAnalytics: FirebaseAnalytics = Firebase.analytics
    private val firebaseCrashlytics: FirebaseCrashlytics = Firebase.crashlytics

...
}

除此之外,它们在代码中没有出现在其他地方。我使用AGP 9.2,并搭配当前的Firebase BOM 34.13.0,以及Koin和 KoinAnnotations。我尝试了很多方法:

  1. 用Koin注入Firebase
  2. 设置会话超时
  3. 清理我的主Activity(MainActivity)
  4. 回退到较旧的Firebase版本(回到没有发生问题的版本,但后来还是发生了)

我有点束手无策,因为这让统计会话和得到合理的统计数据变得非常困难。还有人遇到过这种情况吗,或者知道如何解决这个问题?

解决方案

Check your AndroidManifest.xml (and merged manifests) for anything containing android:process. If you intentionally have a multi-process app, you must disable Firebase Analytics in the non-main processes.

Update your main Application class (or where you initialize Koin) to guard Firebase initialization:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        if (isMainProcess()) {
            // Initialize Koin and any Firebase configurations here
            Firebase.analytics.setSessionTimeoutDuration(30 * 60 * 1000L)
        } else {
            // Disable analytics for background/secondary processes
            Firebase.analytics.setAnalyticsCollectionEnabled(false)
        }
    }

    private fun isMainProcess(): Boolean {
        return packageName == getProcessName()
    }
}

你提到你有一个遗留的Tracker对象:

object Tracker : KoinComponent {
    private val firebaseAnalytics: FirebaseAnalytics = Firebase.analytics
    // ...
}

Instead of using a static object that pulls dependencies implicitly, migrate it to a standard class and let Koin manage it as a single instance initialized on startup.

// Change from 'object' to 'class'
class Tracker(
    private val firebaseAnalytics: FirebaseAnalytics,
    private val firebaseCrashlytics: FirebaseCrashlytics
) {
    // Your tracking logic
}

// In your Koin module:
val appModule = module {
    single { Firebase.analytics }
    single { Firebase.crashlytics }
    single { Tracker(get(), get()) } 
}

用于验证与调试

adb shell setprop logcat.dest.log.tag.FA VERBOSE
adb shell setprop logcat.dest.log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC

请尝试这个,看看是否对你有用,并告诉我结果。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章