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

Flutter Android应用上传Firebase Storage时出现“No app check token for request”错误的解决方法求助

解决Flutter Android应用Firebase Storage上传时"No app check token for request"错误

我之前在做Flutter Firebase项目的时候也碰到过这个报错,折腾了好一会儿才搞定,其实核心问题就是Firebase App Check的配置没跟上——要么是你开启了App Check但没在应用里配置令牌生成,要么是调试模式下没添加调试令牌。下面给你一步步拆解解决方法:

1. 先确认Firebase App Check的状态

首先打开Firebase控制台,找到你的项目进入App Check页面:

  • 如果这里已经开启了App Check功能,那你的应用必须在请求Firebase服务时带上有效的App Check令牌,否则就会触发这个错误。
  • 如果是误开启的,你可以暂时关闭App Check来测试(但上线建议开启,提升安全性)。

2. 添加Flutter App Check依赖

在项目的pubspec.yaml文件里,添加App Check的依赖包:

dependencies:
  firebase_core: ^latest_version # 替换为当前最新版本
  firebase_app_check: ^latest_version # 替换为当前最新版本

添加完后运行flutter pub get拉取依赖。

3. 配置Android端的App Check验证方式

Firebase App Check对Android支持Play Integrity(推荐,SafetyNet已逐步被替代)和SafetyNet两种验证方式,选一种配置:

步骤A:在Firebase控制台配置验证提供者

  • 进入App Check页面,选择你的Android应用,点击Add provider。
  • 选择Play Integrity(或SafetyNet),按照提示输入你的应用SHA-256指纹:
    • 调试指纹可以用命令获取:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
    • 发布指纹则用你打包用的正式keystore生成。
  • 保存配置,Firebase会自动完成后续的关联。

步骤B:在Flutter代码中初始化App Check

在main.dart的main函数里,初始化Firebase之后添加App Check的激活代码:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_app_check/firebase_app_check.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 先初始化Firebase核心
  await Firebase.initializeApp();
  
  // 激活App Check,指定Android的验证提供者
  await FirebaseAppCheck.instance.activate(
    androidProvider: AndroidProvider.playIntegrity, // 选你刚才配置的PlayIntegrity或SafetyNet
  );
  
  runApp(const MyApp());
}

4. 处理调试模式的令牌(关键!)

如果你用调试keystore运行应用,Firebase会生成一个调试令牌,但默认不会被允许访问。你需要把这个令牌添加到Firebase控制台:

  • 运行应用,打开Android Studio的Logcat,搜索Debug token,会找到类似这样的日志:

    D FirebaseAppCheck: Debug token: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

  • 复制这个令牌,回到Firebase控制台的App Check页面,找到你的Android应用,点击Add debug token,粘贴令牌后保存。

5. 检查Firebase Storage的安全规则

如果你的Storage规则里强制要求App Check令牌,那必须确保前面的配置都正确。比如规则是这样的:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      // 要求请求携带有效的App Check令牌
      allow read, write: if request.app != null;
    }
  }
}

如果暂时想跳过App Check测试,可以临时把规则改成允许所有请求(注意:上线前一定要改回严格规则!):

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true; // 仅用于本地测试,上线禁用
    }
  }
}

6. 最后清理缓存重启

有时候缓存会导致配置不生效,建议做以下操作:

  • 在真机/模拟器上清除应用的缓存和数据
  • 运行flutter clean清理项目缓存
  • 重新运行flutter pub get
  • 重启应用

如果做完这些还是有问题,可以查看Logcat里的详细错误日志,看看是不是令牌获取失败(比如网络问题、指纹不匹配等),针对性排查就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:42:50