如何基于Adobe/Google Analytics追踪代码同步点击流数据至AWS Kinesis?
复用Adobe/GA追踪代码复制Hit-Level数据到AWS Kinesis的解决方案
针对你的需求,完全可以通过修改现有JS追踪标签,在数据发送到Adobe Analytics/Google Analytics的同时,复制原始hit-level数据转发到AWS Kinesis,无需重新开发整套追踪代码。以下分平台详细说明:
Adobe Analytics 实现方式
1. 拦截原生追踪方法(推荐)
通过重写Adobe Analytics核心追踪方法(s.t() 或 s.tl()),在调用原生方法发送数据到Adobe之前,提取并转发hit数据到Kinesis:
// 保存原始的s.t方法 const originalTrack = s.t; // 重写s.t方法 s.t = function() { // 复制当前hit的所有原始数据(包含所有自定义变量、页面信息等) const rawHitData = { ...s }; // 通过API Gateway转发到Kinesis(前端无法直接调用Kinesis,需API Gateway做代理处理签名和CORS) fetch('https://your-api-gateway-endpoint/kinesis-adobe', { method: 'POST', body: JSON.stringify(rawHitData), keepalive: true, // 确保页面卸载时请求仍能发送 headers: { 'Content-Type': 'application/json' } }).catch(err => console.error('Kinesis转发失败:', err)); // 执行原始方法,确保数据正常发送到Adobe Analytics return originalTrack.apply(this, arguments); }; // 对s.tl()方法做同样处理(用于链接追踪等非页面视图hit) const originalTrackLink = s.tl; s.tl = function(element, linkType, linkName, overrideVars) { // 提取hit数据,包含传入的覆盖变量 const rawHitData = { ...s, ...overrideVars }; // 转发到Kinesis fetch('https://your-api-gateway-endpoint/kinesis-adobe', { method: 'POST', body: JSON.stringify(rawHitData), keepalive: true, headers: { 'Content-Type': 'application/json' } }).catch(err => console.error('Kinesis转发失败:', err)); return originalTrackLink.apply(this, arguments); };
2. 拦截自动生成的Collect请求
如果需要直接获取发送到Adobe的原始请求内容(而非s对象数据),可以拦截浏览器发送到Adobe Collect URL的请求:
const originalFetch = window.fetch; window.fetch = function(resource, options) { // 检测是否为Adobe的collect请求 if (typeof resource === 'string' && resource.includes('adobe.net/collect')) { let requestPayload; // 提取请求数据(GET取查询参数,POST取请求体) if (options?.method === 'POST') { requestPayload = options.body; } else { requestPayload = new URL(resource).searchParams.toString(); } // 转发到Kinesis fetch('https://your-api-gateway-endpoint/kinesis-adobe', { method: 'POST', body: requestPayload, keepalive: true, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).catch(err => console.error('Kinesis转发失败:', err)); } // 执行原始请求 return originalFetch.apply(this, arguments); };
Google Analytics 实现方式
1. GA4:使用自定义任务(Custom Task)
GA4的gtag.js支持自定义任务,可在hit发送到Google前拦截并复制数据:
gtag('config', 'G-YOUR_TRACKING_ID', { custom_task: function(taskModel) { // 获取原始hit的Payload(包含所有事件参数、用户属性等) const rawHitPayload = taskModel.get('hitPayload'); // 转发到Kinesis(通过API Gateway) fetch('https://your-api-gateway-endpoint/kinesis-ga4', { method: 'POST', body: rawHitPayload, keepalive: true, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).catch(err => console.error('Kinesis转发失败:', err)); } });
2. Universal Analytics(UA):重写send方法
对于仍在使用UA的场景,可重写ga()的send方法:
ga(function(tracker) { const originalSend = tracker.send; tracker.send = function(hitType, hitParams) { // 复制原始hit数据 const rawHitData = { hitType, ...hitParams, ...tracker.get() }; // 转发到Kinesis fetch('https://your-api-gateway-endpoint/kinesis-ua', { method: 'POST', body: JSON.stringify(rawHitData), keepalive: true, headers: { 'Content-Type': 'application/json' } }).catch(err => console.error('Kinesis转发失败:', err)); // 执行原始send方法 return originalSend.apply(this, arguments); }; });
关键注意事项
- 跨域与签名处理:AWS Kinesis不支持前端直接跨域请求,且需要IAM签名,因此必须通过API Gateway做中转(在API Gateway中配置Lambda集成,由Lambda完成Kinesis的签名和数据写入)。
- 数据完整性:上述方法均能获取原始未处理的hit-level数据,包含所有自定义变量、用户标识、请求上下文等,满足机器学习需求。
- 性能影响:使用
keepalive参数或navigator.sendBeacon()发送Kinesis请求,避免阻塞页面渲染或影响原追踪代码的性能。 - 自动生成URL的定制:Adobe/GA的自动生成Collect URL无法直接修改,但通过上述拦截方法,无需修改原URL即可复制请求数据并转发到自定义路由,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Adam Prior
相关产品推荐
相关产品推荐

