Firebase手机号认证中OTP自动检测失效问题求助
我之前也碰到过类似的OTP自动检测突然失效的情况!先给你吃个定心丸:Firebase的手机号OTP自动检测功能并没有被弃用,官方仍在维护这个便捷的登录体验,所以大概率是配置、权限或外部环境的问题。下面是我整理的排查方向,你可以逐一验证:
检查OTP短信格式是否符合自动填充标准
Firebase发送的验证短信需要包含特定标识才能被系统自动识别,比如:Your verification code is 123456. @your-app.firebaseapp.com #123456
重点是#后跟验证码,以及关联你的Firebase应用域名的@字段。如果运营商篡改了短信内容(比如截断后缀),或者你自定义了短信模板但遗漏了这些标识,都会导致自动检测失效。可以用测试手机号接收一条OTP,对比官方模板确认格式是否正确。验证应用权限配置
Android平台下,OTP自动检测需要以下权限:READ_SMSRECEIVE_SMS
即使之前权限正常,也要检查:- 用户是否在系统设置中禁用了相关权限
- 如果你最近升级了
targetSdkVersion到31+,是否适配了Android 12+的权限申请逻辑(动态申请权限的代码是否正常执行)
排查Firebase SDK兼容性
如果你最近升级了Firebase Auth或Google Play Services SDK,可能存在版本冲突问题:- 检查
build.gradle中com.google.firebase:firebase-auth的版本,尝试回退到之前OTP正常工作的版本,或者升级到最新稳定版 - 确保Google Play Services的版本和Firebase SDK版本匹配(比如
com.google.android.gms:play-services-auth的版本要和Firebase Auth版本兼容)
- 检查
排除系统或第三方应用干扰
- 用户设备上的第三方短信拦截APP(如杀毒软件、短信管家)可能会拦截或修改Firebase的OTP短信,导致系统自动填充服务无法识别
- 检查设备的自动填充服务是否正常开启:进入系统设置→语言和输入法→自动填充服务,确保启用了系统默认的自动填充服务,而非未适配的第三方服务
检查代码实现的冲突点
如果你最近修改了认证相关代码,需要确认:- 有没有自定义
BroadcastReceiver监听短信,这可能会和Firebase默认的短信接收器冲突,导致Firebase无法获取OTP内容 PhoneAuthProvider的回调逻辑是否有修改,比如是否意外拦截了自动检测的回调事件
- 有没有自定义
如果以上排查都没有解决问题,可以尝试在Firebase控制台重新下载google-services.json文件,替换到项目中,有时候配置文件过期或损坏也会导致这类奇怪的问题。
我当时的问题是运营商截断了短信中的Firebase域名后缀,导致系统识别不到这是当前APP的验证短信,联系运营商调整后就恢复正常了。希望这些思路能帮你找到问题!
内容的提问来源于stack exchange,提问作者Adarsh Singh

