Android Studio集成Firebase手机号登录无法发送OTP,报错17010求助
Firebase手机号登录错误码17010(收不到OTP)的原因及解决方法
问题原因分析
错误码17010本质是Firebase拒绝了验证码请求,核心原因集中在应用身份校验不通过,而测试手机号因为被Firebase控制台标记为信任对象,跳过了校验环节,所以能正常接收OTP。具体原因包括:
- 签名指纹配置缺失/错误:Firebase控制台未添加当前应用调试/发布版本的SHA-1/SHA-256指纹,导致无法验证应用合法性。
- 包名不匹配:Firebase项目注册的应用包名,与Android项目
build.gradle中applicationId不一致。 - SmsRetriever API集成不完整:未配置必要权限、广播接收器,或代码中未正确启动短信监听服务。
- 配置文件未同步:修改签名/包名后,未重新下载
google-services.json并替换到项目中。
对应解决方法
1. 补全应用签名指纹
- 获取当前应用的签名指纹:
- 调试版本:在Android Studio终端执行
./gradlew signingReport,复制输出中的SHA1和SHA-256值。 - 发布版本:使用keytool工具执行
keytool -list -v -keystore 你的签名文件路径 -alias 签名别名,提取指纹信息。
- 调试版本:在Android Studio终端执行
- 登录Firebase控制台,进入项目设置→应用,在「应用签名」板块添加获取到的SHA-1、SHA-256指纹。
2. 核对包名一致性
检查Firebase控制台注册的应用包名,与Android项目Module级build.gradle里的applicationId是否完全一致(大小写敏感),如有差异及时修改同步。
3. 完善SmsRetriever API集成
- 在
AndroidManifest.xml中添加权限:<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.INTERNET" /> - 添加短信监听广播接收器:
<receiver android:name=".SmsRetrieverReceiver" android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED" /> </intent-filter> </receiver> - 在代码中启动SmsRetriever服务:
val smsRetrieverClient = SmsRetriever.getClient(this) val task = smsRetrieverClient.startSmsRetriever() task.addOnSuccessListener { // 短信监听启动成功 } task.addOnFailureListener { // 启动失败,检查配置是否完整 }
4. 同步配置文件
在Firebase控制台重新下载最新的google-services.json,替换到Android项目的app目录下,然后点击Android Studio右上角的「Sync Project with Gradle Files」同步项目。
额外注意事项
- 调试时避免使用「Instant Run」模式,可能导致签名异常;确保安装的APK使用的是配置过指纹的签名版本。
- 国内设备需保证能正常访问Firebase服务,必要时调整网络环境。
内容的提问来源于stack exchange,提问作者Nigel Sindirawo
相关产品推荐
相关产品推荐

