Firebase发生NSInternalInconsistencyException崩溃,请求技术支持
Firebase Firestore 因设备存储空间不足导致崩溃的排查与解决
问题概述
应用频繁触发Firebase崩溃,尝试用do-try-catch捕获异常无效,具体错误信息如下:
FIRESTORE INTERNAL ASSERTION FAILED: Failed to commit transaction: <LevelDbTransaction NextMutationBatchAfterBatchID: 0 changes (0 bytes):> Failed: IO error: /var/mobile/Containers/Data/Application/1D9183C6-D12F-42CB-8A18-A408B7F5F841/Library/Application Support/firestore/__FIRAPP_DEFAULT/[APP-NAME]/main/001236.ldb: No space left on device (expected status.ok())
原因分析
这个崩溃是设备剩余存储空间不足导致的:Firestore依赖LevelDB做本地数据持久化,当设备空间耗尽时,LevelDB无法完成写入操作,触发Firestore内部断言校验失败,这类底层断言错误不属于常规可捕获的业务异常,所以do-try-catch无法拦截。
解决步骤
- 主动检测设备存储空间:在应用启动、Firestore写入操作前,添加剩余空间检测逻辑,当空间低于阈值时,直接提示用户清理存储,暂停相关写入操作。
- 优化Firestore本地存储:
- 清理本地缓存:调用
Firestore.clearPersistence()清除Firestore本地缓存(调用前需确保Firestore实例已关闭,避免读写冲突) - 按需关闭持久化:如果应用不需要离线功能,可通过
FirestoreSettings.isPersistenceEnabled = false关闭本地持久化,从根源避免LevelDB写入问题 - 业务层清理旧数据:定期清理应用内不再需要的Firestore文档/集合,减少本地存储占用
- 清理本地缓存:调用
- 监控与预警:开启Firestore详细日志(iOS端可设置
FIRFirestore.setLoggingEnabled(true)),结合Firebase Crashlytics监控这类崩溃,提前发现用户侧的存储问题 - 用户引导:在应用内添加存储不足的提示界面,引导用户删除无用文件、卸载闲置应用释放空间
内容的提问来源于stack exchange,提问作者Anoop Kumar
相关产品推荐
相关产品推荐

