2023年Android端Firebase短信验证(OTP)中如何禁用reCaptcha
解决Firebase手机号验证仍触发reCaptcha的问题
关键排查与修复步骤
确认App Check的完全切换
登录Firebase控制台,进入App Check页面,确保对应Android应用的校验提供者只有Play Integrity,Safety Net的配置已彻底删除(而非仅禁用),同时开启"强制执行"选项——手机号验证会直接依赖App Check的校验结果,残留的旧配置可能导致兜底触发reCaptcha。校验Play Integrity的配置细节
- 核对Google Play Console的App Signing页面,将页面显示的上传密钥、应用签名密钥的SHA-1和SHA-256全部同步到Firebase项目的应用设置中,不要遗漏应用签名密钥(这是很多人踩坑的点)。
- 确保Android项目模块级
build.gradle中依赖的Play Integrity版本为最新稳定版,比如:
并确认App Check初始化代码正确,没有混用其他校验提供者:implementation 'com.google.firebase:firebase-appcheck-playintegrity:16.0.2'FirebaseApp.initializeApp(applicationContext) val appCheck = FirebaseAppCheck.getInstance() appCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance() ) - 必须使用通过Google Play渠道分发的发布版APK/AAB测试(包括内部测试轨道),Debug版若未配置Debug验证器,会默认触发reCaptcha兜底逻辑。
检查手机号验证代码
确保手机号验证的初始化代码中,没有手动指定reCaptcha相关参数,比如不要调用PhoneAuthOptions.Builder().setRecaptchaToken(...)这类强制启用reCaptcha的方法,让Firebase自动复用App Check的校验结果。排查设备环境问题
- 测试设备需安装最新版Google Play服务(建议22.09.14及以上),旧版本可能无法正常完成Play Integrity校验,导致降级到reCaptcha。
- 优先使用实体设备测试,部分模拟器的Play服务环境不完整,会影响校验逻辑。
兜底测试方案
若以上配置均确认无误,可通过Firebase控制台App Check页面的"测试"功能生成测试令牌,在应用初始化时临时设置:
FirebaseAppCheck.getInstance().setTokenProvider(object : AppCheckTokenProvider { override fun getToken(): Task<AppCheckToken> { return Tasks.forResult(AppCheckToken("你的测试令牌", 3600000)) } })
如果测试模式下不再触发reCaptcha,说明生产环境的Play Integrity校验仍有配置遗漏,重点复查Google Play Console与Firebase的密钥同步情况。
内容的提问来源于stack exchange,提问作者Md Abdur Rhman
相关产品推荐
相关产品推荐

