Firebase PhoneAuthProvider发送OTP无短信接收问题求助
解决Firebase Phone Auth无法发送OTP验证码的问题
我来帮你排查下Firebase Phone Auth收不到OTP的常见问题,结合你提到Logcat有错误信息,咱们从几个核心方向入手:
1. 先确认Firebase控制台的基础配置
- 检查Phone Authentication是否启用:登录Firebase控制台,进入「Authentication」→「Sign-in method」,确保「Phone」选项处于启用状态。如果是开发测试阶段,记得添加测试手机号(在Phone Auth设置的「Test phone numbers」区域),避免被Firebase的安全策略拦截真实短信发送。
- 验证SHA指纹配置:在Firebase控制台的「项目设置」→「你的应用」页面,确认已经添加了当前调试/发布版本的SHA-1和SHA-256指纹。这是最容易踩坑的点,指纹不匹配会直接导致Auth请求被拒绝。
2. 检查send_sms方法的代码实现
- 确保手机号格式符合E.164标准:比如国内手机号要写成
+8613xxxxxxxxx,如果格式错误,Firebase会静默失败或者在Logcat抛出格式错误提示。 - 验证回调逻辑是否完整:确认
PhoneAuthProvider.verifyPhoneNumber的几个关键回调(onVerificationCompleted、onVerificationFailed、onCodeSent)都正确注册了。你的Logcat错误信息大概率会在onVerificationFailed的回调日志里,比如权限不足、API密钥不匹配等问题。
3. 权限与网络环境检查
- 确认AndroidManifest.xml权限:必须添加
INTERNET权限(Firebase请求需要联网);如果是Android 12及以上版本,若用到后台验证逻辑,还需要添加POST_NOTIFICATIONS权限。示例权限配置:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> - 排查网络状态:弱网、VPN环境可能导致请求无法到达Firebase服务器,尝试切换到稳定的WiFi或移动网络再测试。
4. 测试环境的频率限制与策略
- Firebase对频繁请求OTP的手机号会触发频率限制,如果短时间内多次点击发送按钮,可能会被暂时拦截,建议间隔5-10分钟再尝试。
- 优先使用测试手机号:Firebase允许添加测试号码,这类号码不会发送真实短信,而是直接触发验证完成回调,非常适合开发调试,避免被运营商或反垃圾策略拦截。
5. 重点分析Logcat错误信息
你提到Logcat有相关错误,这是定位问题的核心线索!常见的错误类型及对应解决方向:
INVALID_APP_CREDENTIAL:SHA指纹配置错误或google-services.json文件过期,重新下载并替换配置文件即可。MISSING_PHONE_NUMBER:手机号格式不符合E.164标准,调整格式后再试。TOO_MANY_REQUESTS:请求频率超限,等待一段时间后再测试。NETWORK_ERROR:检查设备网络连接是否正常,或者是否有防火墙拦截了Firebase的请求。
如果以上步骤都排查完还是有问题,可以尝试重新下载Firebase的google-services.json文件替换到项目中,有时候配置文件的微小变更也会导致这类问题。
内容的提问来源于stack exchange,提问作者Sharath Prakash




