@fle-sdk/event-tracking-web 1.2.2 → 1.2.3

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  > **构建用户数据体系,让用户行为数据发挥深远的价值。**
2
2
 
3
- **当前版本**: v1.2.0
3
+ **当前版本**: v1.2.3
4
4
 
5
5
  ## 前言
6
6
 
@@ -204,6 +204,11 @@ WebTracking
204
204
  | batchSend | boolean | 是否启用批量发送 | 否 | false |
205
205
  | batchInterval | number | 批量发送间隔时间(ms) | 否 | 5000 |
206
206
  | batchMaxSize | number | 批量发送最大数量 | 否 | 10 |
207
+ | trackPartKeyClick | boolean | 是否对带有 data-part-key 属性的元素点击进行上报(即使 autoTrack 为 false) | 否 | false |
208
+ | pendingRequestsMaxSize | number | 待发送请求队列最大数量(防止内存溢出) | 否 | 50 |
209
+ | sendMethod | string | 数据发送方式:auto(自动选择)、xhr(XMLHttpRequest)、beacon(sendBeacon) | 否 | auto |
210
+ | autoTrackPageDurationInterval | boolean | 是否定时上报页面停留时长 | 否 | false |
211
+ | pageDurationInterval | number | 定时上报页面停留时长的间隔时间(毫秒) | 否 | 30000 |
207
212
  | pageKey | string | 自定义页面唯一标识,如果不传则自动从路由获取 | 否 | 自动生成 |
208
213
 
209
214
  #### 例子
@@ -266,6 +271,11 @@ export default App;
266
271
  | batchSend | boolean | 是否启用批量发送 | 否 | false |
267
272
  | batchInterval | number | 批量发送间隔时间(ms) | 否 | 5000 |
268
273
  | batchMaxSize | number | 批量发送最大数量 | 否 | 10 |
274
+ | trackPartKeyClick | boolean | 是否对带有 data-part-key 属性的元素点击进行上报(即使 autoTrack 为 false) | 否 | false |
275
+ | pendingRequestsMaxSize | number | 待发送请求队列最大数量(防止内存溢出) | 否 | 50 |
276
+ | sendMethod | string | 数据发送方式:auto(自动选择)、xhr(XMLHttpRequest)、beacon(sendBeacon) | 否 | auto |
277
+ | autoTrackPageDurationInterval | boolean | 是否定时上报页面停留时长 | 否 | false |
278
+ | pageDurationInterval | number | 定时上报页面停留时长的间隔时间(毫秒) | 否 | 30000 |
269
279
  | pageKey | string | 自定义页面唯一标识,如果不传则自动从路由获取 | 否 | 自动生成 |
270
280
 
271
281
  #### 例子
