一、UniPush 2.0
UniPush 用于 App 在线和离线通知。客户端获取 push_clientid 后提交给业务服务端,服务端保存“用户、设备、平台、应用、推送标识”的关系。不要由前端直接携带第三方服务端密钥调用推送接口。
接入检查
- 应用包名、AppID、证书和厂商推送配置一致。
- 用户登录和退出时正确绑定、解绑设备。
- 推送任务异步执行并记录第三方返回码。
- 通知内容避免携带完整私密消息正文。
二、Android 厂商推送
华为、小米、OPPO、vivo 等通道通常需要分别申请。不同品牌的应用签名、包名和审核状态必须与正式包一致。模拟器和普通基座不能代表正式离线推送结果。
三、对象存储
聊天图片、语音和文件可以使用阿里云 OSS、腾讯云 COS 或兼容 S3 的服务。推荐由服务端签发短期上传凭证,客户端直接上传,完成后再向业务 API 提交对象键和文件元数据。
安全要求
- 存储桶默认私有。
- 下载使用短期签名 URL 或业务鉴权代理。
- 限制文件类型、大小和用户目录前缀。
- 定期清理未被业务记录引用的临时对象。
四、短信验证码
服务端生成验证码并保存哈希,设置短有效期、手机号冷却、IP 限流、每日上限和错误次数。不要把验证码明文长期写入日志。
五、邮件服务
邮件可用于注册验证、异常登录、管理员安全通知和授权到期提醒。生产环境使用独立发信账号,配置 SPF、DKIM 和失败退信处理。
六、RTC 音视频
音视频通话建议使用成熟 RTC 服务。房间令牌由服务端按用户、房间和有效期签发,客户端不能持有永久密钥。呼叫邀请、接听、拒绝和结束事件仍通过业务 WebSocket 同步。
七、内容安全
公开社交或大规模运营场景可接入文本、图片和音视频审核服务。自动审核结果应保留原因码和证据,严重违规再进入人工审核,不要只依赖前端关键词替换。
八、第三方故障降级
- 推送失败不应阻止消息入库。
- 对象存储故障时暂停新上传,但保留文本聊天。
- 短信故障时关闭注册或切换备用通道,不能绕过验证码。
- 所有第三方调用设置超时、重试上限和熔断,避免拖慢主请求。
七、官方支付渠道
系统可以对接支付宝和微信支付等官方渠道。商户私钥、平台证书和 API 密钥只能保存在服务端。支付结果以服务端验证通过的异步通知为准,前端返回页只用于展示。
上线前检查
- 回调地址可以被公网 HTTPS 访问。
- 商户号、应用 ID、证书序列号和密钥属于同一主体配置。
- 回调重复发送不会重复入账。
- 金额、币种、订单状态和业务订单号全部校验。
- 退款和关闭订单有独立状态记录。
八、IP 归属与内容处理
IP 归属地、视频转码、内容审核和链接预览均属于可选服务。接入前应确认供应商资质、数据传输范围、调用费用、失败降级方式和隐私政策。第三方服务不可用时,聊天主流程应尽量保持可用。
九、第三方服务密钥管理
- 正式和测试环境使用不同密钥。
- 按服务设置最小权限和来源 IP 白名单。
- 密钥轮换后保留短暂过渡期,并及时撤销旧密钥。
- 日志只记录请求编号和错误码,不记录完整 Secret、Token 或私钥。
- 所有第三方调用设置连接超时、总超时、重试上限和熔断策略。