升级Firebase SDK后切换环境时遭遇多DataStore实例冲突错误的技术咨询
升级Firebase SDK后切换环境时遭遇多DataStore实例冲突错误的技术咨询
问题背景
我维护着一个运行时环境切换器,原本的逻辑是删除并重新初始化Firebase默认App,以此来指向对应环境的Firebase项目——这样就能让同一个App在不同环境下拥有独立的Analytics和Crashlytics数据。
但几天前升级到最新版Firebase SDK后,这个切换器开始崩溃,抛出以下错误:
java.lang.IllegalStateException: There are multiple DataStores active for the same file: files/datastore/aqs/sessionConfigsDataStore.data. You should either maintain your DataStore as a singleton or confirm that there is no two DataStore's active on the same file (by confirming that the scope is cancelled).
当前Firebase初始化代码
我的核心初始化逻辑如下:
suspend fun reset() { FirebaseApp.getApps(context).forEach { it.delete() } init() } suspend fun init() { val environment = environmentRepository.getEnvironment() val configFileName = environment.configFileName val inputStream = context.assets.open(configFileName) val jsonString = inputStream.bufferedReader().use { it.readText() } val firebaseOptionsJsonFile = gson.fromJson(jsonString, FirebaseJsonFileOptions::class.java) val firebaseOptions = firebaseOptionsJsonFile.mapToFirebaseOptions() val isNotAlreadyInitialized = FirebaseApp.getApps(context).none { it.name == DEFAULT_APP_NAME } if (isNotAlreadyInitialized) { FirebaseApp.initializeApp(context, firebaseOptions) Timber.d("$TAG: Firebase initialized with environment: $environment") } else { Timber.d("$TAG: FirebaseApp already initialized with environment: $environment") } }
已尝试的方案及遇到的限制
我试过创建多个Firebase App实例,而不是删除重建默认App,但遇到了平台硬限制:
Note: On Android and Apple platforms, Analytics are only logged for the default app.
因为我们需要每个环境都能正常上报Analytics数据,所以多App的方案完全不可行。
我的诉求
我觉得应该有更优雅的方式来修改Firebase默认App的配置,而不是通过删除重建的方式切换环境——这样就能从根源上避免DataStore冲突崩溃的问题。希望能得到社区的建议,解决DataStore冲突的同时,保留默认App的Analytics功能。
内容来源于stack exchange
相关产品推荐
相关产品推荐

