Android实现SMS Token功能后发送短信无响应问题排查求助
问题排查与修复方案
1. 系统版本兼容校验
SmsManager.createAppSpecificSmsToken()是Android 10(API Level 29)才新增的API,若测试设备系统版本低于Android 10,该功能无法生效,请更换API等级≥29的设备测试。
2. 短信格式校验
要触发绑定的PendingIntent,发送的短信必须仅包含你生成的11位token,不能有任何额外字符,不能添加「验证码:」前缀、换行、说明文字等其他内容。
3. 修正PendingIntent配置
Android 12及以上系统中,FLAG_IMMUTABLE标记会导致系统无法向Intent注入短信相关参数,部分场景下会触发失败,修改createSmsTokenPendingIntent方法如下:
private fun createSmsTokenPendingIntent(): PendingIntent? { val flag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT } else { PendingIntent.FLAG_UPDATE_CURRENT } return PendingIntent.getActivity( this, 1234, Intent(this, SmsTokenResultVerificationActivity::class.java), flag ) }
注意导入android.os.Build包。
4. 校验Activity注册配置
需在项目AndroidManifest.xml中注册SmsTokenResultVerificationActivity,否则系统触发PendingIntent时找不到目标页面,不会产生响应,注册示例:
<activity android:name=".SmsTokenResultVerificationActivity" android:exported="true" />
Android 12及以上版本的Activity必须显式声明android:exported属性。
5. 日志排查
若修改后仍无响应,可在SmsTokenResultVerificationActivity的onCreate方法中添加日志确认页面是否被启动:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Log.d("SmsDebug", "验证页面已触发") // 原有代码保持不变 }
内容的提问来源于stack exchange,提问作者Hasan A Yousef
相关产品推荐
相关产品推荐

