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

Flutter Firebase App Check遇403错误:App attestation failed权限拒绝

解决Flutter中Firebase App Check搭配firebase_vertexai的"App attestation failed" 403错误

错误信息

{
  "error": {
    "code": 403,
    "message": "App attestation failed.",
    "status": "PERMISSION_DENIED"
  }
}

用户疑问

  1. Flutter的Firebase App Check设置中是否存在遗漏项?
  2. 针对"App attestation failed"问题,有哪些特定配置或排查步骤?
  3. 这是否与Firebase控制台或应用API密钥限制的配置错误有关?

已执行步骤

  • 在Firebase控制台为所需服务启用Firebase App Check
  • 在Flutter项目中集成firebase_app_check包
  • 按照Firebase官方文档配置App Check,iOS使用DeviceCheck,Android使用SafetyNet/Play Integrity
  • 在main.dart中完成App Check初始化:
AndroidProvider get androidProvider =>
      kDebugMode ? AndroidProvider.debug : AndroidProvider.playIntegrity;

AppleProvider get appleProvider =>
      kDebugMode ? AppleProvider.debug : AppleProvider.deviceCheck;

await FirebaseAppCheck.instance.activate(
  androidProvider: androidProvider,
  appleProvider: appleProvider,
);
  • 确认Android的google-services.json和iOS的GoogleService-Info.plist已更新且配置正确

补充信息

  • 禁用App Check时Firebase服务可正常工作
  • 已尝试重装应用排除缓存问题
  • 真机、模拟器/仿真器测试均出现该问题

解决指引

针对疑问1:检查Flutter App Check设置遗漏项

  • 确认firebase_vertexai包已关联App Check:进入Firebase控制台 → App Check → 受保护的资源,确认Vertex AI已被启用保护。
  • 验证初始化时机:确保App Check的activate方法在Firebase核心初始化之后、调用Vertex AI之前执行,示例代码:
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  // 激活App Check
  AndroidProvider get androidProvider =>
      kDebugMode ? AndroidProvider.debug : AndroidProvider.playIntegrity;
  AppleProvider get appleProvider =>
      kDebugMode ? AppleProvider.debug : AppleProvider.deviceCheck;
  await FirebaseAppCheck.instance.activate(
    androidProvider: androidProvider,
    appleProvider: appleProvider,
  );
  runApp(const MyApp());
}
  • 检查debug模式令牌配置:debug环境下需在Firebase控制台App Check → Debug tokens中添加对应平台的debug令牌,和代码中debug provider匹配。

针对疑问2:"App attestation failed"的排查与配置步骤

通用排查

  • 验证设备认证服务可用性:
    • Android:确保设备支持Play Integrity(Android 7.0+),Google Play服务为最新版本;若用SafetyNet,设备未被root或篡改。
    • iOS:设备运行iOS 11.0+,已在Xcode中开启"DeviceCheck" capability。
  • 手动获取令牌验证:在调用Vertex AI前,获取并打印App Check令牌,确认是否能正常获取:
final token = await FirebaseAppCheck.instance.getToken();
print("App Check Token: ${token?.token}");
  • 查看Firebase控制台日志:进入App Check → 日志,查看具体失败原因(如令牌无效、设备认证失败等)。

平台特定配置

  • Android:
    1. 在Google Cloud控制台启用Play Integrity API,确保API密钥已关联到google-services.json。
    2. 核对签名指纹:release版本用Firebase控制台注册的SHA-256指纹;debug版本需添加debug签名的SHA-256指纹到Firebase项目设置。
  • iOS:
    1. 在Xcode中为应用添加"DeviceCheck" capability(项目设置 → Signing & Capabilities → 添加Capability)。
    2. 确认Apple开发者账号已启用DeviceCheck服务,应用Bundle ID和Firebase控制台注册一致。
    3. debug模式下,从Xcode控制台错误日志中提取debug令牌,添加到Firebase控制台对应位置。

针对疑问3:Firebase控制台与API密钥配置检查

  • 检查API密钥限制:进入Google Cloud控制台 → API和服务 → 凭据,找到对应API密钥:
    • 确保允许调用Vertex AI相关API(aiplatform.googleapis.com)。
    • 应用限制(Android/iOS包名/Bundle ID)和当前应用完全匹配,无拼写或签名错误。
  • 核对Firebase项目权限:确认服务账号具有访问Vertex AI的权限,App Check已配置允许该账号的请求。
  • 确认受保护资源配置:Firebase控制台App Check的受保护资源列表中,Vertex AI服务状态为"启用"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:51:13