本工具注入后,SDK 会随 playable 加载并挂载到 window.cp。在业务代码的对应时机调用即可,无需自行拼装请求。
cp(event_name, msg?),传入字典中的事件名;仅 ERR 事件可传第二个参数 msg。{ 公共字段, events: [{ event_id, event_name, event_time, ... }] };仅 ERR 在 event 中带 msg。X-Caspian-Sign 对加密后的 base64 请求体计算,格式 digest,timestamp,key_id。[cp-tracker] 警告。// 1. 素材首次展示(必选,同一会话只报一次)
cp('DISPLAYED');
// 2. 用户点击下载 / 跳转按钮(必选)
cp('CTA_CLICKED');
// 3. 挑战类事件(按玩法选用,不传 msg)
cp('CHALLENGE_STARTED');
cp('CHALLENGE_PASS_50');
// 4. 捕获异常时(必选)
try {
startGame();
} catch (e) {
cp('ERR', String(e.message || e));
}
函数签名:cp(event_name: string, msg?: string);msg 仅对 ERR 有效,其他事件请只传事件名。
window.cp,调用会报错。DISPLAYED(曝光)、CTA_CLICKED(下载点击)、ERR(异常)三个事件必须接入;挑战类事件按玩法选接。fetch(..., { keepalive: true }),避免跳转时请求被中断(因需 X-Caspian-Sign 请求头,不能用纯 sendBeacon)。CHALLENGE_PASS_25,不能写成 challenge_pass_25)。customer_user_id 由 SDK 首次访问时生成并存入 localStorage(pa_ 前缀)。cp() 不返回 Promise;如需验证请在网络面板或后端确认收到事件。统计素材曝光,是 ROAS 漏斗的起点事件。
何时调用:首屏渲染完成、用户可以看到 playable 内容时。cp('DISPLAYED'),无需 msg。
玩家正式进入玩法,用于分析「曝光 → 开始玩」的转化。
何时调用:点击「开始」「Play」或进入第一关时。cp('CHALLENGE_STARTED')
挑战进度节点,用于绘制玩法中途流失漏斗。
何时调用:进度到达 25%、50%、75% 时各报一次。例:cp('CHALLENGE_PASS_50')
关卡通关或挑战成功。
何时调用:判定玩家获胜、出现胜利 UI 时。cp('CHALLENGE_SOLVED')
挑战失败,用于分析难度与流失点。
何时调用:超时、生命值归零或 game over 时。cp('CHALLENGE_FAILED')
玩家主动重试,反映玩法吸引力。
何时调用:点击「重试」「再玩一次」时。cp('CHALLENGE_RETRY')
End Card / 结算页展示,通常出现在 CTA 按钮之前。
何时调用:最后一帧或结算画面出现时。cp('ENDCARD_SHOWN')
用户点击下载 / 安装 / 跳转商店,是核心转化事件。
何时调用:下载按钮点击回调内,与实际跳转同时触发。cp('CTA_CLICKED')。SDK 内部对该事件使用 fetch keepalive,确保跳转前上报不被页面卸载打断。
运行时或业务逻辑异常,用于线上问题排查。
何时调用:try/catch、资源加载失败、关键状态异常时。例:cp('ERR', 'texture missing: hero.png')
以下字段无需在业务代码中传入,SDK 会在每次 cp() 时自动写入上报体。
t_id、p_id、android_bundle_id、ios_bundle_id、media、channel、campaign_name、adset_name、ad_name、campaign、adset、creative
app_bundle 由 SDK 在运行时按 UA 从上述双平台包名中自动选择,不写入注入数据。
customer_user_id、platform(web)、time_zone、language、user_agent、url(srcdoc/iframe 时会向上解析真实页面地址)、referer、country(XX)、events[].event_id
所有事件含 event_name、event_time(ISO 8601 日期字符串);仅 ERR 额外写入 msg