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

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相关依赖包

排查方向与解决方案

  1. 验证Release模式下环境变量加载

    • 在Release构建中添加日志,打印dotenv.get("APP_STORAGE_DEV")的实际值,确认环境变量被正确读取
    • 检查Flavor构建脚本,确保对应环境的.env文件被正确关联打包
  2. 检查Firebase Storage安全规则

    • 确认规则允许当前Release版本的应用身份验证方式(如用户ID验证、匿名登录)上传文件
    • 可临时设置宽松规则(allow read, write: if true;)测试是否为规则限制导致失败,测试后及时恢复
  3. 确认网络权限配置

    • iOS:检查Info.plist中是否配置NSAppTransportSecurity,允许访问Firebase相关域名
    • 安卓:确认AndroidManifest.xml中添加了<uses-permission android:name="android.permission.INTERNET" />,且Release模式未禁用网络
  4. 验证Firebase初始化状态

    • 在Release启动阶段添加日志,确认对应Flavor的Firebase项目被正确初始化
    • 核对FirebaseStorage.instanceFor传入的Bucket地址与Firebase控制台测试环境Bucket完全一致(注意拼写、大小写)
  5. 捕获详细错误日志

    • 修改catch块,打印原始异常的详细信息(如e.toString()),而不是仅抛出通用错误,定位具体失败原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:13:41