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.
@@ -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(params.referrerInfo?.extraData);
225
+ const extraData = getExtraData(
226
+ params.referrerInfo?.extraData || params.query || {}
227
+ );
207
228
  // 额外参数中存在gdpCircleRoomCollectUrl,则表示是圈选的跳转,进入圈选状态
208
- if (extraData?.gdpCircleRoomCollectUrl) {
229
+ const gdpCircleRoomCollectUrl =
230
+ extraData?.gdpCircleRoomCollectUrl || this.getCircleUrlByTT(params);
231
+ if (gdpCircleRoomCollectUrl) {
209
232
  // 圈选初始化
210
- if (this.circleServerUrl !== extraData?.gdpCircleRoomCollectUrl) {
211
- this.circleServerUrl = extraData?.gdpCircleRoomCollectUrl;
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.pageId;
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);
@@ -76,7 +76,7 @@ export interface PageShareResult {
76
76
  }
77
77
 
78
78
  export interface MinipPageType {
79
- queryOption: any;
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
- updateAppMessageResult: (result: PageShareResult) => PageShareResult;
92
- updateTimelineResult: (result: PageShareResult) => PageShareResult;
93
- updateAddFavoritesResult: (result: PageShareResult) => PageShareResult;
90
+ updateShareResult: (
91
+ result: PageShareResult,
92
+ fillParams?: boolean
93
+ ) => PageShareResult;
94
94
  eventSetPageProps: (trackingId: string, event: EVENT) => any;
95
95
  }
96
96
 
@@ -125,4 +125,9 @@ export interface MinipInstanceType {
125
125
  getSetting?: () => any;
126
126
  // 监听网络变更
127
127
  setNetworkStatusListener?: () => any;
128
+ // 执行特有的分享promise
129
+ handleSharePromise?: (
130
+ originResult: any,
131
+ handlePromiseResult: () => void
132
+ ) => any;
128
133
  }
@@ -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
- // 获取额外的启动参数并合并进query
458
- export const getLaunchQuery = (originQuery: any = {}, data: any = {}) => {
459
- const validData = {};
460
- const extraData = getExtraData(data);
461
- keys(extraData).forEach((k: string) => {
462
- // 排除掉新版圈选用的标记字段
463
- if (
464
- k !== 'gdpCircleRoomCollectUrl' &&
465
- ['string', 'number', 'boolean'].includes(typeOf(extraData[k]))
466
- ) {
467
- validData[k] = extraData[k];
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
- return Object.assign({}, validData, originQuery);
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
  };
@@ -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: { host: "您的数据上报地址host" }); 进行初始化!',
30
+ 'SDK初始化失败,请使用 gdp("init", "您的GrowingIO项目 accountId", "您项目的 dataSourceId", "您的小程序 AppId(可选)", options: { serverUrl: "您的数据上报地址" }); 进行初始化!',
31
31
  'error'
32
32
  );
33
33
  return false;