js sdk demo java_094实战 关于js SDK的程序,java SDK的程序

1 (function() {2 var CookieUtil ={3 //get the cookie of the key is name

4 get : function(name) {5 var cookieName = encodeURIComponent(name) + "=", cookieStart =document.cookie6 .indexOf(cookieName), cookieValue = null;7 if (cookieStart > -1) {8 var cookieEnd = document.cookie.indexOf(";", cookieStart);9 if (cookieEnd == -1) {10 cookieEnd =document.cookie.length;11 }12 cookieValue =decodeURIComponent(document.cookie.substring(13 cookieStart +cookieName.length, cookieEnd));14 }15 returncookieValue;16 },17 //set the name/value pair to browser cookie

18 set : function(name, value, expires, path, domain, secure) {19 var cookieText = encodeURIComponent(name) + "="

20 +encodeURIComponent(value);21

22 if(expires) {23 //set the expires time

24 var expiresTime = newDate();25 expiresTime.setTime(expires);26 cookieText += ";expires=" +expiresTime.toGMTString();27 }28

29 if(path) {30 cookieText += ";path=" +path;31 }32

33 if(domain) {34 cookieText += ";domain=" +domain;35 }36

37 if(secure) {38 cookieText += ";secure";39 }40

41 document.cookie =cookieText;42 },43 setExt : function(name, value) {44 this.set(name, value, new Date().getTime() + 315360000000, "/");45 }46 };47

48 //主体,其实就是tracker js

49 var tracker ={50 //config

51 clientConfig : {52 //TODO 这里的url需要传入具体的地址

53 serverUrl : "http://linux-hadoop3.ibeifeng.com/BEIfeng.gif",54 sessionTimeout : 360, //360s -> 6min 指定会话的过期时间,指的是操作停留最多的时间

55 maxWaitTime : 3600, //3600s -> 60min -> 1h 指定的是单页面的最多停留时间,当前这个参数无效

56 ver : "1"

57 },58

59 cookieExpiresTime : 315360000000, //cookie过期时间,10年

60

61 columns : {62 //发送到服务器的列名称

63 eventName : "en",64 version : "ver",65 platform : "pl",66 sdk : "sdk",67 uuid : "u_ud",68 memberId : "u_mid",69 sessionId : "u_sd",70 clientTime : "c_time",71 language : "l",72 userAgent : "b_iev",73 resolution : "b_rst",74 currentUrl : "p_url",75 referrerUrl : "p_ref",76 title : "tt",77 orderId : "oid",78 orderName : "on",79 currencyAmount : "cua",80 currencyType : "cut",81 paymentType : "pt",82 category : "ca",83 action : "ac",84 kv : "kv_",85 duration : "du"

86 },87

88 keys : {89 pageView : "e_pv",90 chargeRequestEvent : "e_crt",91 launch : "e_l",92 eventDurationEvent : "e_e",93 sid : "bftrack_sid",94 uuid : "bftrack_uuid",95 mid : "bftrack_mid",96 preVisitTime : "bftrack_previsit",97

98 },99

100 /**101 * 获取会话id102 */

103 getSid : function() {104 return CookieUtil.get(this.keys.sid);105 },106

107 /**108 * 保存会话id到cookie109 */

110 setSid : function(sid) {111 if(sid) {112 CookieUtil.setExt(this.keys.sid, sid);113 }114 },115

116 /**117 * 获取uuid,从cookie中118 */

119 getUuid : function() {120 return CookieUtil.get(this.keys.uuid);121 },122

123 /**124 * 保存uuid到cookie125 */

126 setUuid : function(uuid) {127 if(uuid) {128 CookieUtil.setExt(this.keys.uuid, uuid);129 }130 },131

132 /**133 * 获取memberID134 */

135 getMemberId : function() {136 return CookieUtil.get(this.keys.mid);137 },138

139 /**140 * 设置mid141 */

142 setMemberId : function(mid) {143 if(mid) {144 CookieUtil.setExt(this.keys.mid, mid);145 }146 },147

148 //入口方法

149 startSession : function() {150 //加载js就触发的方法

151 if (this.getSid()) {152 //会话id存在,表示uuid也存在

153 if (this.isSessionTimeout()) {154 //会话过期,产生新的会话

155 this.createNewSession();156 } else{157 //会话没有过期,更新最近访问时间

158 this.updatePreVisitTime(newDate().getTime());159 }160 } else{161 //会话id不存在,表示uuid也不存在

162 this.createNewSession();163 }164 this.onPageView();165 },166

167 onLaunch : function() {168 //触发launch事件

169 var launch ={};170 launch[this.columns.eventName] = this.keys.launch; //设置事件名称

171 this.setCommonColumns(launch); //设置公用columns

172 this.sendDataToServer(this.parseParam(launch)); //最终发送编码后的数据

173 },174

175 onPageView : function() {176 //触发page view事件

177 if (this.preCallApi()) {178 var time = newDate().getTime();179 var pageviewEvent ={};180 pageviewEvent[this.columns.eventName] = this.keys.pageView;181 pageviewEvent[this.columns.currentUrl] = window.location.href; //设置当前url

182 pageviewEvent[this.columns.referrerUrl] = document.referrer; //设置前一个页面的url

183 pageviewEvent[this.columns.title] = document.title; //设置title

184 this.setCommonColumns(pageviewEvent); //设置公用columns

185 this.sendDataToServer(this.parseParam(pageviewEvent)); //最终发送编码后的数据

186 this.updatePreVisitTime(time); //更新最近访问时间

187 }188 },189

190 onChargeRequest : function(orderId, name, currencyAmount, currencyType,191 paymentType) {192 //触发订单产生事件

193 if (this.preCallApi()) {194 if (!orderId || !currencyType || !paymentType) {195 this.log("订单id、货币类型以及支付方式不能为空");196 return;197 }198

199 if (typeof (currencyAmount) == "number") {200 //金额必须是数字

201 var time = newDate().getTime();202 var chargeRequestEvent ={};203 chargeRequestEvent[this.columns.eventName] = this.keys.chargeRequestEvent;204 chargeRequestEvent[this.columns.orderId] =orderId;205 chargeRequestEvent[this.columns.orderName] =name;206 chargeRequestEvent[this.columns.currencyAmount] =currencyAmount;207 chargeRequestEvent[this.columns.currencyType] =currencyType;208 chargeRequestEvent[this.columns.paymentType] =paymentType;209 this.setCommonColumns(chargeRequestEvent); //设置公用columns

210 this.sendDataToServer(this.parseParam(chargeRequestEvent)); //最终发送编码后的数据ss

211 this.updatePreVisitTime(time);212 } else{213 this.log("订单金额必须是数字");214 return;215 }216 }217 },218

219 onEventDuration : function(category, action, map, duration) {220 //触发event事件

221 if (this.preCallApi()) {222 if (category &&action) {223 var time = newDate().getTime();224 var event ={};225 event[this.columns.eventName] = this.keys.eventDurationEvent;226 event[this.columns.category] =category;227 event[this.columns.action] =action;228 if(map) {229 //map如果不为空,进行内容的添加

230 for ( var k inmap) {231 //循环key

232 if (k &&map[k]) {233 //当key和value不为空的时候,进行添加操作

234 event[this.columns.kv + k] = map[k]; //key添加前缀"kv_"

235 }236 }237 }238 if(duration) {239 event[this.columns.duration] = duration; //当duration不为0的时候进行添加

240 }241 this.setCommonColumns(event); //设置公用columns

242 this.sendDataToServer(this.parseParam(event)); //最终发送编码后的数据ss

243 this.updatePreVisitTime(time);244 } else{245 this.log("category和action不能为空");246 }247 }248 },249

250 /**251 * 执行对外方法前必须执行的方法252 */

253 preCallApi : function() {254 if (this.isSessionTimeout()) {255 //如果为true,表示需要新建

256 this.startSession();257 } else{258 this.updatePreVisitTime(newDate().getTime());259 }260 return true;261 },262

263 sendDataToServer : function(data) {264 //发送数据data到服务器,其中data是一个字符串

265 //TODO:发送以前发送失败的数据

266 var that = this;267 var i2 = new Image(1, 1);268 i2.onerror = function() {269 //这里可以进行重试操作

270 //当请求失败的情况下,执行这块的代码,可以将数据保存到local stroage中,下次再重新发送数据

271 };272 //给定图片的请求url

273 i2.src = this.clientConfig.serverUrl + "?" +data;274 },275

276 /**277 * 往data中添加发送到日志收集服务器的公用部分278 */

279 setCommonColumns : function(data) {280 data[this.columns.version] = this.clientConfig.ver;281 data[this.columns.platform] = "website";282 data[this.columns.sdk] = "js";283 data[this.columns.uuid] = this.getUuid(); //设置用户id

284 data[this.columns.memberId] = this.getMemberId(); //设置会员id

285 data[this.columns.sessionId] = this.getSid(); //设置sid

286 data[this.columns.clientTime] = new Date().getTime(); //设置客户端时间

287 data[this.columns.language] = window.navigator.language; //设置浏览器语言

288 data[this.columns.userAgent] = window.navigator.userAgent; //设置浏览器类型

289 data[this.columns.resolution] = screen.width + "*" + screen.height; //设置浏览器分辨率

290 },291

292 /**293 * 创建新的会员,并判断是否是第一次访问页面,如果是,进行launch事件的发送。294 */

295 createNewSession : function() {296 var time = new Date().getTime(); //获取当前操作时间

297 //1. 进行会话更新操作

298 var sid = this.generateId(); //产生一个session id

299 this.setSid(sid);300 this.updatePreVisitTime(time); //更新最近访问时间

301 //2. 进行uuid查看操作

302 if (!this.getUuid()) {303 //uuid不存在,先创建uuid,然后保存到cookie,最后触发launch事件

304 var uuid = this.generateId(); //产品uuid

305 this.setUuid(uuid);306 this.onLaunch(); //触发launch事件

307 }308 },309

310 /**311 * 参数编码返回字符串312 */

313 parseParam : function(data) {314 var params = "";315 for ( var e indata) {316 if (e &&data[e]) {317 //对key和value进行编码操作

318 params += encodeURIComponent(e) + "="

319 + encodeURIComponent(data[e]) + "&";320 }321 }322 if(params) {323 return params.substring(0, params.length - 1);324 } else{325 returnparams;326 }327 },328

329 /**330 * 产生uuid
331 * UUID的产生逻辑,可以参考Java中UUID的生产代码332 */

333 generateId : function() {334 var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';335 var tmpid =[];336 varr;337 tmpid[8] = tmpid[13] = tmpid[18] = tmpid[23] = '-';338 tmpid[14] = '4';339

340 for (i = 0; i < 36; i++) {341 if (!tmpid[i]) {342 r = 0 | Math.random() * 16;343 tmpid[i] = chars[(i == 19) ? (r & 0x3) | 0x8: r];344 }345 }346 return tmpid.join('');347 },348

349 /**350 * 判断这个会话是否过期,查看当前时间和最近访问时间间隔时间是否小于this.clientConfig.sessionTimeout
351 * 如果是小于,返回false;否则返回true。352 */

353 isSessionTimeout : function() {354 var time = newDate().getTime();355 var preTime = CookieUtil.get(this.keys.preVisitTime);356 if(preTime) {357 //最近访问时间存在,那么进行区间判断

358 return time - preTime > this.clientConfig.sessionTimeout * 1000;359 }360 return true;361 },362

363 /**364 * 更新最近访问时间365 */

366 updatePreVisitTime : function(time) {367 CookieUtil.setExt(this.keys.preVisitTime, time);368 },369

370 /**371 * 打印日志372 */

373 log : function(msg) {374 console.log(msg);375 },376

377 };378

379 //对外暴露的方法名称

380 window.__AE__ ={381 startSession : function() {382 tracker.startSession();383 },384 onPageView : function() {385 tracker.onPageView();386 },387 onChargeRequest : function(orderId, name, currencyAmount, currencyType,388 paymentType) {389 tracker.onChargeRequest(orderId, name, currencyAmount,390 currencyType, paymentType);391 },392 onEventDuration : function(category, action, map, duration) {393 tracker.onEventDuration(category, action, map, duration);394 },395 setMemberId : function(mid) {396 tracker.setMemberId(mid);397 }398 };399

400 //自动加载方法

401 var autoLoad = function() {402 //进行参数设置

403 var _aelog_ = _aelog_ || window._aelog_ ||[];404 var memberId = null;405 for (i = 0; i < _aelog_.length; i++) {406 _aelog_[i][0] === "memberId" && (memberId = _aelog_[i][1]);407 }408 //根据是给定memberid,设置memberid的值

409 memberId &&__AE__.setMemberId(memberId);410 //启动session

411 __AE__.startSession();412 };413

414 //调用

415 autoLoad();416 })();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值