Skip to content

Commit 5e568db

Browse files
author
shengyonggen
committed
增加自动采集query里面的utm值,自动采集referrerInfo.extraData里的utm值,show_log可以关闭log显示,autoTrack里的预置事件可以自定义属性
1 parent f1e94a3 commit 5e568db

File tree

3 files changed

+94
-27
lines changed

3 files changed

+94
-27
lines changed

sensorsdata.js

Lines changed: 91 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var ArrayProto = Array.prototype,
2323
slice = ArrayProto.slice,
2424
toString = ObjProto.toString,
2525
hasOwnProperty = ObjProto.hasOwnProperty,
26-
LIB_VERSION = '1.3',
26+
LIB_VERSION = '1.4',
2727
LIB_NAME = 'MiniProgram';
2828

2929
var source_channel_standard = 'utm_source utm_medium utm_campaign utm_content utm_term';
@@ -95,11 +95,13 @@ sa.lib_version = LIB_VERSION;
9595

9696
var logger = typeof logger === 'object' ? logger : {};
9797
logger.info = function () {
98-
if (typeof console === 'object' && console.log) {
99-
try {
100-
return console.log.apply(console, arguments);
101-
} catch (e) {
102-
console.log(arguments[0]);
98+
if(sa.para.show_log){
99+
if (typeof console === 'object' && console.log) {
100+
try {
101+
return console.log.apply(console, arguments);
102+
} catch (e) {
103+
console.log(arguments[0]);
104+
}
103105
}
104106
}
105107
};
@@ -503,7 +505,6 @@ _.base64Encode = function (data) {
503505
};
504506

505507
_.getQueryParam = function (url, param) {
506-
url = _.decodeURIComponent(url);
507508
var regexS = "[\\?&]" + param + "=([^&#]*)",
508509
regex = new RegExp(regexS),
509510
results = regex.exec(url);
@@ -556,12 +557,31 @@ _.getPrefixUtm = function (utms, prefix, prefix_add) {
556557
};
557558
}
558559

560+
_.convertObjToParam = function(obj){
561+
var arr = [];
562+
for(var i in obj){
563+
arr.push(i + '=' + obj[i]);
564+
}
565+
return arr.join('&');
566+
}
567+
559568
_.getSource = function (url) {
569+
if(_.isObject(url)){
570+
if(_.isEmptyObject(url)){
571+
return {};
572+
}else{
573+
url = _.convertObjToParam(url);
574+
url = '?' + url;
575+
}
576+
}else{
577+
url = _.decodeURIComponent(url);
578+
}
579+
560580
var campagin_w = source_channel_standard.split(' ');
561581
var campaign_keywords = source_channel_standard.split(' ');
562582
var kw = '';
563583
var params = {};
564-
url = _.decodeURIComponent(url);
584+
565585
url = url.split('?');
566586
if (url.length === 2) {
567587
url = url[1];
@@ -576,15 +596,34 @@ _.getSource = function (url) {
576596
}
577597
_.each(campaign_keywords, function (kwkey) {
578598
kw = _.getQueryParam(url, kwkey);
599+
kw = _.decodeURIComponent(kw);
579600
if (kw.length) {
580601
if (_.include(campagin_w, kwkey)) {
581602
params[kwkey] = kw;
582603
}
583604
}
584605
});
606+
585607
return params;
586608
};
587609

610+
_.getObjFromQuery = function(str){
611+
var query = str.split('?');
612+
var arr = [];
613+
var obj = {};
614+
if(query && query[1]){
615+
_.each(query[1].split('&'), function(value){
616+
var arr = value.split('=');
617+
if(arr[0] && arr[1]){
618+
obj[arr[0]] = arr[1];
619+
}
620+
});
621+
}else{
622+
return {};
623+
}
624+
return obj;
625+
};
626+
588627
_.getUtm = function(url,prefix1,prefix2){
589628
var utms = _.getSource(url);
590629
var pre1 = {};
@@ -611,6 +650,29 @@ _.getMPScene = function (key) {
611650
key = String(key);
612651
return mp_scene[key] || key;
613652
};
653+
654+
_.setUtm = function(para,prop){
655+
var query = {};
656+
if (para && _.isObject(para.query)) {
657+
query = _.extend({}, para.query);
658+
if (para.query.q) {
659+
_.extend(query, _.getObjFromQuery(para.query.q));
660+
}
661+
}
662+
if (para && _.isObject(para.referrerInfo) && para.referrerInfo.extraData) {
663+
var extraQuery = {};
664+
if (_.isObject(para.referrerInfo.extraData) && !_.isEmptyObject(para.referrerInfo.extraData)){
665+
extraQuery = para.referrerInfo.extraData;
666+
} else if (_.isJSONString(para.referrerInfo.extraData)) {
667+
extraQuery = JSON.parse(para.referrerInfo.extraData);
668+
}
669+
_.extend(query, extraQuery);
670+
}
671+
var utms = _.getUtm(query, '$', '$latest_');
672+
_.extend(prop, utms.pre1);
673+
return utms;
674+
};
675+
614676
_.info = {
615677
properties: {
616678
$lib: LIB_NAME,
@@ -1095,22 +1157,21 @@ function e(t, n, o) {
10951157
function appLaunch(para) {
10961158
this[sa.para.name] = sa;
10971159
var prop = {};
1098-
10991160
if (para && para.path) {
11001161
prop.$url_path = para.path;
11011162
}
1102-
// 暂时只解析传统网页渠道的query
1103-
if (para && _.isObject(para.query) && para.query.q) {
1104-
var utms = _.getUtm(para.query.q,'$','$latest_');
1105-
_.extend(prop, utms.pre1);
1106-
if (is_first_launch){
1163+
var utms = _.setUtm(para,prop);
1164+
if (is_first_launch) {
1165+
if (!_.isEmptyObject(utms.pre1)){
11071166
sa.setOnceProfile(utms.pre1);
11081167
}
1168+
}
1169+
if (!_.isEmptyObject(utms.pre2)) {
11091170
sa.registerApp(utms.pre2);
11101171
}
11111172
prop.$scene = _.getMPScene(para.scene);
11121173
// console.log('app_launch', JSON.stringify(arguments));
1113-
if (sa.para.autoTrack && sa.para.autoTrack.appLaunch === true) {
1174+
if (sa.para.autoTrack && sa.para.autoTrack.appLaunch) {
11141175
sa.autoTrackCustom('appLaunch', prop, '$MPLaunch');
11151176
}
11161177

@@ -1126,26 +1187,27 @@ function appShow(para) {
11261187
prop.$url_path = para.path;
11271188
}
11281189

1129-
// 暂时只解析传统网页渠道的query
1130-
if (para && _.isObject(para.query) && para.query.q) {
1131-
var utms = _.getUtm(para.query.q, '$', '$latest_');
1132-
_.extend(prop, utms.pre1);
1190+
var utms = _.setUtm(para, prop);
1191+
1192+
if (!_.isEmptyObject(utms.pre2)) {
11331193
sa.registerApp(utms.pre2);
11341194
}
1195+
11351196
prop.$scene = _.getMPScene(para.scene);
1136-
if (sa.para.autoTrack && sa.para.autoTrack.appShow === true) {
1197+
if (sa.para.autoTrack && sa.para.autoTrack.appShow) {
11371198
sa.autoTrackCustom('appShow',prop,'$MPShow');
11381199
}
11391200
};
11401201

11411202
function appHide() {
1203+
1204+
11421205
var current_time = (new Date()).getTime();
11431206
var prop = {};
11441207
if (mpshow_time && (current_time - mpshow_time > 0) && ((current_time - mpshow_time)/3600000 < 24) ) {
11451208
prop.event_duration = (current_time - mpshow_time)/1000;
11461209
}
1147-
if (sa.para.autoTrack && sa.para.autoTrack.appHide === true) {
1148-
1210+
if (sa.para.autoTrack && sa.para.autoTrack.appHide) {
11491211
sa.autoTrackCustom('appHide', prop, '$MPHide');
11501212
}
11511213
// console.log('app_hide', JSON.stringify(arguments));
@@ -1205,9 +1267,13 @@ function pageOnShareAppMessage(n, e) {
12051267
var v = Page;
12061268
Page = function (t) {
12071269
e(t, "onLoad", function (para) {
1208-
// 暂时只解析传统网页渠道的query
1209-
if (para && _.isObject(para) && para.q) {
1210-
this.sensors_mp_load_utm = _.getUtm(para.q,'$').pre1;
1270+
if (para && _.isObject(para)) {
1271+
var query = _.extend({}, para);
1272+
if (para.q) {
1273+
_.extend(query, _.getObjFromQuery(para.q));
1274+
}
1275+
var utms = _.getUtm(query, '$', '$latest_');
1276+
this.sensors_mp_load_utm = utms.pre1;
12111277
}
12121278
});
12131279

0 commit comments

Comments
 (0)