Firebase Storage正式发布模式下文件无法上传问题求助
Firebase Storage上传在Release构建(TestFlight/安卓内部测试)中失效,Debug模式正常
问题现象
- Debug模式下可正常上传文件至Firebase Storage
- 部署到iOS TestFlight或安卓内部测试渠道后,文件上传功能完全失效
相关代码配置
环境变量与Storage Bucket配置
单例类中配置Storage Bucket地址,无论Debug/Release都指向测试环境:
static final String firebaseCloudStorageUrl = kReleaseMode ? dotenv.get("APP_STORAGE_DEV") : dotenv.get("APP_STORAGE_DEV");
FirebaseStorage实例初始化
final _storage = FirebaseStorage.instanceFor(bucket: ApiUrl.firebaseCloudStorageUrl);
文件上传方法
@override Future<List<String>> uploadImageWithCloudStorage({ required List<File> files, required String userId, }) async { try { List<String> result = []; for (File file in files) { String fileName = DateTime.now().millisecondsSinceEpoch.toString(); List<int> bytes = await file.readAsBytes(); Uint8List data = Uint8List.fromList(bytes); TaskSnapshot taskSnapshot = await _storage .ref() .child("/$userId") .child(fileName) .putData(data); String url = (await taskSnapshot.ref.getDownloadURL()); result.add(url); } if (result.isNotEmpty) { return result; } throw Failure("Couldn't upload files"); } on SocketException catch (_) { throw Failure("No internet connection"); } on HttpException { throw Failure("Service currently unavailable"); } on Failure catch (e) { throw Failure(e.message); } catch (e) { throw Failure("Something went wrong. Try again"); } }
构建命令
生成iOS IPA:
flutter build ipa --flavor development --target lib/main_development.dart
生成安卓AAB:
flutter build appbundle -t lib/main_development.dart --flavor development
已完成的配置与排查
- 已为不同Flavors配置对应的
firebase_options文件 - 已将
GoogleService-Info.plist(iOS)和google-services.json(安卓)放置到正确目录 - 已更新所有Firebase相关依赖包
排查方向与解决方案
验证Release模式下环境变量加载
- 在Release构建中添加日志,打印
dotenv.get("APP_STORAGE_DEV")的实际值,确认环境变量被正确读取 - 检查Flavor构建脚本,确保对应环境的
.env文件被正确关联打包
- 在Release构建中添加日志,打印
检查Firebase Storage安全规则
- 确认规则允许当前Release版本的应用身份验证方式(如用户ID验证、匿名登录)上传文件
- 可临时设置宽松规则(
allow read, write: if true;)测试是否为规则限制导致失败,测试后及时恢复
确认网络权限配置
- iOS:检查
Info.plist中是否配置NSAppTransportSecurity,允许访问Firebase相关域名 - 安卓:确认
AndroidManifest.xml中添加了<uses-permission android:name="android.permission.INTERNET" />,且Release模式未禁用网络
- iOS:检查
验证Firebase初始化状态
- 在Release启动阶段添加日志,确认对应Flavor的Firebase项目被正确初始化
- 核对
FirebaseStorage.instanceFor传入的Bucket地址与Firebase控制台测试环境Bucket完全一致(注意拼写、大小写)
捕获详细错误日志
- 修改
catch块,打印原始异常的详细信息(如e.toString()),而不是仅抛出通用错误,定位具体失败原因
- 修改
内容的提问来源于stack exchange,提问作者Chichebe
相关产品推荐
相关产品推荐

