地址
开发文档:http://doc.talkingdata.com/posts/36
数据平台:https://www.talkingdata.com/spa/app-analytics/#/analytics/behavior/events/3304965/%25E5%25BF%25AB%25E9%2580%259F%25E6%25B3%25A8%25E5%2586%258C%25E3%2580%2582%25E3%2580%2582%25E3%2580%2582
使用
引入:
<script src="https://jic.talkingdata.com/app/h5/v1?appid=APPID&vn=应用版本名称&vc=应用版本id"></script>
使用:
TDAPP.onEvent(“事件名称”, “用户唯一标识”);
eg:
/ eslint-disable /
TDAPP.onEvent(‘快速注册。。。’, ‘3013520’)
/ eslint-enable /
效果
如下:第一参数统计操作,第二参数统计用户,
可以知道页面某个位置被使用多少次,使用的用户信息和用户操作次数,即:统计用户行为
源码
如上图:这货就是在发送请求,和热云统计一个样子,将数据通过接口上传然后再有个后台展示数据
其引入js代码如下:
var appid = ‘。。。。。。。。。。。。。xxxxxx’;
var vn = ‘name’;
var vc = ‘1.0.1’;
// 需引入ajax和参数处理js的基地址
var TDBaseUrl = ‘http://sdk.talkingdata.com/app/h5/v1/websdk‘;
// 接口地址
var TDRequestUrl = ‘http://h5data.talkingdata.net/app/v1‘;
// 在引入js内动态再次添加js
function createScriptTd(url) {
var head = document.getElementsByTagName(‘head’)[0];
_var script = document.createElement(‘script’);
_script.type = ‘text/javascript’;
_script.src = url;
_head.appendChild(_script)
};
createScriptTd(TDBaseUrl + ‘/js/sdk_release.js’);
if (!window[‘JSON’] || typeof JSON !== ‘object’) { createScriptTd(TDBaseUrl + ‘/js/json2.js’) };
window[“TDAPP”] = {};
window[“TDAPP”].onEvent = _function (id, label, params) {
if (arguments.length > 0) {
try {
var opts = { count: 1, start: new Date().getTime() };
if (id != undefined) { opts[“id”] = typeof id != “string” ? JSON.stringify(id) : id } if (label != undefined) { opts[“label”] = typeof label != “string” ? JSON.stringify(label) : label } else { opts[“label”] = “” } if (params != undefined) {
var isJson = function (obj) {
var isjson = typeof (obj) == “object” && Object.prototype.toString.call(obj).toLowerCase() == “[object object]” && !obj.length;
return isjson
};
if (isJson(params)) { opts[“params”] = params } else { opts[“params”] = { params: “” } }
} var eventName = “TDtd-init-event”;
_var ev = localStorage[eventName];
if (ev) {
var ca = JSON.parse(ev);
ca.push(opts);
localStorage.setItem(eventName, JSON.stringify(ca));
return
};
localStorage.setItem(eventName, “[“ + JSON.stringify(opts) + “]”)
} catch (e) { }
}
};
在引入的js内引入了两个js,定义了接口地址
含有请求的js:http://sdk.talkingdata.com/app/h5/v1/websdk/js/sdk_release.js
怀疑是参数处理的js:http://sdk.talkingdata.com/app/h5/v1/websdk/js/json2.js
以下为含请求js的代码:
function pageLogout(e) {
if (!eventState) return; var t = (new Date).getTime();
TDBASE.lealSet(t), TDBASE.addGenre({ name: window.location.href, start: WebappStart, duration: parseInt((t - WebappStart) / 1e3), refer: document.referrer }, “pages”), eventState = !1
} function trim(e) { return e } function UrlRequest() { this.url = TDRequestUrl, this.opts = {}, this.requestArray = new Array } var $$ = function (window) {
function triggerAndReturn(e, t, n) { return !0 } function triggerGlobal(e, t, n, r) { if (e.global) return triggerAndReturn(t || document, n, r) } function ajaxStart(e) { e.global && ajax.active++ === 0 && triggerGlobal(e, null, “ajaxStart”) } function ajaxStop(e) { e.global && !—ajax.active && triggerGlobal(e, null, “ajaxStop”) } function ajaxBeforeSend(e, t) {
var n = t.context;
if (t.beforeSend.call(n, e, t) === !1 || triggerGlobal(t, n, “ajaxBeforeSend”, [e, t]) === !1) return !1;
triggerGlobal(t, n, “ajaxSend”, [e, t])
} function ajaxSuccess(e, t, n) {
var r = n.context, i = “success”;
n.success.call(r, e, i, t), triggerGlobal(n, r, “ajaxSuccess”, [t, n, e]), ajaxComplete(i, t, n)
} function ajaxError(e, t, n, r) {
var i = r.context;
r.error.call(i, n, t, e), triggerGlobal(r, i, “ajaxError”, [n, r, e]), ajaxComplete(t, n, r)
} function ajaxComplete(e, t, n) {
var r = n.context;
n.complete.call(r, t, e), triggerGlobal(n, r, “ajaxComplete”, [t, n]), ajaxStop(n)
} function empty() { } function mimeToDataType(e) { return e && (e == htmlType ? “html” : e == jsonType ? “json” : scriptTypeRE.test(e) ? “script” : xmlTypeRE.test(e) && “xml”) || “text” } function appendQuery(e, t) { return (e + “&” + t).replace(/[&?]{1,2}/, “?”) } function serializeData(e) { typeof e.data == “object” && (e.data = param(e.data)), e.data && (!e.type || e.type.toUpperCase() == “GET”) && (e.url = appendQuery(e.url, e.data)) } function serialize(e, t, n, r) {
var i = typeof t == “array”;
for (var s in t) {
var o = t[s];
r && (s = n ? r : r + “[“ + (i ? “” : s) + “]”), !r && i ? e.add(o.name, o.value) : (n ? typeof o == “array” : typeof o == “object”) ? serialize(e, o, n, s) : e.add(s, o)
}
} function param(e, t) {
var n = [];
return n.add = function (e, t) { this.push(escape(e) + “=” + escape(t)) }, serialize(n, e, t), n.join(“&”).replace(“%20”, “+”)
} function extend(e) {
var t = Array.prototype.slice;
return t.call(arguments, 1).forEach(function (t) { for (key in t) t[key] !== undefined && (e[key] = t[key]) }), e
} var jsonpID = 0, document = window.document, key, name, rscript = /TDLOCAL”))return;this._addCookie(“”);if(!window.localStorage)return},addCookie:function(e,t){if(window.localStorage)return;this.create();var n=this.cookieList();n[e]=t;var r=[];for(var i in n)r.push(i+” = “+n[i]);this._addCookie(r.join(“; “))},_setCookie:function(){var e=this.cookieList();cookie(“TD_LOCAL”,””,{expires:1095,path:” / “,domain:location.hostname})},_addCookie:function(e){cookie(“TD_LOCAL”,e,{expires:1095,path:” / “,domain:location.hostname})},_getCookie:function(e){var t=this.cookieList();if(t&&t[e])return t[e]},delCookie:function(e){},cookieList:function(){var e=cookie(“TD_LOCAL”);return this.format(e)},addLocalStorage:function(e,t){if(!window.localStorage)return;e==”sessionId”&&window.sessionStorage?sessionStorage.setItem(“TD“+e,t):localStorage[“TD_”+e]=t},delLocalStorage:function(e){if(!window.localStorage)return;localStorage.removeItem(“TD“+e)},getLocalStorage:function(e){if(!window.localStorage)return;return e==”sessionId”&&window.sessionStorage?sessionStorage.getItem(“__TD“+e):localStorage[“TD_”+e]},format:function(e){var t={};if(!e)return t;var n=e.split(“; “),r=n.length;for(var i=0;i<r;i++){var s=n[i].split(“ = “);if(s.length!=2)continue;t[s[0]]=s[1]}return t}},TalkingData.sessionStorage={add:function(e,t){if(!window.sessionStorage)return;sessionStorage.setItem(“TD“+e,t)},get:function(e){return sessionStorage.getItem(“__TD“+e)},remove:function(e){sessionStorage.removeItem(“TD_”+e)}};var TDXHR,TDONOFF=!0,TDNUMBER=!1;UrlRequest.prototype={getAjax:function(e,t,n,r,i){var s=this,o={invoke:function(s){if(navigator.userAgent.indexOf(“MSIE 9.0”)>0){var o=navigator.appVersion.split(“; “)[1].replace(/[ ]/g,””);if(o==”MSIE6.0”||o==”MSIE7.0”){alert(“no support IE6, IE7”);return}if(window.XDomainRequest){var u=new XDomainRequest;u?(s.error&&typeof s.error==”function”&&(u.onerror=function(){s.error()}),s.timeout&&typeof s.timeout==”function”&&(u.ontimeout=function(){s.timeout()}),s.success&&typeof s.success==”function”&&(u.onload=function(){s.dataType?s.dataType.toLowerCase()==”json”&&s.success(JSON.parse(u.responseText)):s.success(u.responseText)}),u.open(s.type,s.url),u.send(s.param)):alert(“Failed to create XDomainRequest”)}}else{if(!TDONOFF){TDNUMBER=!0;return}localData.add(“td - unique”,”true”),TDONOFF=!1,TDXHR=$$.ajax({type:e,url:t,data:JSON.stringify(n),dataType:”text”,success:r,error:i,complete:function(){TDXHR=undefined,TDONOFF=!0,TDNUMBER&&(DTMgr.getAjax(),TDNUMBER=!1),localData.delLocalStorage(“td - unique”)}})}}};o.invoke({url:this.url,type:”POST”,param:JSON.stringify(n),success:r})},set:function(e,t,n){this.opts=e,this.send(t,n)},send:function(e,t){this.getAjax(“post”,this.url,this.opts,e,t)}},function(e){e.TDBASE=e.TDBASE||{},TDBASE.cacheName=”cacheList”,TDBASE.unique=function(e){e.sort();var t=[e[0]];for(var n=1;n