首页 > 其他分享 >规范:数据埋点集成使用说明

规范:数据埋点集成使用说明

时间:2022-08-25 10:11:27浏览次数:86  
标签:集成 string para track 规范 url tld var 埋点

1. 获取和引入 TrackLogData SDK

1.1. 异步方式 (推荐)

引入场景:通常情况下使用。

1.1.1. 本地手动指定sdk版本(vue SPA项目)

最新版本: //sa.a5.petrochina/stats/tld.globals.min.js  将下面代码放入</head>标签之前:

//vue项目引入方式:在public目录下的index.html中引入如下代码

<script type="text/javascript">       function domanURL(){var e=window.location.hostname;return e.indexOf('a5.petrochina')>0?'//sa.a5.petrochina':e.indexOf('a5test.petrochina')>0?'//sa.a5test.petrochina':null}       var LTD_URL=domanURL();       (function(para){var p=para.sdk_url,n=para.name||'tld',token=para.token,w=window,d=document,s='script',x=null,y=null;if(typeof(w['TLD202108'])!=='undefined'){return false}w['TLD202108']=n;w[n]=w[n]||function(a){return function(){(w[n]._q=w[n]._q||[]).push([a,arguments])}};w[n]['__SV']=1.6;var ifs='track_pv track_spa  time_event get_appStatus track track_pageview track_links track_forms register register_once alias unregister identify login logout signup name_tag set_config reset'.split(' ');for(var i=0;i<ifs.length;i++){w[n][ifs[i]]=w[n].call(null,ifs[i])}w[n]['_i']=[];if(!w[n]._t&&LTD_URL){x=d.createElement(s),y=d.getElementsByTagName(s)[0];x.async=1;x.src=p;x.setAttribute('charset','UTF-8');w[n].para=para;w[n]['_i'].push([token,para,n]);y.parentNode.insertBefore(x,y)}})       ({         sdk_url: LTD_URL+ "/stats/tld.globals.min.js",         token:"项目名称"//填写项目简称         img:true,         api_host: LTD_URL+"/api"//服务接口地址         code_type:1,// 1 权限编码, 2 .net菜单编码                  persistence: "localStorage"//浏览器存储类型 localStorage,sessionStorage,Cookie 三种模式         is_single_page: true//         single_page_config: {               mode: 'history',               autotrack:false,               track_replace_state: false           },         cross_subdomain_cookie: true        });         </script>

 

实例:

<!DOCTYPE html> <html>   <head>     <meta charset="utf-8" />     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />     <meta       name="viewport"       content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"     />     <link rel="icon" href="<%= BASE_URL %>favicon.ico" />     <title><%= webpackConfig.name %></title>     <script>         /* 检查ie浏览器版本 */         ;(function() {           var o = navigator.userAgent.match(/MSIE (\d+)/)           o = o && o[1]           // console.log('o', o)           // ie9 以下 || o != null           if (!!o && o < 10) {             // 更新页面             var newUrl =               location.protocol + '//' + location.host + '/ieupdate/index.html'             location.href = newUrl           }         })()         //注入所属环境 window.env="zb";         /*window.env*/       </script>   </head>   <body>     <noscript>       <strong         >We're sorry but <%= webpackConfig.name %> doesn't work properly without         JavaScript enabled. Please enable it to continue.</strong       >     </noscript>     <div id="app"></div>     <!-- built files will be auto injected -->    <script type="text/javascript">       function domanURL(){var e=window.location.hostname;return e.indexOf('a5.petrochina')>0?'//sa.a5.petrochina':e.indexOf('a5test.petrochina')>0?'//sa.a5test.petrochina':null}       var LTD_URL=domanURL();       (function(para){var p=para.sdk_url,n=para.name||'tld',token=para.token,w=window,d=document,s='script',x=null,y=null;if(typeof(w['TLD202108'])!=='undefined'){return false}w['TLD202108']=n;w[n]=w[n]||function(a){return function(){(w[n]._q=w[n]._q||[]).push([a,arguments])}};w[n]['__SV']=1.6;var ifs='track_pv track_spa  time_event get_appStatus track track_pageview track_links track_forms register register_once alias unregister identify login logout signup name_tag set_config reset'.split(' ');for(var i=0;i<ifs.length;i++){w[n][ifs[i]]=w[n].call(null,ifs[i])}w[n]['_i']=[];if(!w[n]._t&&LTD_URL){x=d.createElement(s),y=d.getElementsByTagName(s)[0];x.async=1;x.src=p;x.setAttribute('charset','UTF-8');w[n].para=para;w[n]['_i'].push([token,para,n]);y.parentNode.insertBefore(x,y)}})       ({         sdk_url: LTD_URL+ "/stats/tld.globals.min.js",         token:"项目名称"//填写项目简称         img:true,         api_host: LTD_URL+"/api"//服务接口地址         code_type:1,// 1 权限编码, 2 .net菜单编码                  persistence: "localStorage"//浏览器存储类型 localStorage,sessionStorage,Cookie 三种模式         is_single_page: true//         single_page_config: {               mode: 'history',               autotrack:false,               track_replace_state: false           },         cross_subdomain_cookie: true        });         </script>   </body> </html>

 

在permission.js文件中使用验证权限touter.beforeEach 方法内调用

//to 将要跳转的路由对象 // from 跳转前端的路由对象 tld.track_spa(to, from)

 

在 src/store/modules/user.js中添加 登录用户 window.tld.login(userId)和退出用户的方法

1.1.2. 本地手动指定sdk版本(.net项目 或者MVC项目)

最新版本: //sa.a5.petrochina/stats/tld.globals.min.js  将下面代码放入</head>标签之前:

 

<script> // 记录菜单点击次数         function domanURL() {         var e = window.location.hostname; return e.indexOf('a5.petrochina') > 0 ? '//sa.a5.petrochina' : e.indexOf('a5test.petrochina') > 0 ? '//sa.a5test.petrochina' '//sa.a5test.petrochina' var LTD_URL = domanURL(); (function (para) { var p = para.sdk_url, n = para.name || 'tld', token = para.token, w = window, d = document, s = 'script', x = null, y = nullif (typeof (w['TLD202108']) !== 'undefined') { return false } w['TLD202108'] = n; w[n] = w[n] || function (a) { return function () { (w[n]._q = w[n]._q || []).push([a, arguments]) } }; w[n]['__SV'] = 1.6; var ifs = 'track_pv track_spa  time_event get_appStatus track track_pageview track_links track_forms register register_once alias unregister identify login logout signup name_tag set_config reset'.split(' '); for (var i = 0; i < ifs.length; i++) { w[n][ifs[i]] = w[n].call(null, ifs[i]) } w[n]['_i'] = []; if (!w[n]._t && LTD_URL) { x = d.createElement(s), y = d.getElementsByTagName(s)[0]; x.async = 1; x.src = p; x.setAttribute('charset''UTF-8'); w[n].para = para; w[n]['_i'].push([token, para, n]); y.parentNode.insertBefore(x, y) } })         ({             sdk_url: LTD_URL + "/stats/tld.globals.min.js",             token: "a5iframe",             img: true,             api_host: LTD_URL + "/api",             code_type: 2, // 1 权限编码, 2 .net菜单编码             debug: true,             persistence: "localStorage",             cross_subdomain_cookie: true         }); </script>

A5 ./Index.aspx引用脚本实例如下:

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">     <meta http-equiv="X-UA-Compatible" content="IE=10;IE=9;IE=8;" />     <link href="AppThemes/css/index_style.css" rel="stylesheet" type="text/css" />     <title>采油与地面工程运行管理系统</title>     <script type="text/javascript" src="AppCode/Scripts/jquery-1.4.1.min.js"></script>     <script type="text/javascript">         // 记录菜单点击次数         function domanURL() {         var e = window.location.hostname; return e.indexOf('a5.petrochina') > 0 ? '//sa.a5.petrochina' : e.indexOf('a5test.petrochina') > 0 ? '//sa.a5test.petrochina' '//sa.a5test.petrochina' var LTD_URL = domanURL(); (function (para) { var p = para.sdk_url, n = para.name || 'tld', token = para.token, w = window, d = document, s = 'script', x = null, y = nullif (typeof (w['TLD202108']) !== 'undefined') { return false } w['TLD202108'] = n; w[n] = w[n] || function (a) { return function () { (w[n]._q = w[n]._q || []).push([a, arguments]) } }; w[n]['__SV'] = 1.6; var ifs = 'track_pv track_spa  time_event get_appStatus track track_pageview track_links track_forms register register_once alias unregister identify login logout signup name_tag set_config reset'.split(' '); for (var i = 0; i < ifs.length; i++) { w[n][ifs[i]] = w[n].call(null, ifs[i]) } w[n]['_i'] = []; if (!w[n]._t && LTD_URL) { x = d.createElement(s), y = d.getElementsByTagName(s)[0]; x.async = 1; x.src = p; x.setAttribute('charset''UTF-8'); w[n].para = para; w[n]['_i'].push([token, para, n]); y.parentNode.insertBefore(x, y) } })         ({             sdk_url: LTD_URL + "/stats/tld.globals.min.js",             token: "a5iframe",             img: true,             api_host: LTD_URL + "/api",             code_type: 2, // 1 权限编码, 2 .net菜单编码             debug: true,             persistence: "localStorage",             cross_subdomain_cookie: true         });     </script>     <!-- 消息提醒弹出提醒框区域 --> </head> <body style="height: 100%; margin: 0" onload="document.getElementById('divTip').style.height='0px'">     <link href="AppThemes/Styles/telerik.css" rel="Stylesheet" type="text/css" />     <form id="form2" runat="server">     <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">         <script type="text/javascript">             var userid = '<%=UserId %>';             //console.log('当前登录用户id:' + userid);             tld.login(userid);             function OnNodeClick(sender, args) {                 var node = args.get_node();                 var url = node.get_value();                 if (url && url.length) {                     var showType = node._attributes.getAttribute("showtype");                     var name = node.get_text();                     var nodeid = node._attributes.getAttribute("nodeid");                     tld.track_pv(nodeid);                     if (!new RegExp("^http[s]?://").test(url)) {                         //http:// 或 https:// 的全路径式链接                         if (new RegExp("^~[/|\\\\]").test(url)) {                             // ~/ 或 ~\ 的路径样式                             url = url.substring(2, url.length);                         }                     }                       var tag = node._attributes.getAttribute("tag");                       $.ajax({                         type: "POST",                         contentType: "application/json",                         url: "Index.aspx/SaveSearch",                         data: "{url:'" + url + "'}",                         dataType: 'json',                         success: function (data, textStatus) {                             if (data.d != null && data.d != "") {                             }                         },                         error: function (s) {                             alert("操作失败!");                         }                     });                       if (showType == "2")//弹出                         window.open(url, name, """");                     else                 //内嵌                         selTab(name, url);                 else {                     if (node._element.children(0).childNodes[2].className == "rtPlus" || node._element.children(0).childNodes[2].className == "rtMinus") {                         node._element.children(0).childNodes[2].click();                     }                 }             }         </script>     </telerik:RadCodeBlock>     <div id="ParentDivElement" style="height: 100%;">         <telerik:RadSplitter runat="Server" ID="RadSplitter1" Width="100%" BorderSize="0"             BorderStyle="None" PanesBorderSize="0" Height="100%" Orientation="Horizontal"             VisibleDuringInit="false">             <telerik:RadPane ID="TopPane" runat="server" Height="86px">                 <div class="Header">                     <div id="logo">                     </div>                     <div id="logout">                         <input type="button" id="btn_logout" value="" alt="" onclick="tld.logout();window.location.href='Index.aspx?quit=1';" />                     </div>                 </div>             </telerik:RadPane>                 <telerik:RadSplitter ID="RadSplitter2" runat="server" Height="100%" Width="100%"                     BorderWidth="0" CssClass="RadSplitter_Default">                     <telerik:RadPane ID="LeftPane" runat="server" Width="210" Scrolling="none" BorderWidth="0"                         MinWidth="210" MaxWidth="400">                         <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" Style="height: 100%;" ClientEvents-OnResponseEnd="OnResponseEnd">                             <telerik:RadPanelBar ID="RadPanelBar1" runat="server" CssClass="RadPanelBar_Default1"                                 Style="white-space: nowrap" ExpandMode="FullExpandedItem" OnItemClick="RadPanelBar_Click">                             </telerik:RadPanelBar>                         </telerik:RadAjaxPanel>                     </telerik:RadPane>                     <telerik:RadSplitBar ID="RadSplitbar1" runat="server" CollapseMode="Forward" Height="100%"                         CollapseExpandPaneText="<%$Resources:Language,Public_Expand_Collapse %>">                     </telerik:RadSplitBar>                     <telerik:RadPane ID="RightPane" runat="server" Height="100%" Width="100%" Scrolling="None">                         <telerik:RadSplitter ID="RadSplitter3" runat="server" Height="100%" Width="100%"                             Orientation="Horizontal">                             <telerik:RadPane runat="server" Height="35px" Scrolling="none" Width="100%" CssClass="rightPanelPadding">                                 <telerik:RadTabStrip ID="RadTabStrip1" runat="server" MultiPageID="RadMultiPage1"                                     CssClass="RadTabStrip_Default1" ScrollChildren="true" ScrollButtonsPosition="Middle"                                     Orientation="HorizontalTop">                                 </telerik:RadTabStrip>                             </telerik:RadPane>                             <telerik:RadPane runat="server" Height="100%" Scrolling="none" Width="100%">                                 <telerik:RadMultiPage ID="RadMultiPage1" runat="server" CssClass="multiPage" Height="100%"                                     SelectedIndex="0" Width="100%">                                 </telerik:RadMultiPage>                             </telerik:RadPane>                         </telerik:RadSplitter>                     </telerik:RadPane>                 </telerik:RadSplitter>             </telerik:RadPane>             <telerik:RadPane runat="server" ID="fullContentPane" Scrolling="none" Height="100%"                 Width="100%">             </telerik:RadPane>         </telerik:RadSplitter>     </div>     </form> </body> </html>

 

在点击菜单方法中调用 tld.track_pv("菜单code")方法

事件方法

1.2. 如何标识用户

1.2.1. 在登录和注册成功后,调用tld.login(user_id) 来标识真实用户

JavaScript SDK 会自动生成一个 deviceUDID 并永久保存在浏览器中的 Cookie 中,作为匿名用户唯一标识。如果你已知了真实的用户 id ,你可以通过 tld.login(user_id)设置用户userId。

问题1,这行代码放在哪里?

必须放在所有事件前面。也就是在 sdk 载入代码后面,先使用 tld.login ,然后再调用事件跟踪等,这样后续的事件才会使用这新的userId。

问题2,在什么时候调用?

页面登录的时候,只要获取到用户是登录状态,就需要调用。或者 注册流程成功的时候。

1.2.2. 使用 tld.logout 切换到之前的匿名 id

tld.logout();取消当前登录的userId

@param {function} callback 可选。表示已经发送完数据之后的回调

问题1,这个在什么时候使用?

在你用过 tld.login 后,在一个浏览器有多个用户登录的时候,你想在用户退出后清除当前的userId

 

 

触发事件上报

sdk初始化后,用户点击Button按钮,调用API上报自定义事件

tld.track('ViewProduct');

 

track_pv(code)

有菜单的编码的时候使用该方法。code为菜单的编码通常应用于A5的.net菜单功能,注意配置文件code_type必须为2

tld.track_pv('');

 

track_spa(to, from)

单页面vue、react、Angular等框架的项目工程,其中菜单有权限编码的功能菜单,在router 跳转的时候调用该方法,初始配置文件code_type必须为1.

to:将要跳转的路由对象
from:跳转前端的路由对象
tld.track_spa(to, from);

 

 

track_pageview(properties)

当有些时候需要手动触发PV时,调用该方法,其中参数是PV事件的自定义属性。
若选择手动触发PV,请关闭自动触发PV,否则PV事件将触发多次。

tld.track_pageview({ProductId: '22'});

 

参数说明

参数 默认值 含义 备注
sdk_url tld.globals.min.js文件的地址。  
name tld

SDK 使用的一个默认的全局变量,如定义成 tld的话,后面可以使用 tld.track() 用来跟踪信息。为了防止变量名重复,你可以修改成其他名称比如 tlddata 等 。

 
api_host 数据接收地址。   

code_type

1

1 权限编码, 2 .net菜单编码

 
autotrack false 是否初始化后自动触发埋点track方法  
img true 事件上报方式 模式为图片便签的形式发送防止跨域也可以通过get方式上传埋点  
cross_subdomain_cookie
true

设置成 true 后,表示在根域下设置 cookie 。也就是如果你有 http://sa.a5.petrochina/ 和 http://www.a5.petrochina 两个域,且有一个用户在同一个浏览器都登录过这两个域的话,我们会认为这个用户是一个用户。如果设置成 false 的话,会认为是两个用户。

 
persistence 'localStorage' 浏览器存储类型 localStorage,sessionStorage,Cookie 三种模式  
persistence_name ‘’ 存储的文件名称  
loaded function () { },

当sdk初始化结束后,所有事件发送前,可配置该方法

如:

//sdk初始化结束,执行该方法 var beforeFn = function(datracker) {     //datracker 为sdk实例对象     //pageview_attributes, pageview事件的自定义事件属性     datracker.pageview_attributes = {         test: '12344'     }; };

 

tld.init('8888',{ loaded: beforeFn,truncateLength: 255,persistence: "localStorage",cross_subdomain_cookie: false});
 
debug false 设置 true 后会在网页控制台打 logger,会显示发送的数据,设置 false 表示不显示。  
use_client_time false 客户端系统时间的不准确,会导致发生这个事件的时间有误,所以这里默认为 false ,表示不使用客户端时间,使用服务端时间,如果设置为 true 表示使用客户端系统时间。如果你在属性中加入 {$time: new Date()} ,注意这里必须是 Date 类型,那么这条数据就会使用你在属性中传入的这个时间。  
session_interval_mins 30 一次Session的超时时间,默认30分钟。  
truncateLength 255 通用字符串最大长度,超过部分会被截取丢弃(由于超过 7000 的字符串会导致 url 超长发不出去,所以限制长度)。  
img beacon 表示使用 beacon 请求方式发数据,可选使用 'image' 图片 get 请求方式发数据。( 神策系统 1.10 版本以后 ) 支持使用 'ajax' 和 'beacon' 方式发送数据,这两种默认都是 post 方式, beacon 方式兼容性较差。  
is_single_page false 表示是否开启单页面自动采集 $pageview 功能,SDK 会在 url 改变之后自动采集web页面浏览事件 $pageview。

 

single_page_config

{

        mode: 'history', //两种模式 history 、hash
        autotrack:true, //是否自动发送请求
        track_replace_state: false
    },

表示不开启批量发送,设置为 true 表示开启批量采集。  

 

字段详细说明以及属性如下:

字段名称 类型 说明
字段名称 类型 说明
browser string 浏览器
browserVersion string 浏览器版本
currentDomain string 当前访问页面的域名
currentUrl string 当前访问页面的url
title string 当前访问页面的标题
urlPath string 当前访问页面的路径
deviceId string 本地唯一标记(可理解为设备id)
deviceOs string 客户端操作系统
deviceOsVersion string 客户端操作系统版本
devicePlatform string 客户端平台(桌面、安卓、ios)
eventId string 上报事件的id
dataType string 事件类型(具体请看 src/config 中的 SYSTEM_EVENT_OBJECT)
language string 本地客户端语言
pageOpenScene string 网页打开场景(浏览器、APP)
persistedTime string 用户首次访问网站时间戳
referrer string 上一页url(来源页url)
referringDomain string 上一页域名(来源页域名)
screenHeight string 本地客户端屏幕高度(像素)
screenWidth string 本地客户端屏幕宽度(像素)
sdkType string 引入的sdk类型(网页:js)
sdkVersion string 引入的sdk版本
sessionUuid string 当前会话的id
time string 当前上报事件用户触发的时间戳
appKey string 据凭证(通过它来归类数据)
productId string 据凭证(通过它来归类数据)
code string 上报的菜单编码
codeType int 上报菜单类型 1、权限id 2、菜单id

deviceUdid

标签:集成,string,para,track,规范,url,tld,var,埋点
From: https://www.cnblogs.com/fqs123456/p/16623303.html

相关文章

  • 决策树与集成
    DecisionTree目录DecisionTreeClassificationTreeRegressionTreeRegularizationProsandconsAssembleMethodBaggingBoostingTakeawayGreedy,Top-down,Recurrent......
  • 开发规范-DTO和VO
    DTO和VO的区别DTO是展示层和服务层之间传递数据的对象,为什么还需要一个VO呢?在绝大部分场景,DTO和VO的属性值是一致的,通常都是POJO,这只是实现方面的思维,但是在设计层......
  • JavaScript知识-简介、语言规范、语言基础
    目录JavaScript简介1.ECMAScript和JavaScript的关系2.JavaScript语言3.HTML、CSS、JavaScriptJavaScript基础之语言规范1.如何使用?2.注释3.结束符JavaScript语言基础1.Java......
  • restfulAPI接口规范/django rest_Framework_环境
    一.RESTFUlAPI设计1).域名应该将api部署在专用域名下https://www.baidu.com/api/2).版本应该将API版本号放到路径中https://www.baidu.com/api/1.0/loginhttps:......
  • 万物皆可集成系列:低代码对接泛微e-cology
    近些年来,当谈论到企业信息化的时候,OA作为集团化全员应用,在企业经营管理中使用非常广泛。众所周知,泛微e-cology作为面向大中型企业的平台型协同办公自动化系统,它的标准化功......
  • 万物皆可集成系列:低代码释放用友U8+深度价值(2)—数据拓展应用
    在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与U8+系统的对接集成,本次给大家带来的是如何将用友U8+系统中的数据进行价值扩展和实际应用。我们以生产物料......
  • 开源交流丨批流一体数据集成框架ChunJun数据传输模块详解分享
    课件获取:关注公众号“ChunJun”,后台私信“课件”获得直播课件视频回放:点击这里ChengYing开源项目地址:github丨gitee喜欢我们的项目给我们点个__STAR!STAR!!STAR!!!(重要的......
  • Spring boot集成swagger
    前面一片文章在介绍时有提到过swagger,这篇文章就重点介绍一下Springboot集成swagger的方法与代码实践。引入依赖<dependency><groupId>io.sprin......
  • 浅谈嵌入式系统的持续集成
    持续集成(ContinuousIntegration(CI))和持续交付(ContinuousDelivery(CD))是现代软件开发中两个非常重要的概念。集成是完成交付和部署的前置条件,实现持续交付最大的难点是如......
  • 如何搭建一体化的埋点系统
    大家都知道,现在的商业模式都是由数据来驱动业务的,特别是在互联网行业,数据的重要性,尤为明显。那么如何让数据来驱动业务呢,这就不得不提到埋点系统。所谓埋点,我相信大部分开......