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

Android模拟器中SmsRetriever超时异常:短信即收却触发超时回调

解决Android模拟器SmsRetriever收短信却触发TIMEOUT的问题

可能的原因及解决办法:

  • 短信格式不满足SmsRetriever强制要求
    SmsRetriever对短信内容有严格规范,缺一不可:

    1. 包含应用专属的哈希字符串(可通过Google官方工具生成)
    2. 验证码内容长度控制在110字符以内
    3. 短信末尾必须添加一行以#开头的应用哈希
      合规短信示例:

    您的登录验证码是:654321
    #XYZ987654

  • 模拟器系统广播兼容性问题
    部分第三方模拟器(如旧版Genymotion)对系统广播的处理存在异常,建议:

    • 切换到Android Studio自带的Pixel系列模拟器,选择API 26及以上的系统镜像
    • 手动在模拟器短信应用中输入短信内容并发送,避免使用第三方工具导入短信
  • 广播接收器注册不规范
    必须在AndroidManifest.xml中静态注册广播接收器,并指定正确的Intent Filter:

    <receiver android:name=".SmsBroadcastReceiver"
              android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
        </intent-filter>
    </receiver>
    

    动态注册的接收器无法被系统正确触发,必须使用静态注册。

  • SmsRetriever监听启动时机错误
    必须先启动SmsRetriever监听,再触发验证码短信的发送,代码示例:

    val smsRetrieverClient = SmsRetriever.getClient(context)
    val startTask = smsRetrieverClient.startSmsRetriever()
    startTask.addOnSuccessListener {
        // 监听启动成功,此时可请求后端发送验证码短信
    }
    startTask.addOnFailureListener {
        // 处理监听启动失败的情况
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:22:36