Unity集成Firebase SDK8.8.0运行Firestore代码触发崩溃卡死问题
问题现象
- Unity编辑器运行Firestore写入代码时直接崩溃
- 部署到iPhone设备运行时,应用触发该段代码后冻结无响应
- 出现问题时使用的Firebase SDK版本为8.8.0
运行报错信息
ERROR: FIRESTORE INTERNAL ASSERTION FAILED: z:\build\work\006fabbe3c788f8159e582ced9f367dd4f3a\google3\third_party\firebase\ios\Releases\FirebaseFirestore\core\src\local\leveldb_transaction.cc(76) void _cdecl firebase::firestore::local::LevelDbTransaction::Iterator::Seek(const class std::basic_string<char,struct std::char_traits,class std::allocator > &): leveldb iterator reported an error: Corruption: corrupted compressed block contents (expected db_iter->status().ok())
触发问题的代码
FirebaseFirestore db = FirebaseFirestore.DefaultInstance; DocumentReference docRef = db.Collection("posts").Document("656"); Dictionary<string, object> uuu = new Dictionary<string, object> { { "text", "hello" } }; docRef.SetAsync(uuu);
问题原因
报错核心是Firestore本地持久化依赖的LevelDB缓存文件损坏。8.8.0版本的Firebase SDK未对缓存损坏场景做容错处理,读取到损坏的压缩块时会直接触发内部断言失败:
- 编辑器端崩溃是因为编辑器环境下留存的本地Firestore缓存文件损坏
- iOS端应用冻结是因为应用沙盒内持久化存储的Firestore缓存损坏,SDK读取损坏缓存时触发断言,直接阻塞主线程
上述触发问题的写入代码本身不存在逻辑错误。
解决方案
- 临时修复(立刻恢复运行):清除本地损坏的Firestore缓存
- Unity编辑器端:关闭Unity编辑器,删除项目目录下
Library/PersistentDefault/firestore文件夹后重启编辑器即可 - iPhone设备端:卸载应用后重新安装,即可清空沙盒内损坏的缓存文件
- Unity编辑器端:关闭Unity编辑器,删除项目目录下
- 永久修复:将Firebase Unity SDK升级到8.10.0及以上版本,官方在后续版本中修复了该问题,新增了缓存损坏自动重建逻辑,遇到同类缓存损坏场景不会再触发崩溃或冻结。
- 编码优化:调用
SetAsync这类异步Firestore接口时建议增加异常捕获逻辑,避免异步任务报错未处理引发额外问题,参考写法:
_ = docRef.SetAsync(uuu).ContinueWith(task => { if (task.IsFaulted) { UnityEngine.Debug.LogError($"Firestore写入失败: {task.Exception}"); } });
内容的提问来源于stack exchange,提问作者SHAI
相关产品推荐
相关产品推荐

