短信延迟由运营商限流、内容审核、跨省转发、终端设置等多环节叠加导致,无法仅靠客户端解决;高峰时段营销短信排队可达数分钟,敏感词或签名不符会触发人工审核,双卡手机和系统权限限制亦影响接收。

短信发送延迟不是单一环节的问题,而是运营商通道、网络状态、内容审核、终端接收等多个环节叠加导致的,无法靠客户端代码完全规避。
运营商网关排队是最大延迟来源
国内三大运营商对短信实行分级限流,高峰时段(早9点、晚6–8点)或营销类短信会进入队列等待分发。即使你的服务端 sendSms() 调用返回成功,实际到达用户手机可能滞后 2–30 秒,甚至更久。
- 非紧急通知类短信(如验证码)通常走高优通道,延迟较低;营销/模板类短信优先级低,排队明显
- 部分小运营商或虚拟运营商(如170/171号段)网关处理能力弱,延迟常超1分钟
- 跨省发送时,需经省际信令网转发,额外增加500ms–2s不等的传输延迟
短信内容触发人工审核会卡住几秒到几分钟
含敏感词(如“投资”“免费”“领取”)、短链接、未备案签名或未报备模板的短信,会被运营商实时拦截并转人工复核。此时 sendSms() 接口可能返回 "status": "submitted",但实际未下发。
- 签名必须与工信部备案完全一致(包括括号全半角、空格),否则进审核队列
- 模板变量(如
{code})不能出现在签名中,也不能在模板正文外拼接任意文本 - 测试时用真实手机号,避免用模拟器或云手机——这类设备IP常被标记为高风险,自动延长审核
终端侧延迟常被误判为服务端问题
用户手机信号弱、飞行模式刚关闭、系统级短信应用被冻结(如小米/华为的“短信过滤”开关开启)、或安装了第三方短信管理App(如“短信助手”),都会造成已送达却未弹窗/未入库的现象。
- Android 12+ 默认关闭后台短信广播权限,App收不到
android.provider.Telephony.SMS_RECEIVED广播,需改用SmsRetrieverClient主动拉取 - iOS 无公开短信监听机制,任何“秒级回调”都是伪需求,只能依赖服务端状态轮询或推送补位
- 双卡手机若默认短信卡与接收卡不一致,会出现“已发送但对方收不到”的错觉
真正可控的只有服务端重试策略和用户提示时机:比如验证码类短信,首次发送后3秒未返回回执,就该主动调用 querySmsStatus() 查状态,而不是等客户端轮询。多数延迟问题不在代码里,而在你没看过的运营商日志和用户手机设置里。










