Cordova Ionic3安卓应用实现无Captcha手机号认证问题咨询
问题根因
从日志中的RecaptchaActivity启动记录可以确认,应用切后台是Firebase Auth默认触发的网页版reCAPTCHA人机验证导致的,验证过程会拉起独立的系统Activity覆盖当前应用。
解决方案
方案1:启用SafetyNet验证(优先推荐)
SafetyNet是安卓系统原生的验证能力,全程在应用后台处理,不会拉起任何外部页面:
- 前往Google Cloud控制台,为你的项目启用SafetyNet API,确保填写的应用包名、SHA1/SHA256指纹和Firebase控制台的配置完全一致
- 进入Firebase控制台,在「身份验证」-「设置」-「电话号码」分类下,开启「SafetyNet验证」开关
- 替换当前已停止维护的
cordova-plugin-firebase为长期维护的分支版本cordova-plugin-firebasex,该版本原生支持SafetyNet验证逻辑
方案2:配置不可见reCAPTCHA验证
如果无法启用SafetyNet,可将reCAPTCHA修改为无交互的静默模式,不会触发页面跳转:
- 调用验证接口时传入额外的reCAPTCHA配置参数,指定为不可见模式,修改后的代码如下:
window.FirebasePlugin.verifyPhoneNumber("你的手机号", timeOutDuration, function(credential) { console.log(credential); // 注意原代码变量名错误,将signInCredential改为回调返回的credential firebase.auth().signInWithCredential(credential); }, function(error) { console.error(error); }, { recaptchaSize: "invisible", recaptchaHideBadge: true });
- 若使用旧版本插件不支持额外参数,可升级插件到最新兼容版本
方案3:修改RecaptchaActivity为透明无界面
如果以上方案都不适用,可以直接修改安卓配置,让验证页面完全透明,用户无感知:
- 打开项目路径下的
platforms/android/app/src/main/AndroidManifest.xml,找到RecaptchaActivity的声明节点,添加透明主题配置:android:theme="@android:style/Theme.Translucent.NoTitleBar" - 可以编写Cordova hook脚本,在每次构建时自动注入该配置,避免重新添加安卓平台时配置丢失
注意事项
- 确保Firebase控制台配置的安卓应用指纹包含debug和release两个版本的SHA1、SHA256
- 测试使用的实体设备需要安装最新版本的Google Play服务,虚拟机缺少Play服务时会强制回退到网页版reCAPTCHA
内容的提问来源于stack exchange,提问作者meth
相关产品推荐
相关产品推荐

