Flutter应用从SafetyNet迁移至Play Integrity API后验证码问题排查
一、解决reCAPTCHA自动触发问题(核心:确保Play Integrity API正常工作)
你的推测方向正确,reCAPTCHA触发是因为Firebase Auth无法通过Play Integrity完成设备验证,自动 fallback 到了备用验证方案。按以下步骤排查修复:
1. 同步Firebase Auth设备验证配置
进入Firebase控制台 → Authentication → 登录方法 → 电话,在「设备验证」选项中,确认已选择「Play Integrity API」而非「SafetyNet」。后端API切换后,Firebase Auth的前端配置必须同步更新。
2. 补全Flutter端依赖配置
你仅配置了Android端Gradle依赖,Flutter项目需在pubspec.yaml中添加对应版本的firebase_auth包(版本需与Firebase BOM 31.5.0兼容,对应firebase_auth约4.10.0版本):
dependencies: flutter: sdk: flutter firebase_auth: ^4.10.0 firebase_core: ^2.17.0 # 必须添加,用于初始化Firebase
执行flutter pub get后,确保应用初始化时调用await Firebase.initializeApp();。
3. 验证签名指纹一致性
- 从Play控制台获取应用发布签名证书SHA-256指纹(路径:应用设置 → 应用签名)
- 将该指纹添加到Firebase项目的Android应用设置中(路径:Firebase控制台 → 项目设置 → 应用 → 对应Android应用 → 添加指纹)
Play Integrity依赖签名验证,指纹不匹配会直接导致验证失败,触发reCAPTCHA。
4. 配置Play Integrity API权限
在Google Cloud控制台,给Firebase Auth服务账号(格式:firebase-auth@<你的项目ID>.iam.gserviceaccount.com)添加Play Integrity Viewer或Play Integrity Editor角色,确保服务账号有权调用Play Integrity API。
5. 使用Play渠道分发的安装包测试
Play Integrity API仅对通过Play控制台发布的应用生效(包括内部测试、封闭测试渠道),本地调试APK或直接安装的APK无法触发正常验证,会自动 fallback 到reCAPTCHA。测试时务必使用Play渠道的安装包。
二、配置OTP短信显示Firebase项目名称
进入Firebase控制台 → Authentication → 登录方法 → 电话,找到「短信模板」设置,修改模板内容,将Firebase项目名称作为前缀添加,示例:
【你的Firebase项目名称】你的验证码是{code},用于账号登录,请在5分钟内完成验证。
注意:用方括号包裹项目名称,符合运营商短信展示规范,确保项目名称能正常显示在OTP短信中。
内容的提问来源于stack exchange,提问作者Harshana

