Flutter+Firebase Android测试设备Firebase Storage图片加载失败求助
我用Flutter开发Android衣物管理应用,衣物文本数据(材质、颜色、季节、imageUrl等)存储在Firebase Database,图片存储在Firebase Storage。此前加载文本和图片展示电子衣橱的功能完全正常,但今日起图片加载突然失败,Firebase Database仍可正常访问。
加载图片的代码如下:
Widget _buildClothImage(cloth) { return cloth.imagePath != null ? Image.network( cloth.imagePath!, fit: BoxFit.cover, ) : Container( color: Colors.grey[200], child: const Icon(Icons.image, size: 40), ); }
出现的错误信息:
I/flutter (24492): 🔴 Image error: SocketException: Connection failed (OS Error: Network is unreachable, errno = 101), address = firebasestorage.googleapis.com, port = 443
Flutter版本信息:
Flutter 3.27.4 • channel stable
Framework • revision d8a9f9a52e (7天前) • 2025-01-31 16:07:18 -0500
Engine • revision 82bd5b7209
Tools • Dart 3.6.2 • DevTools 2.40.3
已尝试的解决方法:
- 将cloth.imagePath中的URL复制到浏览器,可正常显示图片
- 使用任意网络图片URL传入Image.network,可正常显示
- 确认Firebase Storage安全规则为开放状态(允许2025/4/6前的所有请求)
- 检查测试设备时区,日期时间显示正确
排查方向
1. 检查Android应用网络权限配置
确认AndroidManifest.xml中是否添加了必要的网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
若为Android 10及以上版本,可检查application标签是否配置了android:usesCleartextTraffic="true",或确认network_security_config未限制HTTPS请求。
2. 排查设备网络访问限制
- 切换网络环境:从Wi-Fi切换到移动数据,或更换其他Wi-Fi,排除当前网络对
firebasestorage.googleapis.com的屏蔽 - 关闭设备的代理、VPN或防火墙,避免这类工具拦截Storage域名请求
- 用设备浏览器直接访问
https://firebasestorage.googleapis.com,验证是否能正常连接
3. 检查Firebase SDK版本兼容性
查看pubspec.yaml中firebase_storage插件的版本,确认是否与Flutter版本、其他Firebase插件版本存在兼容性问题。可尝试升级至最新稳定版,或回退到之前能正常运行的版本。
4. 验证图片URL的有效性
- 确认
cloth.imagePath是Firebase Storage生成的长期有效URL,若为临时签名URL,需检查是否过期(即使浏览器能打开,也要确认是否为同一时间生成的URL) - 重新生成图片的下载URL,替换原有URL测试是否能加载
5. 清除应用缓存与DNS缓存
- 清除应用的缓存和存储数据,重启应用重试
- 切换设备飞行模式再关闭,或直接重启设备,强制刷新DNS缓存,避免域名解析异常
6. 检查Firebase项目状态
- 登录Firebase控制台,确认Storage服务是否正常运行,有无服务中断、存储容量/带宽超限的情况
- 检查项目计费状态,确认是否因欠费导致Storage服务受限
7. 验证Android网络安全配置
若应用配置了network_security_config.xml,检查是否允许访问firebasestorage.googleapis.com,确保配置中包含:
<domain includeSubdomains="true">firebasestorage.googleapis.com</domain>
8. 测试其他设备/模拟器
在其他Android设备或模拟器上运行应用,排查是否为当前测试设备的系统层面问题
内容的提问来源于stack exchange,提问作者user29546576

