Skip to content
AI 文档索引 ↗

离线队列与可靠投递 ​

SDK 会暂存尚未确认的事件,在网络恢复或下次调度时重试。track() 返回仅表示调用已被处理,不代表事件已写入持久存储或被接收端接受。

本地队列与恢复 ​

平台主要存储何时不能恢复待发事件
WebIndexedDB;不可用时可能改用 LocalStorage 或内存使用内存后备时,页面关闭后不能恢复
AndroidRoom / SQLite持久存储不可用而改用内存时,进程结束后不能恢复
iOSSQLite持久存储不可用而改用内存时,进程结束后不能恢复

队列有容量和保留期限。三端默认保留事件入队后的 7 天;达到容量或过期时,待发事件可能被丢弃。按业务量配置上限,并通过错误码与诊断检查实际存储后端、队列大小和丢弃原因。内存后备不能保证重启恢复。

上传、确认与重试 ​

一次上传使用整批确认。接收端返回 HTTP 2xx 且响应包含有效 ACK 后,SDK 才移除该批事件。当前接收服务使用的成功响应示例:

json
{
  "code": 200,
  "data": { "status": "ACCEPTED" },
  "message": "success"
}

平铺响应也可使用匹配的 batchId 和 accepted: "all"。旧逐事件字段 acceptedEventIds、rejected、unresolved 不构成确认;完整请求和响应格式见事件接收协议。

结果SDK 行为
网络失败、408、429、5xx 或无效的 2xx ACK保留整批并按退避策略重试
不可重试的 4xx将整批移至本地死信状态
413尝试拆分多事件批次;单条事件仍过大时需缩小内容

重试保留原 eventId;同一批次重试也保留 batchId。接收端仍需按事件 ID 去重,才能处理“事件已接收但 ACK 丢失”后的重发。SDK 重试不等于业务再次调用 track();订单、支付等需要事务一致性的事件,应使用业务服务的事务 Outbox。

各端重试间隔与上限并不完全相同,收到有效 Retry-After 时会结合平台策略等待。不要依赖固定秒数或后台即时送达。页面离开、应用退后台时,SDK 会尽力发送;Android 退后台时尽力 flush 并请求 WorkManager 一次性任务,iOS 和 Web 也受系统或浏览器限制。详见应用生命周期。

开发期确认首批事件 ​

接入测试可用 verifyDelivery 检查调用时待发范围的确认结果。acknowledged 表示已收到有效整批 ACK;empty 表示当时没有待发事件;rejected 表示范围内有拒收;unconfirmed 表示尚未完整确认。它不生成测试事件,也不绕过授权或重试等待。请在记录事件后调用,并在接收端核对最终数据;操作步骤见数据校验。

flush() 只触发发送,不代表收到 ACK。verifyDelivery 只观察一次固定范围,超时或取消不会停止已经开始的上传。各平台的方法签名见 Web API、Android API、iOS API。