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

Flutter获取Firebase图片下载链接提示No App Check token报错如何解决

问题排查与解决步骤

1. 修复异步逻辑错误

你当前代码存在两处异步逻辑问题,会导致无法正确获取并保存图片下载链接:

  • getDownloadURL() 是异步方法,返回Future<String>,没有加await直接调用toString(),只会得到Instance of 'Future<String>'的字符串,不是真实的下载链接
  • 更新Firestore的逻辑写在了上传回调的外部,还没等上传完成、拿到下载链接就执行了更新操作,存到数据库的profilfotolink是无效值

修正后的代码如下:

uploadImageToFirebase() async {
  File yuklenecekDosya = _imagefile!;
  firebase_storage.Reference referansYol = firebase_storage
      .FirebaseStorage.instance
      .ref()
      .child("Profilresimleri")
      .child(user!.uid)
      .child("profilresmi.png");

  // 等待图片上传完成
  await referansYol.putFile(yuklenecekDosya);
  // 等待获取真实的下载链接
  String downloadURL = await referansYol.getDownloadURL();
  print(downloadURL);
  // 拿到链接后再更新Firestore
  await firestore
      .collection("Users")
      .doc(user!.uid)
      .set({"profilfotolink": downloadURL}, SetOptions(merge: true));
}

2. 解决「No App Check token for request」警告

该警告是因为你的Firebase项目开启了App Check服务,但Flutter端没有正确集成App Check导致的,可根据你的需求选择处理方式:

  • 如果你不需要使用App Check做请求校验:直接登录Firebase控制台,进入App Check页面,关闭Cloud Storage的App Check强制校验开关即可,警告会自动消失
  • 如果你需要保留App Check服务:按以下步骤完成Flutter端集成
    • 安装App Check依赖:执行flutter pub add firebase_app_check
    • 在初始化Firebase之后添加App Check激活逻辑:
      await FirebaseAppCheck.instance.activate(
        // 安卓调试阶段可传入从Firebase控制台获取的调试令牌
        androidProvider: AndroidProvider.debug,
        // iOS调试阶段可传入调试令牌
        appleProvider: AppleProvider.debug,
      );
      
    正式上线前将调试Provider替换为正式的Play Integrity/Device Check/App Attest provider即可。

注:如果未开启App Check强制校验,该警告不会阻断正常的请求执行,只是提示缺少校验令牌。

内容的提问来源于stack exchange,提问作者Serhan Ergül

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:18:03