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

Android平台如何获取短信发送方ID/号码?(SMS Retriever API场景)

SMS Retriever API获取发送方ID并实现特定发送方OTP过滤方案

1. 从广播接收器中直接获取发送方ID

SMS Retriever API的广播回调中已内置发送方标识字段,只需在onReceive方法里通过SmsRetriever.EXTRA_SENDER提取即可:

class SmsReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        intent?.takeIf { it.action == SmsRetriever.SMS_RETRIEVED_ACTION }?.let {
            val status = it.extras?.get(SmsRetriever.EXTRA_STATUS) as Status
            when (status.statusCode) {
                CommonStatusCodes.SUCCESS -> {
                    val smsMessage = it.extras?.getString(SmsRetriever.EXTRA_SMS_MESSAGE)
                    // 核心:获取发送方ID/号码
                    val senderId = it.extras?.getString(SmsRetriever.EXTRA_SENDER)
                    
                    // 过滤特定发送方,仅符合条件时触发OTP弹窗
                    senderId?.takeIf { it == "你的目标发送方ID/号码" }?.let {
                        val otp = extractOtp(smsMessage ?: "")
                        // 执行自动填充弹窗逻辑
                        showOtpPopup(otp)
                    }
                }
                CommonStatusCodes.TIMEOUT -> {
                    // 超时处理,比如提示用户手动输入OTP
                }
            }
        }
    }

    private fun extractOtp(message: String): String {
        // 示例:提取短信中的6位数字OTP
        return Regex("\\d{6}").find(message)?.value ?: ""
    }

    private fun showOtpPopup(otp: String) {
        // 实现OTP弹窗填充逻辑,比如将OTP填入输入框
    }
}

2. 发送方ID的格式注意事项

  • 发送方ID可能是短代码(如6位数字)、完整手机号或运营商分配的自定义标识,具体取决于短信发送渠道
  • 必须确保短信符合SMS Retriever的规范:内容包含你的应用签名哈希,且长度不超过140字符,否则无法触发回调

3. 调试与适配技巧

  • 先打印senderId的实际值,确认目标发送方的真实标识后再设置过滤条件,避免匹配错误
  • 如果部分场景下EXTRA_SENDER为空,可以退而求其次,从短信内容前缀提取发送方(比如【XX平台】),用正则匹配判断:
private fun isTargetSender(message: String): Boolean {
    val allowedSenders = listOf("【XX平台】", "1069XXXXXX")
    return allowedSenders.any { message.startsWith(it) }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:25:31