@@ -588,6 +598,64 @@ const Index = () => {
588
598
  export default Index;
589
599
  ```
590
600
 
601
+ ### TrackPageDuration
602
+
603
+ > 手动上报页面停留时长。支持自定义时长或自动计算时长。
604
+
605
+ #### 参数
606
+
607
+ | 参数名 | type | 描述 | 是否必填 | 默认值 |
608
+ | --------- | ------------------------- | ------------------------------------------------------------ | -------- | ------ |
609
+ | duration | number | 自定义停留时长(毫秒),如果不传则自动计算 | 否 | - |
610
+ | options | TrackPageDurationOptions | 配置选项 | 否 | - |
611
+ | resetStartTime | boolean | 是否重置起始时间(手动上报后重置,定时上报不重置) | 否 | true |
612
+
613
+ #### TrackPageDurationOptions
614
+
615
+ | 参数名 | type | 描述 | 是否必填 | 默认值 |
616
+ | --------- | --------------------- | ------------------------------------------------------------ | -------- | ------ |
617
+ | desc | string | 自定义描述 | 否 | "Web 页面浏览时长" |
618
+ | business | {[key: string]: any} | 自定义业务参数 | 否 | {} |
619
+ | pageKey | string | 自定义页面唯一标识 | 否 | 当前页面标识 |
620
+ | header | {[key: string]: any} | 自定义请求头 | 否 | - |
621
+
622
+ #### 例子
623
+
624
+ ```jsx
625
+ import React, { useEffect } from "react";
626
+ import WebTracking from "@fle-sdk/event-tracking-web";
627
+
628
+ const Index = () => {
629
+ // 手动上报页面停留时长(自动计算)
630
+ const handleReportDuration = () => {
631
+ WebTracking.trackPageDuration()
632
+ .then((res) => console.log("上报成功", res))
633
+ .catch((err) => console.log("上报失败", err));
634
+ };
635
+
636
+ // 手动上报页面停留时长(自定义时长)
637
+ const handleReportCustomDuration = () => {
638
+ WebTracking.trackPageDuration(5000, {
639
+ desc: "自定义时长上报",
640
+ business: {
641
+ customField: "value",
642
+ },
643
+ })
644
+ .then((res) => console.log("上报成功", res))
645
+ .catch((err) => console.log("上报失败", err));
646
+ };
647
+
648
+ return (
649
+ <div className="index-wrap">
650
+ <button onClick={handleReportDuration}>上报停留时长</button>
651
+ <button onClick={handleReportCustomDuration}>上报自定义时长</button>
652
+ </div>
653
+ );
654
+ };
655
+
656
+ export default Index;
657
+ ```
658
+
591
659
  ## 四、完整参数明细
592
660
 
593
661
  ### 4.1 request 参数明细
@@ -685,6 +753,7 @@ const newDeviceId = WebTracking.resetDeviceId();
685
753
  4. 批量发送失败时,数据会自动重新加入队列,避免数据丢失
686
754
  5. **数据持久化**:队列数据会自动保存到 LocalStorage,页面刷新或关闭后数据不会丢失
687
755
  6. **自动恢复**:重新打开页面时,会自动从 LocalStorage 恢复未发送的数据并继续发送
756
+ 7. **数据格式**:批量发送时直接发送数组,不包装在 `events` 参数中
688
757
 
689
758
  #### 使用示例
690
759
 
@@ -699,6 +768,31 @@ WebTracking.init({
699
768
  });
700
769
  ```
701
770
 
771
+ #### 数据格式说明
772
+
773
+ 批量发送时,数据直接以数组形式发送,格式如下:
774
+
775
+ ```json
776
+ [
777
+ {
778
+ "event": "CustomTrack",
779
+ "desc": "自定义上报事件",
780
+ "itemKey": "218844.page1.event1",
781
+ "requestTime": 1709524231171,
782
+ "deviceId": "1dd539cdea9332ebb9d5c087f9d4471f",
783
+ "privateParamMap": { ... }
784
+ },
785
+ {
786
+ "event": "CustomTrack",
787
+ "desc": "自定义上报事件",
788
+ "itemKey": "218844.page1.event2",
789
+ "requestTime": 1709524231172,
790
+ "deviceId": "1dd539cdea9332ebb9d5c087f9d4471f",
791
+ "privateParamMap": { ... }
792
+ }
793
+ ]
794
+ ```
795
+
702
796
  #### 数据持久化说明
703
797
 
704
798
  - **自动保存**:每次添加数据到队列时,会自动保存到 LocalStorage
@@ -745,11 +839,161 @@ SDK 会自动过滤敏感字段,保护用户隐私。默认会过滤以下字
745
839
 
746
840
  如果需要自定义敏感字段列表,可以在代码中扩展 `filterSensitiveData` 方法。
747
841
 
842
+ ### 5.5 数据发送方式
843
+
844
+ SDK 支持三种数据发送方式,可通过 `sendMethod` 参数配置。
845
+
846
+ #### 配置参数
847
+
848
+ - `sendMethod`: 数据发送方式(默认:auto)
849
+ - `auto`: 自动选择(推荐)
850
+ - 优先使用 `sendBeacon`(页面卸载时、无自定义请求头时)
851
+ - 否则使用 `XMLHttpRequest`
852
+ - `xhr`: 强制使用 `XMLHttpRequest`
853
+ - `beacon`: 强制使用 `sendBeacon`
854
+
855
+ #### 工作原理
856
+
857
+ 1. **auto 模式(推荐)**:
858
+ - 支持自定义请求头时使用 `XMLHttpRequest`
859
+ - 不支持自定义请求头时优先使用 `sendBeacon`
860
+ - 页面卸载时自动切换到 `sendBeacon` 确保数据发送
861
+ - `sendBeacon` 失败时自动降级到 `XMLHttpRequest`
862
+
863
+ 2. **xhr 模式**:
864
+ - 始终使用 `XMLHttpRequest` 发送数据
865
+ - 支持自定义请求头
866
+ - 支持超时控制
867
+ - 页面卸载时可能被取消
868
+
869
+ 3. **beacon 模式**:
870
+ - 始终使用 `sendBeacon` 发送数据
871
+ - 不支持自定义请求头
872
+ - 页面卸载时也能可靠发送
873
+ - 无法获取发送结果
874
+
875
+ #### 使用示例
876
+
877
+ ```jsx
878
+ WebTracking.init({
879
+ appKey: "218844",
880
+ serverUrl: "https://xxx/push",
881
+ // 使用自动模式(推荐)
882
+ sendMethod: "auto",
883
+ // 或者强制使用 XMLHttpRequest
884
+ // sendMethod: "xhr",
885
+ // 或者强制使用 sendBeacon
886
+ // sendMethod: "beacon",
887
+ });
888
+ ```
889
+
890
+ ### 5.6 元素点击追踪
891
+
892
+ SDK 提供了灵活的元素点击追踪方式,支持全埋点和部分埋点两种模式。
893
+
894
+ #### 配置参数
895
+
896
+ - `autoTrack`: 是否开启全埋点(包括页面浏览、元素点击事件自动上报)
897
+ - `trackPartKeyClick`: 是否对带有 `data-part-key` 属性的元素点击进行上报(即使 `autoTrack` 为 false)
898
+
899
+ #### 工作原理
900
+
901
+ 1. **全埋点模式(autoTrack: true)**:
902
+ - 自动追踪所有元素点击事件
903
+ - 自动上报页面浏览事件
904
+ - 支持单页面应用路由变化追踪
905
+
906
+ 2. **部分埋点模式(trackPartKeyClick: true)**:
907
+ - 只追踪带有 `data-part-key` 属性的元素点击
908
+ - 适用于需要精确控制埋点范围的场景
909
+ - 可与 `autoTrack: false` 配合使用
910
+
911
+ #### 使用示例
912
+
913
+ ```jsx
914
+ // 全埋点模式:追踪所有点击
915
+ WebTracking.init({
916
+ appKey: "218844",
917
+ serverUrl: "https://xxx/push",
918
+ autoTrack: true,
919
+ });
920
+
921
+ // 部分埋点模式:只追踪带有 data-part-key 的元素
922
+ WebTracking.init({
923
+ appKey: "218844",
924
+ serverUrl: "https://xxx/push",
925
+ autoTrack: false,
926
+ trackPartKeyClick: true,
927
+ });
928
+
929
+ // HTML 中使用 data-part-key
930
+ <button data-part-key="recharge_btn" data-desc="显示充值弹窗">
931
+ 充值
932
+ </button>
933
+ ```
934
+
935
+ ### 5.7 页面停留时长定时上报
936
+
937
+ SDK 支持定时上报页面停留时长,适用于需要持续监控用户停留时长的场景。
938
+
939
+ #### 配置参数
940
+
941
+ - `autoTrackPageDurationInterval`: 是否定时上报页面停留时长(默认:false)
942
+ - `pageDurationInterval`: 定时上报间隔时间,单位毫秒(默认:30000,即30秒)
943
+
944
+ #### 工作原理
945
+
946
+ 1. 启用定时上报后,SDK 会启动定时器
947
+ 2. 每隔指定时间间隔自动上报页面停留时长
948
+ 3. 只在页面可见时上报(避免后台上报)
949
+ 4. 定时上报不重置起始时间,数据工程师会进行数据清洗
950
+ 5. 页面卸载时自动停止定时器
951
+
952
+ #### 使用示例
953
+
954
+ ```jsx
955
+ WebTracking.init({
956
+ appKey: "218844",
957
+ serverUrl: "https://xxx/push",
958
+ // 启用定时上报页面停留时长
959
+ autoTrackPageDurationInterval: true,
960
+ // 每30秒上报一次
961
+ pageDurationInterval: 30000,
962
+ });
963
+ ```
964
+
965
+ #### 手动上报 vs 定时上报
966
+
967
+ - **手动上报**:使用 `trackPageDuration()` 方法,适合在特定时机上报(如页面离开时)
968
+ - **定时上报**:使用配置项自动上报,适合持续监控场景
969
+
970
+ 两种方式可以同时使用,互不冲突。
971
+
748
972
  ---
749
973
 
750
974
  ## 六、版本更新日志
751
975
 
752
- ### v1.2.0 (最新)
976
+ ### v1.2.3 (最新)
977
+
978
+ - 🐛 修复批量发送数据格式问题
979
+ - 批量发送时直接发送数组,不再包装在 `events` 参数中
980
+ - ✨ 新增页面停留时长手动上报功能
981
+ - `trackPageDuration()` - 手动上报页面停留时长
982
+ - 支持自定义时长或自动计算时长
983
+ - 支持自定义页面标识和业务参数
984
+ - ✨ 新增页面停留时长定时上报功能
985
+ - `autoTrackPageDurationInterval` - 是否定时上报页面停留时长
986
+ - `pageDurationInterval` - 定时上报间隔时间(默认30秒)
987
+ - 只在页面可见时上报,避免后台上报
988
+ - ✨ 新增数据发送方式配置
989
+ - `sendMethod` - 支持 auto、xhr、beacon 三种模式
990
+ - auto 模式自动选择最佳发送方式(推荐)
991
+ - 页面卸载时自动使用 sendBeacon 确保数据发送
992
+ - ✨ 新增元素点击追踪配置
993
+ - `trackPartKeyClick` - 只追踪带有 data-part-key 属性的元素点击
994
+ - 支持与 autoTrack 配合使用,实现灵活的埋点策略
995
+
996
+ ### v1.2.0
753
997
 
754
998
  - ✨ 新增设备 ID 管理功能(基于浏览器指纹技术)
755
999
  - `getDeviceId()` - 获取设备唯一标识