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" } }
用户疑问
- Flutter的Firebase App Check设置中是否存在遗漏项?
- 针对"App attestation failed"问题,有哪些特定配置或排查步骤?
- 这是否与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令牌,和代码中
debugprovider匹配。
针对疑问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:
- 在Google Cloud控制台启用Play Integrity API,确保API密钥已关联到google-services.json。
- 核对签名指纹:release版本用Firebase控制台注册的SHA-256指纹;debug版本需添加debug签名的SHA-256指纹到Firebase项目设置。
- iOS:
- 在Xcode中为应用添加"DeviceCheck" capability(项目设置 → Signing & Capabilities → 添加Capability)。
- 确认Apple开发者账号已启用DeviceCheck服务,应用Bundle ID和Firebase控制台注册一致。
- debug模式下,从Xcode控制台错误日志中提取debug令牌,添加到Firebase控制台对应位置。
针对疑问3:Firebase控制台与API密钥配置检查
- 检查API密钥限制:进入Google Cloud控制台 → API和服务 → 凭据,找到对应API密钥:
- 确保允许调用Vertex AI相关API(
aiplatform.googleapis.com)。 - 应用限制(Android/iOS包名/Bundle ID)和当前应用完全匹配,无拼写或签名错误。
- 确保允许调用Vertex AI相关API(
- 核对Firebase项目权限:确认服务账号具有访问Vertex AI的权限,App Check已配置允许该账号的请求。
- 确认受保护资源配置:Firebase控制台App Check的受保护资源列表中,Vertex AI服务状态为"启用"。
内容的提问来源于stack exchange,提问作者mysCod3r
相关产品推荐
相关产品推荐

