2023年2月Android端Firebase手机号认证隐藏Recaptcha方案
解决Flutter Firebase Android手机号认证仍显示Recaptcha问题(Play Integrity API替代SafetyNet)
以下是经过验证的解决方案,针对你遇到的Play Integrity配置后仍显示Recaptcha的问题:
1. 确认Play Integrity API全链路配置
- 先在Google Cloud Console对应项目中,手动启用Play Integrity API(Firebase的App Check依赖该GCP服务,必须单独开启)
- Firebase控制台进入「App Check」模块,为Android应用选择「Play Integrity」作为验证提供者,确保关联的GCP项目匹配
- Flutter项目依赖更新:
pubspec.yaml中firebase_app_check和firebase_auth升级到最新稳定版 - 初始化App Check时明确指定Android提供者:
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // 启用App Check并指定Play Integrity await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, // web端密钥按需配置,Android端可忽略 // webRecaptchaSiteKey: 'your-recaptcha-key', ); runApp(const MyApp()); }
2. 手机号认证模块的关键设置
- 进入Firebase控制台「身份认证」-「手机号认证」页面,开启App Check强制执行选项——这是跳过Recaptcha的核心开关
- 确保Firebase Android应用的SHA-256指纹完整:
- 同时添加调试密钥、发布密钥的SHA-256;若使用Google Play应用签名,还需添加Play Console中「应用签名」的SHA-256
3. 调试与发布环境注意事项
- 发布环境:必须使用签名后的APK/AAB,可上传至Google Play内部测试/正式轨道,或本地安装签名包;未通过Play签名的包会触发Recaptcha
- 调试环境:若要本地调试跳过Recaptcha,需:
- 获取调试密钥的SHA-256,添加到Firebase Android应用的指纹列表
- 调用
FirebaseAppCheck.instance.getToken(true)获取调试令牌,添加到Firebase App Check的调试令牌列表中
4. 排查常见问题
- 移除所有SafetyNet相关依赖,避免配置冲突
- AndroidManifest.xml中确保声明
INTERNET权限 - ProGuard/R8规则添加:
-keep class com.google.android.gms.playintegrity.** { *; } -keep class com.google.firebase.appcheck.playintegrity.** { *; }
内容的提问来源于stack exchange,提问作者Mark Alexander
相关产品推荐
相关产品推荐

