Firebase iOS真机手机号认证失败、reCAPTCHA验证不通过问题咨询
报错说明
出现的错误信息为:NativeFirebaseError: [auth/internal-error] Unable to load external reCAPTCHA dependencies!
异常表现:Firebase手机号认证的reCAPTCHA人机验证无法通过,无法获取验证码;安卓设备、iOS模拟器功能正常,仅iOS真机出现异常,已确认开启手机号登录权限、完成URL Types配置。
根因定位
- iOS系统的App传输安全(ATS)规则拦截了reCAPTCHA相关的Google资源加载
- Firebase Auth SDK版本存在已知的reCAPTCHA依赖加载bug,本地Pod依赖缓存版本不匹配
- 真机网络环境无法访问Google reCAPTCHA服务,或者app的网络权限被限制
修复方案
- 配置ATS域名例外
在iOS项目的Info.plist文件中添加reCAPTCHA相关域名的访问许可,配置代码如下:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <false/> <key>NSExceptionDomains</key> <dict> <key>google.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSAllowsArbitraryLoads</key> <true/> </dict> <key>gstatic.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSAllowsArbitraryLoads</key> <true/> </dict> </dict> </dict>
- 升级Firebase Auth SDK版本
将项目依赖的Firebase Auth SDK升级到最新稳定版,如果你使用React Native Firebase,同步升级@react-native-firebase/auth依赖;进入iOS项目目录执行pod install --repo-update更新本地Pod依赖,清除旧版本缓存。 - 调整Auth初始化配置
初始化Firebase Auth时开启reCAPTCHA自动回退配置,降低外部依赖加载失败概率,参考代码如下(React Native场景):
import auth from '@react-native-firebase/auth'; // 开启reCAPTCHA验证流自动回退 auth().settings.appVerificationDisabledForTesting = false; // 测试环境可使用本地Auth模拟器,生产环境请删除此行 // auth().useEmulator('http://127.0.0.1:9099');
- 验证真机网络与权限
确认测试真机的网络可以正常访问Google服务,部分地区运营商网络默认屏蔽reCAPTCHA资源,可切换WiFi环境测试;同时检查app的网络权限,确认已允许使用蜂窝数据和无线网络。
内容的提问来源于stack exchange,提问作者Maryna Azeez
相关产品推荐
相关产品推荐

