Android模拟器中SmsRetriever超时异常:短信即收却触发超时回调
解决Android模拟器SmsRetriever收短信却触发TIMEOUT的问题
可能的原因及解决办法:
短信格式不满足SmsRetriever强制要求
SmsRetriever对短信内容有严格规范,缺一不可:- 包含应用专属的哈希字符串(可通过Google官方工具生成)
- 验证码内容长度控制在110字符以内
- 短信末尾必须添加一行以
#开头的应用哈希
合规短信示例:
您的登录验证码是: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
相关产品推荐
相关产品推荐

