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

Firebase App Check获取Token报错:403验证失败与请求次数过多

Firebase App Check Token获取失败问题排查与修复

错误现象

  • API返回403错误:Error returned from API. code: 403 body: App attestation failed.
  • 日志提示请求超限:W/StorageUtil(24781): Error getting App Check token; using placeholder token instead. Error: com.google.firebase.FirebaseException: Too many attempts.

问题排查与修复方案

1. 解决「App attestation failed (403)」

  • 核对Firebase配置:
    • 确认Firebase控制台已为对应平台(Android/iOS)启用正确的App Check提供者:Android选SafetyNet或Play Integrity,iOS选DeviceCheck或Apple App Attest。
    • 检查项目包名/Bundle ID与Firebase注册信息完全一致,Android需将签名证书的SHA-256指纹正确添加到项目设置中。
  • 调试环境适配:
    调试阶段需启用调试令牌,避免正式验证逻辑拦截请求,在activate()方法中指定调试提供者:
    await FirebaseAppCheck.instance.activate(
      androidProvider: AndroidProvider.debug,
      appleProvider: AppleProvider.debug,
    );
    
  • 更新依赖版本:确保firebase_app_check及所有Firebase相关依赖为最新稳定版,旧版本可能存在验证逻辑兼容问题。

2. 解决「Too many attempts」

  • 调整请求时机:不要在App启动时强制同步获取Token,改为在实际需要使用Token的场景再发起请求,降低启动阶段的请求频率。
  • 使用Token监听机制:Firebase App Check支持自动刷新Token,通过监听onTokenChange获取最新Token,无需主动重复调用getToken():
    FirebaseAppCheck.instance.onTokenChange.listen((token) {
      if (token != null) {
        CheckToken = token;
        print("获取到的Token: $CheckToken");
      }
    });
    

优化后的完整代码

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  // 启用App Check,调试阶段添加debugProvider,发布时移除
  await FirebaseAppCheck.instance.activate(
    androidProvider: AndroidProvider.debug,
    appleProvider: AppleProvider.debug,
  );

  // 监听Token变化,自动更新缓存
  FirebaseAppCheck.instance.onTokenChange.listen((token) {
    if (token != null) {
      CheckToken = token;
      print("获取到的Token: $CheckToken");
    } else {
      print("App Check Token为空");
    }
  });

  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => CartModel()),
        // 如有需要可添加其他provider...
      ],
      child: MyApp(),
    ),
  );
}

额外注意事项

  • Android项目需确保已添加INTERNET权限,且SafetyNet/Play Integrity所需权限配置完整。
  • 若因频繁请求触发限制,可清理App缓存或更换测试设备,等待限制解除后再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:43:32