Android直接启动模式下Firestore实例初始化崩溃求助
解决方案
1. 延迟Firestore初始化到用户解锁后
直接启动模式下,凭证加密存储处于不可用状态,而Firebase Auth依赖该存储完成初始化,因此绝对不要在直接启动模式的初始化流程中调用FirebaseFirestore.getInstance()。
你可以通过代码判断设备是否已解锁,再决定是否初始化Firestore:
// 判断是否处于直接启动模式(设备未解锁) boolean isDirectBootMode = !getApplicationContext().isDeviceProtectedStorage(); if (!isDirectBootMode) { // 用户已解锁设备,正常初始化Firestore FirebaseFirestore db = FirebaseFirestore.getInstance(); // 执行后续Firestore相关操作 } else { // 直接启动模式下,使用设备保护存储临时处理数据 Context deviceProtectedContext = getApplicationContext().createDeviceProtectedStorageContext(); // 示例:用设备保护存储的SharedPreferences临时存数据 SharedPreferences tempPrefs = deviceProtectedContext.getSharedPreferences("direct_boot_temp", Context.MODE_PRIVATE); }
2. 避免在直接启动模式初始化依赖Auth的Firebase服务
Firebase Auth本身不支持直接启动模式,因为它需要访问用户专属的凭证存储。如果你的业务必须在直接启动模式下运行,仅保留必要的轻量逻辑(比如FCM消息的通知展示),不要触发任何依赖Auth的Firebase服务初始化。
3. 升级Firebase依赖版本
检查并升级你的Firebase依赖到最新稳定版,官方可能已修复直接启动模式下的兼容性问题。示例gradle依赖配置:
implementation 'com.google.firebase:firebase-auth:22.3.1' implementation 'com.google.firebase:firebase-firestore:24.10.3'
4. 分离直接启动模式的业务逻辑
如果需要在直接启动模式下处理FCM消息,仅完成通知展示等无需云存储的操作,待用户解锁设备后,再将临时存储的数据同步到Firestore。
内容的提问来源于stack exchange,提问作者Jayakrishna Nakka
相关产品推荐
相关产品推荐

