2025年:无需SafetyNet/DeviceCheck,禁用Android端Firebase短信验证reCAPTCHA
解决Firebase手机OTP验证中禁用reCAPTCHA(2025年适配方案)
问题背景
当前SafetyNet、Android DeviceCheck已废弃,仅Play Integrity API可用;Firebase手机OTP验证强制弹出reCAPTCHA,但同项目iOS端无此问题;已配置Play Integrity API、SHA密钥、Firebase App Check,仍出现logcat报错:Failed to initialize reCAPTCHA config: No Recaptcha Enterprise siteKey configured for tenant/project *,且phoneAuthOptions变为false。
核心解决方案
Firebase Phone Auth在Android端仅当设备无法通过Play Integrity验证时才会触发reCAPTCHA。要彻底禁用reCAPTCHA,需确保App Check完全依赖Play Integrity完成设备验证,且Phone Auth与App Check正确关联。
具体操作步骤
确认App Check Provider配置为Play Integrity
- 进入Firebase控制台 → 项目设置 → App Check
- 针对Android应用,将Provider设置为「Play Integrity」,而非reCAPTCHA系列选项
- 确保已为应用启用Play Integrity API(已完成的话可跳过)
验证SHA密钥的完整性
- 检查Firebase项目设置中添加的SHA-1、SHA-256是否覆盖所有场景:
- 调试版:本地开发用的签名密钥SHA
- 发布版:Google Play应用签名的SHA(若使用Google Play应用签名,需在Play控制台复制对应SHA)
- 确保密钥无拼写错误,且已同步到Firebase的App配置中
- 检查Firebase项目设置中添加的SHA-1、SHA-256是否覆盖所有场景:
代码层面关联Phone Auth与App Check
- 确保App Check已在应用启动时初始化:
// Kotlin初始化示例 FirebaseApp.initializeApp(applicationContext) val appCheck = FirebaseAppCheck.getInstance() appCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance() ) - 初始化PhoneAuthOptions时,不要添加任何reCAPTCHA相关配置,确保使用默认的设备验证逻辑(依赖App Check):
val phoneAuthOptions = PhoneAuthOptions.newBuilder(FirebaseAuth.getInstance()) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(callbacks) .build() PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptions) - 移除代码中所有手动设置reCAPTCHA Site Key或启用reCAPTCHA的代码
- 确保App Check已在应用启动时初始化:
排查logcat报错根源
- 若仍出现
No Recaptcha Enterprise siteKey configured报错,说明应用仍在尝试加载reCAPTCHA配置,需检查:- 是否第三方依赖(如旧版Firebase Auth库)强制引入reCAPTCHA,需升级到最新版Firebase Auth依赖(2025年推荐版本至少为23.x以上)
- 是否在Firebase控制台的Phone Auth设置中误启用了reCAPTCHA相关选项,确认Phone Auth的设备验证仅依赖App Check
- 若仍出现
测试验证
- 调试版:使用已添加SHA密钥的调试签名打包应用,测试OTP流程,确认无reCAPTCHA弹出
- 发布版:上传到Google Play内部测试轨道,测试验证流程(需确保Google Play应用签名的SHA已添加到Firebase)
关键说明
- iOS端默认通过App Attest完成设备验证,因此无需reCAPTCHA;Android端必须确保Play Integrity验证通过,才能跳过reCAPTCHA
- 若设备未安装Google Play服务(如部分国产定制ROM无GMS),仍会触发reCAPTCHA,这是Firebase的 fallback 机制,无法完全禁用(除非放弃对无GMS设备的支持)
内容的提问来源于stack exchange,提问作者Cipri
相关产品推荐
相关产品推荐

