You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase发送短信OTP验证码报错17020等问题如何解决?

问题根因

你遇到的核心报错是java.net.UnknownHostException: Unable to resolve host "www.googleapis.com",是设备无法连通谷歌服务接口导致的连锁错误:无法获取SafetyNet Token、无法生成reCAPTCHA验证凭证,最终触发短信验证请求错误码17020。

修复步骤
  • 1. 网络与基础权限检查

    • 确认测试设备/模拟器的网络可以正常访问谷歌服务,国内测试需要使用可连通谷歌接口的网络环境
    • 检查AndroidManifest.xml中是否添加了必要权限:
      <!-- 必加网络权限 -->
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
  • 2. 修正OTP请求超时配置

    你当前在SendOTPCode.java中设置的验证超时时间仅为1秒,完全不足以完成 SafetyNet 验证、接口请求的全链路流程,修改超时时间为官方推荐的60秒:
    // 原错误配置
    //.setTimeout(1L, TimeUnit.SECONDS)
    // 修正后配置
    .setTimeout(60L, TimeUnit.SECONDS)
    
  • 3. 校验Firebase配置一致性

    • 确认google-services.json中的包名与你项目build.gradle里的applicationId "com.example.firebase.sms.smsotp4"完全一致
    • 确认Firebase控制台安卓应用配置页面,添加的SHA-1、SHA-256签名和你当前运行打包的签名完全匹配:调试模式需要添加debug keystore的签名,正式发布需要添加正式签名文件的对应签名
  • 4. 修正异步逻辑错误

    SendOTPCode.send()方法中的PhoneAuthProvider.verifyPhoneNumber是异步请求,你在请求发起后立刻返回静态变量sended的逻辑是错误的,此时请求还未完成,sended永远为初始默认值,建议直接删除同步返回判断逻辑,完全依赖verificationId的LiveData回调处理后续跳转即可。
  • 5. 临时测试方案

    如果仅需要功能测试,可以在Firebase控制台手机认证页面开启不安全测试模式,添加测试手机号和固定验证码,不需要走真实短信发送和SafetyNet校验流程,可快速验证业务逻辑。

内容的提问来源于stack exchange,提问作者Youssef Amr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:24:04