Expo React Native Firebase手机号认证报错及生产OTP问题求助
问题1:开发构建(Expo托管工作流)手机号认证报错
auth/missing-client-identifier 核心原因
Expo托管工作流的开发构建使用独立调试签名密钥,若未将该密钥的SHA指纹添加至Firebase控制台,会导致Play Integrity/reCAPTCHA校验失败。
解决方案
- 获取开发构建的SHA指纹:
运行命令获取EAS开发构建的所有哈希值:
或通过expo fetch:android:hashesexpo credentials:manager选择Android,查看Debug credentials下的SHA1、SHA256值。 - 将获取到的SHA1、SHA256指纹添加到Firebase控制台对应Android应用的设置中(项目设置→应用→Android应用→添加指纹)。
- 重新下载
google-services.json替换项目内文件,执行eas build --profile development重新生成开发构建。 - 额外验证:确保Cloud Console中已启用Play Integrity API,且Firebase Auth的Phone认证方式处于启用状态。
问题2:生产环境OTP验证码无法登录报错
auth/session-expired 核心原因
OTP会话过期、签名不匹配、验证流程逻辑问题或依赖库版本bug都可能触发该错误。
解决方案
- 验证生产签名一致性:
确认Play控制台「应用签名」中的SHA1、SHA256指纹与Firebase控制台添加的完全一致(包含应用签名密钥和上传密钥的指纹)。 - 优化OTP验证流程:
- 限制用户在5分钟有效期内输入验证码,避免重复发送新验证码(每次发送新验证码会失效旧会话)。
- 发送验证码后,复用同一个
PhoneAuthProvider实例完成验证,不要重新初始化认证会话。 - 用户点击「重新发送」时,先调用
PhoneAuthProvider.verifyPhoneNumber返回的取消函数终止旧会话,再发送新验证码。
- 升级依赖版本:
将@react-native-firebase/auth升级至最新稳定版,修复旧版本可能存在的OTP会话管理bug。 - 检查Firebase配置:
确认Firebase控制台「Auth→登录方式→手机号」已启用,无区域限制或异常规则。
内容的提问来源于stack exchange,提问作者KAPIL BADOKAR
相关产品推荐
相关产品推荐

