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
相关产品推荐
相关产品推荐

