You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关闭网络时Firestore报Stream closed UNAVAILABLE警告是否正常及如何避免

警告性质判定

你在断网场景下看到的Firestore相关警告属于正常预期现象,不属于业务异常错误。
该警告的触发原因是Firestore SDK默认会维持和云端的长连接用于数据同步,当网络主动断开时,底层gRPC通道、SSL连接无法正常传输数据、域名解析失败,都会抛出对应级别的警告日志,Firestore本身自带重试和离线缓存机制,该警告不会导致应用崩溃,也不会影响离线功能的正常运行。

你遇到的警告日志如下:

W/Firestore( 8864): (23.0.1) [WatchStream]: (c9d068c) Stream closed with status: Status{code=UNAVAILABLE, description=End of stream or IOException, cause=null}.
V/NativeCrypto( 8864): Write error: ssl=0xb40000726aa4a958: I/O error during system call, Broken pipe
V/NativeCrypto( 8864): SSL shutdown failed: ssl=0xb40000726aa4a958: I/O error during system call, Success
W/ManagedChannelImpl( 8864): [{0}] Failed to resolve name. status={1}
W/Firestore( 8864): (23.0.1) [WatchStream]: (c9d068c) Stream closed with status: Status{code=UNAVAILABLE, description=null, cause=java.net.ConnectException: failed to connect to firestore.googleapis.com/142.251.37.202 (port 443) from /:: (port 0): connect failed: ENETUNREACH (Network is unreachable)
W/Firestore( 8864):     at libcore.io.IoBridge.connect(IoBridge.java:142)
W/Firestore( 8864):     at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
W/Firestore( 8864):     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
W/Firestore( 8864):     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
W/Firestore( 8864):     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
W/Firestore( 8864):     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
W/Firestore( 8864):     at java.net.Socket.connect(Socket.java:621)
W/Firestore( 8864):     at java.net.Socket.connect(Socket.java:570)
W/Firestore( 8864):     at java.net.Socket.<init>(Socket.java:450)
W/Firestore( 8864):     at java.net.Socket.<init>(Socket.java:250)
W/Firestore( 8864):     at javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:285)
W/Firestore( 8864):     at io.grpc.okhttp.OkHttpClientTransport$4.run(OkHttpClientTransport.java:555)
W/Firestore( 8864):     at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
W/Firestore( 8864):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/Firestore( 8864):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/Firestore( 8864):     at java.lang.Thread.run(Thread.java:923)
W/Firestore( 8864): Caused by: android.system.ErrnoException: connect failed: ENETUNREACH (Network is unreachable)
W/Firestore( 8864):     at libcore.io.Linux.connect(Native Method)
W/Firestore( 8864):     at libcore.io.ForwardingOs.connect(ForwardingOs.java:94)
W/Firestore( 8864):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:138)
W/Firestore( 8864):     at libcore.io.ForwardingOs.connect(ForwardingOs.java:94)
W/Firestore( 8864):     at libcore.io.IoBridge.connectErrno(IoBridge.java:156)
W/Firestore( 8864):     at libcore.io.IoBridge.connect(IoBridge.java:134)
W/Firestore( 8864):     ... 15 more
W/Firestore( 8864): }.
警告规避方案
  • 关闭Firestore调试日志:在应用初始化阶段直接关闭Firestore的日志输出,即可过滤掉该类警告,仅关闭调试日志不会影响业务报错的捕获,Android平台示例代码如下:
// Java写法
FirebaseFirestore.setLoggingEnabled(false);
// Kotlin写法
FirebaseFirestore.getInstance().setLoggingEnabled(false)
  • 结合网络状态动态管理实时监听:监听设备网络连接状态,当检测到网络断开时,手动注销当前活跃的Firestore实时快照监听器,网络恢复后再重新注册,避免SDK持续尝试连接云端触发重复警告。
  • 确认离线持久化已开启:Firestore默认开启离线持久化功能,该功能开启后,离线状态下的所有数据操作会先缓存到本地,不会高频发起网络连接请求,仅会在断网瞬间输出一次连接警告,不会重复弹窗或输出冗余日志。

如果应用本身支持离线使用,无需做任何额外处理也不会影响用户体验,该警告仅会在开发调试的控制台输出,普通用户无法感知。

内容的提问来源于stack exchange,提问作者Mahmoud Niypoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:39:04