推送合规指南
背景:小米推送自 2026-07-01 起调整消息模板要求与推送限制(来源:腾讯云 IM 推送服务公告, 各接入小米通道的服务商均需在 2026-12-31 前完成适配)。本文是 imcore 侧的核查清单、已落地的代码防护与监控责任表。 关联 Backlog:技术扫描 TODO P0-2 / 产品候选 3「离线推送厂商合规适配与 Token 校验」(2026-09-22 期)。
1. 代码侧已落地(2026-09-22)
| 防护 | 位置 | 说明 |
|---|---|---|
| 注册前 token 格式校验 | servers/websocket/push_token_format.go + push_controller.go |
按厂商拦截必然无效的 token(越界长度/空白/控制字符/APNs 非 64 位 hex),返回 1001 与指明 vendor 的错误消息;未知 vendor 不校验(向前兼容) |
| 小米 title/description 截断 | servers/task/push_provider_oem.go sendXiaomiPush |
alert 模式按 rune 截断(title 默认 50、description 默认 128,push.xiaomi.max_title_chars / max_body_chars 可调),超限不再整条被厂商拒绝;description 为空回退 title,两者皆空发送前拦截 |
| VoIP token 同规则 | 同注册控制器 | PushKit token 与 APNs 主 token 同走 64-hex 校验 |
2. 部署侧核查清单(需在厂商后台完成,12-31 截止)
逐项核对小米开发者后台(Push → 应用配置),完成一项勾一项:
- 消息模板审核:2026-07-01 新规要求的自分类消息模板已在后台提报并通过;imcore 发送的 title/description 与已审核模板一致(透传消息不受模板约束,但 alert 推送必须一致)。
- 通知渠道(channel):应用已在小米后台创建通知渠道;若模板要求绑定渠道,在
push.xiaomi配置中补充渠道参数(当前 imcore 未发送 channel 字段——差距项,见 §4)。 - 频控/日额度:确认应用当前套餐的日推送额度;若接近上限,在监控(§3)中对
push_xiaomi_rate_limited类错误码设告警(小米返回 22103x 系列限流码)。 - 凭证有效期:
push.xiaomi.app_secret与后台 AppSecret 一致且未轮换;轮换后走 admin runtime 配置热更。 - 实测:按新模板发一条 alert 推送到真机,确认通知栏展示与厂商后台“推送记录”状态为到达。
3. 公告监控(责任人待填)
| 来源 | 频率 | 责任人 |
|---|---|---|
| 小米推送开发者公告 | 每周 | 待分配 |
| 腾讯云 IM 服务公告(跨厂商政策风向) | 每周(并入周五 IM 扫描) | 并入 scan_im_updates.py 周报流程 |
| 华为/荣耀/OPPO/vivo 开发者后台站内信 | 每月 | 待分配 |
告警信号:servers/task 推送失败日志中厂商错误码分类(classifyXiaomiResponse 等)、
push_provider 重试率指标;新政策生效前 30 天在周会核对一次额度与模板状态。
4. 已知差距(跟进项)
- channel/渠道字段:imcore 当前小米 alert 推送未携带通知渠道 ID。若后台模板审核要求绑定渠道,
需在
sendXiaomiPush增加channel_id(配置或 per-app package 提供)——待后台核查结果确认后实现。 - 到达率面板:推送结果目前记录在任务表与日志;按厂商/应用的到达率聚合面板属观测性增强, 与运维指标面板(imctl)统筹,暂缓观察。
- token 生命周期:厂商侧 token 失效(卸载重装)后的自动反注册依赖厂商错误码回执
(如 Xiaomi
ErrBadRegID);当前仅记录失败,反注册策略待定。