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, );
- 安装App Check依赖:执行
注:如果未开启App Check强制校验,该警告不会阻断正常的请求执行,只是提示缺少校验令牌。
内容的提问来源于stack exchange,提问作者Serhan Ergül
相关产品推荐
相关产品推荐

