gio-miniprogram-sdk 4.4.0 → 4.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/alipay.js +1 -1
- package/dist/baidu.js +1 -1
- package/dist/bytedance.js +1 -1
- package/dist/jingdong.js +1 -1
- package/dist/kuaishou.js +1 -1
- package/dist/plugins/gioABTest.js +1 -1
- package/dist/plugins/gioCompress.js +1 -1
- package/dist/plugins/gioEventAutoTracking.js +1 -1
- package/dist/plugins/gioImpressionTracking.js +1 -1
- package/dist/plugins/gioMultipleInstances.js +1 -1
- package/dist/plugins/gioPerformance.js +1 -1
- package/dist/qq.js +1 -1
- package/dist/quickapp.js +1 -1
- package/dist/taobao.js +1 -1
- package/dist/taro.js +1 -1
- package/dist/uniapp.js +1 -1
- package/dist/wechat.js +1 -1
- package/dist/xiaohongshu.js +1 -1
- package/package.json +1 -1
- package/src/adapters/gioUniAppAdapter.ts +324 -113
- package/src/core/dataStore/eventHooks/appEffects.ts +11 -9
- package/src/core/dataStore/eventHooks/index.ts +120 -80
- package/src/core/dataStore/eventHooks/minipPage.ts +77 -80
- package/src/core/dataStore/eventHooks/pageEffects.ts +8 -2
- package/src/core/dataStore/index.ts +1 -1
- package/src/minipInstance/my.ts +34 -1
- package/src/platformConfig/base.ts +1 -1
- package/src/platformConfig/framework.ts +2 -0
- package/src/platformConfig/my.ts +1 -0
- package/src/platformConfig/xhs.ts +9 -2
- package/src/plugins/gioEventAutoTracking.ts +29 -5
- package/src/plugins/gioImpressionTracking.ts +6 -3
- package/src/types/eventHooks.ts +5 -5
- package/src/types/minipInstance.ts +5 -0
- package/src/utils/tools.ts +54 -14
- package/src/utils/verifiers.ts +1 -1
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
import { ID_REG, SWAN_XID_REG, TARO_XID_REG } from '@@/constants/regex';
|
|
6
6
|
import { EventTarget } from '@@/types/eventHooks';
|
|
7
7
|
import { GrowingIOType } from '@@/types/growingIO';
|
|
8
|
-
import { consoleText, getExtraData, isTaro3 } from '@@/utils/tools';
|
|
8
|
+
import { consoleText, getExtraData, isTaro3, niceTry } from '@@/utils/tools';
|
|
9
9
|
import EMIT_MSG from '@@/constants/emitMsg';
|
|
10
10
|
import { isEmpty } from '@@/utils/glodash';
|
|
11
|
+
import qs from 'querystringify';
|
|
11
12
|
|
|
12
13
|
let ut;
|
|
13
14
|
class GioEventAutoTracking {
|
|
@@ -200,15 +201,37 @@ class GioEventAutoTracking {
|
|
|
200
201
|
});
|
|
201
202
|
};
|
|
202
203
|
|
|
204
|
+
// 抖音小程序获取圈选地址
|
|
205
|
+
getCircleUrlByTT = ({ query }: any) => {
|
|
206
|
+
if (query.q && query.url) {
|
|
207
|
+
const urlFromQ = niceTry(
|
|
208
|
+
() => JSON.parse(query.q)?.gdpCircleRoomCollectUrl
|
|
209
|
+
);
|
|
210
|
+
if (urlFromQ) {
|
|
211
|
+
return urlFromQ;
|
|
212
|
+
} else {
|
|
213
|
+
return (
|
|
214
|
+
niceTry(
|
|
215
|
+
() => qs.parse(query.url.split('?')[1])?.gdpCircleRoomCollectUrl
|
|
216
|
+
) ?? ''
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
|
|
203
222
|
// 初始化圈选
|
|
204
223
|
circleInit = (params: any) => {
|
|
205
224
|
const { emitter } = this.growingIO;
|
|
206
|
-
const extraData = getExtraData(
|
|
225
|
+
const extraData = getExtraData(
|
|
226
|
+
params.referrerInfo?.extraData || params.query || {}
|
|
227
|
+
);
|
|
207
228
|
// 额外参数中存在gdpCircleRoomCollectUrl,则表示是圈选的跳转,进入圈选状态
|
|
208
|
-
|
|
229
|
+
const gdpCircleRoomCollectUrl =
|
|
230
|
+
extraData?.gdpCircleRoomCollectUrl || this.getCircleUrlByTT(params);
|
|
231
|
+
if (gdpCircleRoomCollectUrl) {
|
|
209
232
|
// 圈选初始化
|
|
210
|
-
if (this.circleServerUrl !==
|
|
211
|
-
this.circleServerUrl =
|
|
233
|
+
if (this.circleServerUrl !== gdpCircleRoomCollectUrl) {
|
|
234
|
+
this.circleServerUrl = gdpCircleRoomCollectUrl;
|
|
212
235
|
// 提前移除一次事件发送监听,防止重复监听
|
|
213
236
|
emitter.off(EMIT_MSG.ON_SEND_AFTER, this.collectorSendFn);
|
|
214
237
|
// 添加事件发送监听,用于发送圈选事件
|
|
@@ -280,6 +303,7 @@ class GioEventAutoTracking {
|
|
|
280
303
|
}
|
|
281
304
|
}
|
|
282
305
|
});
|
|
306
|
+
console.log(requestData, '----->circleRequest');
|
|
283
307
|
};
|
|
284
308
|
}
|
|
285
309
|
|
|
@@ -108,7 +108,9 @@ class GioImpressionTracking {
|
|
|
108
108
|
? toString(hashCode(collectTarget.route)) // swan page
|
|
109
109
|
: collectTarget.__nodeId__; // swan component
|
|
110
110
|
case 'xhs':
|
|
111
|
-
return collectTarget.
|
|
111
|
+
return collectTarget.route
|
|
112
|
+
? collectTarget.pageId // xhs page
|
|
113
|
+
: collectTarget.componentId; // xhs component
|
|
112
114
|
default:
|
|
113
115
|
break;
|
|
114
116
|
}
|
|
@@ -119,9 +121,10 @@ class GioImpressionTracking {
|
|
|
119
121
|
const { gioPlatform } = this.growingIO;
|
|
120
122
|
if (
|
|
121
123
|
(gioPlatform === 'tt' && collectTarget.__nodeId__) ||
|
|
122
|
-
(gioPlatform === 'ks' && collectTarget.is)
|
|
124
|
+
(gioPlatform === 'ks' && collectTarget.is) ||
|
|
125
|
+
(gioPlatform === 'xhs' && collectTarget.componentId)
|
|
123
126
|
) {
|
|
124
|
-
//
|
|
127
|
+
// 字节/快手/小红书小程序页面监听时可以拿到自定义组件一次性完成监听,所以组件的节点实例不再处理
|
|
125
128
|
return false;
|
|
126
129
|
}
|
|
127
130
|
const nodeId = this.getNodeId(collectTarget);
|
package/src/types/eventHooks.ts
CHANGED
|
@@ -76,7 +76,7 @@ export interface PageShareResult {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
export interface MinipPageType {
|
|
79
|
-
|
|
79
|
+
queryOptions: any;
|
|
80
80
|
configuredTitle: any;
|
|
81
81
|
pageProps: any;
|
|
82
82
|
lastLifecycle: string;
|
|
@@ -85,12 +85,12 @@ export interface MinipPageType {
|
|
|
85
85
|
getPagePath: () => string;
|
|
86
86
|
getPageQuery: () => string;
|
|
87
87
|
getPageTitle: (trackingId?: string) => string;
|
|
88
|
-
qsQuery: (query: any) => string;
|
|
89
88
|
getReferralPage: (trackingId: string) => string;
|
|
90
89
|
buildShareQuery: (result: PageShareResult) => [string, string];
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
updateShareResult: (
|
|
91
|
+
result: PageShareResult,
|
|
92
|
+
fillParams?: boolean
|
|
93
|
+
) => PageShareResult;
|
|
94
94
|
eventSetPageProps: (trackingId: string, event: EVENT) => any;
|
|
95
95
|
}
|
|
96
96
|
|
package/src/utils/tools.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
find,
|
|
5
5
|
forEach,
|
|
6
6
|
formatDate,
|
|
7
|
+
has,
|
|
7
8
|
head,
|
|
8
9
|
isArray,
|
|
9
10
|
isDate,
|
|
@@ -16,7 +17,6 @@ import {
|
|
|
16
17
|
split,
|
|
17
18
|
startsWith,
|
|
18
19
|
toString,
|
|
19
|
-
typeOf,
|
|
20
20
|
unset
|
|
21
21
|
} from '@@/utils/glodash';
|
|
22
22
|
|
|
@@ -454,18 +454,58 @@ export const getExtraData = (data: any) => {
|
|
|
454
454
|
}
|
|
455
455
|
};
|
|
456
456
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
457
|
+
/**
|
|
458
|
+
* 清理参数中的非法字段
|
|
459
|
+
* @param originQuery 原始查询参数,可以是对象或参数字符串
|
|
460
|
+
* @param extraData 额外数据,可以是对象或参数字符串
|
|
461
|
+
* @returns 清理后的纯净参数对象
|
|
462
|
+
*/
|
|
463
|
+
const dirtyKey = [
|
|
464
|
+
'wxShoppingListScene',
|
|
465
|
+
'$taroTimestamp',
|
|
466
|
+
'gdpCircleRoomCollectUrl'
|
|
467
|
+
];
|
|
468
|
+
export const getPureParams = (originQuery: any = {}, extraData: any = {}) => {
|
|
469
|
+
// 处理originQuery可能是字符串的情况
|
|
470
|
+
const parsedOriginQuery =
|
|
471
|
+
typeof originQuery === 'string' ? qsParse(originQuery) : originQuery || {};
|
|
472
|
+
|
|
473
|
+
// 递归清理函数
|
|
474
|
+
function cleanObject(obj, needCompare) {
|
|
475
|
+
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
476
|
+
return obj;
|
|
468
477
|
}
|
|
469
|
-
|
|
470
|
-
|
|
478
|
+
|
|
479
|
+
const result = {};
|
|
480
|
+
|
|
481
|
+
keys(obj).forEach((key) => {
|
|
482
|
+
// 检查key是否包含dirtyKey中的任何字符串
|
|
483
|
+
const isKeyDirty = dirtyKey.some((dirty) => key.includes(dirty));
|
|
484
|
+
const isKeyExist = has(parsedOriginQuery, key);
|
|
485
|
+
|
|
486
|
+
if (!isKeyDirty && (needCompare ? !isKeyExist : true)) {
|
|
487
|
+
const value = obj[key];
|
|
488
|
+
|
|
489
|
+
// 检查value是否是字符串且包含dirtyKey中的任何字符串
|
|
490
|
+
if (typeof value === 'string') {
|
|
491
|
+
const isValueDirty = dirtyKey.some((dirty) => value.includes(dirty));
|
|
492
|
+
if (!isValueDirty) {
|
|
493
|
+
result[key] = value;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
// 如果是数字和布尔值,直接保留,其他类型丢弃
|
|
497
|
+
else if (typeof value === 'number' || typeof value === 'boolean') {
|
|
498
|
+
result[key] = value;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
return result;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
return Object.assign(
|
|
507
|
+
{},
|
|
508
|
+
cleanObject(parsedOriginQuery, false),
|
|
509
|
+
cleanObject(extraData, true)
|
|
510
|
+
);
|
|
471
511
|
};
|
package/src/utils/verifiers.ts
CHANGED
|
@@ -27,7 +27,7 @@ export const initialCheck = (growingIO: GrowingIOType, args: any) => {
|
|
|
27
27
|
const userOptions = (args.length === 4 ? args[3] : args[2]) || {};
|
|
28
28
|
if (!projectId || !dataSourceId) {
|
|
29
29
|
consoleText(
|
|
30
|
-
'SDK初始化失败,请使用 gdp("init", "您的GrowingIO项目 accountId", "您项目的 dataSourceId", "您的小程序 AppId(可选)", options: {
|
|
30
|
+
'SDK初始化失败,请使用 gdp("init", "您的GrowingIO项目 accountId", "您项目的 dataSourceId", "您的小程序 AppId(可选)", options: { serverUrl: "您的数据上报地址" }); 进行初始化!',
|
|
31
31
|
'error'
|
|
32
32
|
);
|
|
33
33
|
return false;
|