推送合规指南

背景:小米推送自 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. 已知差距(跟进项)

  1. channel/渠道字段:imcore 当前小米 alert 推送未携带通知渠道 ID。若后台模板审核要求绑定渠道, 需在 sendXiaomiPush 增加 channel_id(配置或 per-app package 提供)——待后台核查结果确认后实现。
  2. 到达率面板:推送结果目前记录在任务表与日志;按厂商/应用的到达率聚合面板属观测性增强, 与运维指标面板(imctl)统筹,暂缓观察。
  3. token 生命周期:厂商侧 token 失效(卸载重装)后的自动反注册依赖厂商错误码回执 (如 Xiaomi ErrBadRegID);当前仅记录失败,反注册策略待定。