yrjy_mini_sdk 1.0.0 → 1.0.1

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,463 +1,518 @@
1
- # 小程序埋点SDK
2
-
3
- ## 项目介绍
4
-
5
- 本SDK是一个专为小程序设计的埋点解决方案,兼容微信小程序和抖音小程序,基于 **UniApp + Vue3** 框架开发。
6
-
7
- - 支持页面访问埋点
8
- - 支持自定义事件埋点
9
- - 自动收集设备信息和网络状态
10
- - 支持用户信息关联
11
- - 提供简单易用的API接口
12
- - 支持接口自动上报(使用SDK提供的HTTP实例)
13
-
14
- ## 安装方法
15
-
16
- ### NPM安装
17
-
18
- ```bash
19
- npm install mini_sdk
20
- ```
21
-
22
- ### 直接引入
23
-
24
- 将SDK文件复制到项目中,然后通过相对路径引入。
25
-
26
- ## 使用方法
27
-
28
- ### 1. 初始化SDK
29
-
30
- #### 方法一:全局挂载(推荐)
31
-
32
- 在main.js中全局注册SDK:
33
-
34
- ```javascript
35
- import { createApp } from 'vue';
36
- import App from './App.vue';
37
- import MiniSDK from 'mini_sdk';
38
-
39
- const app = createApp(App);
40
-
41
- // 全局注册SDK(可传入配置参数)
42
- app.use(MiniSDK, {
43
- reportUrl: 'https://your-api.com/report', // 埋点上报接口
44
- enabled: true // 是否启用埋点
45
- });
46
-
47
- app.mount('#app');
48
- ```
49
-
50
- 使用时:
51
-
52
- ```javascript
53
- // 组件中使用
54
- this.$Track.report({
55
- trackType: 'event',
56
- eventName: 'click_button'
57
- });
58
-
59
- // 非组件环境(如工具函数)
60
- uni.$Track.report({
61
- trackType: 'event',
62
- eventName: 'api_call'
63
- });
64
- ```
65
-
66
- #### 方法二:按需引入
67
-
68
- 在需要使用的文件中引入:
69
-
70
- ```javascript
71
- import { Track, trackPageMixin } from 'mini_sdk';
72
-
73
- // 初始化埋点SDK
74
- Track.init({
75
- reportUrl: 'https://your-api.com/report', // 埋点上报接口
76
- enabled: true // 是否启用埋点
77
- });
78
-
79
- // 页面使用混入
80
- export default {
81
- mixins: [trackPageMixin],
82
- // 页面其他代码...
83
- };
84
- ```
85
-
86
- ### 2. 页面埋点
87
-
88
- #### 自动注入(推荐)
89
-
90
- 当使用`app.use(MiniSDK)`全局注册后,trackPageMixin会自动注入到所有页面组件中,无需手动引入。
91
-
92
- #### 手动引入
93
-
94
- 如果不需要全局注入,也可以在特定页面手动引入:
95
-
96
- ```javascript
97
- import { trackPageMixin } from 'mini_sdk';
98
-
99
- export default {
100
- mixins: [trackPageMixin],
101
- // 页面其他代码...
102
- };
103
- ```
104
-
105
- ### 3. 自定义事件埋点
106
-
107
- #### 全局挂载后使用
108
-
109
- ```javascript
110
- // 组件中使用
111
- this.$Track.report({
112
- trackType: 'event',
113
- eventName: 'click_button',
114
- eventData: {
115
- buttonId: 'submit',
116
- viewPagePath: '/pages/index/index'
117
- }
118
- });
119
-
120
- // 非组件环境使用
121
- uni.$Track.report({
122
- trackType: 'event',
123
- eventName: 'api_call',
124
- eventData: {
125
- apiUrl: '/api/user',
126
- method: 'GET'
127
- }
128
- });
129
- ```
130
-
131
- #### 按需引入使用
132
-
133
- ```javascript
134
- import { Track } from 'mini_sdk';
135
-
136
- // 上报自定义事件
137
- Track.report({
138
- trackType: 'event',
139
- eventName: 'click_button',
140
- eventData: {
141
- buttonId: 'submit',
142
- viewPagePath: '/pages/index/index'
143
- }
144
- });
145
- ```
146
-
147
- ### 4. 设置用户信息
148
-
149
- ```javascript
150
- import { Track } from 'mini_sdk';
151
-
152
- // 设置用户信息(登录后调用)
153
- Track.setUserInfo({
154
- id: 'user123',
155
- mobile: '13800138000'
156
- });
157
-
158
- // 清除用户信息(登出时调用)
159
- Track.clearUserInfo();
160
- ```
161
-
162
- ### 5. 接口自动上报
163
-
164
- 使用SDK提供的HTTP实例发送请求,接口调用会自动上报埋点。
165
-
166
- **使用示例**:
167
-
168
- ```javascript
169
- import http from 'mini_sdk/src/axios/request.js';
170
-
171
- // 发送GET请求,会自动上报埋点
172
- http.get('/api/test', { id: 1 })
173
- .then(res => {
174
- console.log('请求成功', res);
175
- })
176
- .catch(err => {
177
- console.error('请求失败', err);
178
- });
179
-
180
- // 发送POST请求,会自动上报埋点
181
- http.post('/api/test', { name: 'test' })
182
- .then(res => {
183
- console.log('请求成功', res);
184
- })
185
- .catch(err => {
186
- console.error('请求失败', err);
187
- });
188
- ```
189
-
190
- ### 6. 栏目管理
191
-
192
- ```javascript
193
- import { Track } from 'mini_sdk';
194
-
195
- // 设置一级栏目
196
- Track.setPrimaryCategory([
197
- { id: '1', title: '首页' },
198
- { id: '2', title: '我的' }
199
- ], 0);
200
-
201
- // 设置二级栏目
202
- Track.setSecondaryCategory([
203
- { id: '1-1', title: '推荐' },
204
- { id: '1-2', title: '热门' }
205
- ], 0);
206
-
207
- // 重置或设置栏目(支持恢复默认值或直接赋值)
208
-
209
- // 重置二级栏目为默认值(空字符串)
210
- Track.resetCategory();
211
-
212
- // 重置一级栏目为默认值(空字符串)
213
- Track.resetCategory('primary');
214
-
215
- // 重置一级和二级栏目为默认值(空字符串)
216
- Track.resetCategory('both');
217
-
218
- // 设置二级栏目为 "新的二级栏目"
219
- Track.resetCategory('secondary', '新的二级栏目');
220
-
221
- // 设置一级栏目为 "新的一级栏目"
222
- Track.resetCategory('primary', '新的一级栏目');
223
-
224
- // 同时设置一级和二级栏目为相同值
225
- Track.resetCategory('both', '通用栏目');
226
-
227
- // 分别设置一级和二级栏目为不同值
228
- Track.resetCategory('both', {
229
- primary: '新的一级栏目',
230
- secondary: '新的二级栏目'
231
- });
232
- ```
233
-
234
- ## API文档
235
-
236
- ### Track类
237
-
238
- #### `Track.init(options)`
239
-
240
- 初始化埋点SDK。
241
-
242
- - `options`:配置对象
243
- - `reportUrl`:埋点上报接口URL
244
- - `enabled`:是否启用埋点(默认true)
245
-
246
- #### `Track.report(trackData)`
247
-
248
- 上报埋点数据。
249
-
250
- - `trackData`:埋点数据对象
251
- - `trackType`:埋点类型(必填)
252
- - 其他自定义字段
253
-
254
- #### `Track.setUserInfo(userInfo)`
255
-
256
- 设置用户信息。
257
-
258
- - `userInfo`:用户信息对象
259
- - `id`:用户ID(必填)
260
- - `mobile`:用户手机号(可选)
261
-
262
- #### `Track.clearUserInfo()`
263
-
264
- 清除用户信息。
265
-
266
- #### `Track.enable()`
267
-
268
- 开启埋点功能。
269
-
270
- #### `Track.disable()`
271
-
272
- 关闭埋点功能。
273
-
274
- #### `Track.resetCategory(type, value)`
275
-
276
- 重置或设置栏目信息。
277
-
278
- - `type`:操作类型,可选值:"primary"(一级栏目)、"secondary"(二级栏目)、"both"(两者都操作),默认值为 "secondary"
279
- - `value`:可选,要设置的值。
280
- - 当 `type` 为 "primary" 或 "secondary" 时,`value` 应为字符串
281
- - 当 `type` 为 "both" 时,`value` 可以是字符串(同时设置两个栏目为相同值)或对象(分别设置两个栏目)
282
- - 如果不提供,则重置为默认值(空字符串)
283
-
284
- ### trackPageMixin
285
-
286
- 页面埋点混入,自动采集页面访问数据:
287
-
288
- - 自动记录页面加载时间
289
- - 自动计算页面停留时间
290
- - 自动上报页面显示/隐藏/卸载事件
291
-
292
- ## 数据上报格式
293
-
294
- 埋点上报的数据格式如下:
295
-
296
- ```javascript
297
- {
298
- launchTime: 1620000000000, // 小程序启动时间
299
- path: '/pages/index/index', // 启动路径
300
- scene: 1001, // 启动场景
301
- query: {}, // 启动参数
302
- currentTime: 1620000100000, // 当前时间戳
303
- system: 'iOS 14.4', // 操作系统
304
- uniPlatform: 'mp-weixin', // 平台
305
- deviceBrand: 'Apple', // 设备品牌
306
- deviceType: 'iphone', // 设备类型
307
- appId: 'wx1234567890', // 小程序AppID
308
- version: '1.0.0', // 小程序版本
309
- envVersion: 'release', // 小程序环境
310
- userId: 'user123', // 用户ID
311
- userPhone: '13800138000', // 用户手机号
312
- networkType: 'wifi', // 网络类型
313
- customData: { // 自定义埋点数据
314
- trackType: 'page',
315
- viewPagePath: '/pages/index/index',
316
- timestamp: 1620000000000,
317
- stayTime: 10000,
318
- reportType: 'unload'
319
- }
320
- }
321
- ```
322
-
323
- ## 注意事项
324
-
325
- 1. 请确保在小程序启动时调用`Track.init()`进行初始化
326
- 2. 页面埋点混入会自动处理页面生命周期事件,无需手动调用
327
- 3. 自定义事件埋点需要手动调用`Track.report()`方法
328
- 4. 为了保证埋点数据的准确性,建议在用户登录后调用`Track.setUserInfo()`设置用户信息
329
- 5. 埋点上报接口需要根据实际后端接口进行配置
330
- 6. 请确保小程序有网络请求权限
331
-
332
- ## 兼容性
333
-
334
- - 微信小程序
335
- - 抖音小程序
336
- - 其他基于UniApp框架的小程序平台
337
-
338
- ## 开发说明
339
-
340
- ### 项目结构
341
-
342
- ```
343
- src/
344
- ├── axios/ # 网络请求模块
345
- │ ├── api.js # API接口定义
346
- │ └── request.js # 请求封装
347
- ├── config/ # 配置文件
348
- │ └── index.js # 全局配置
349
- ├── struct/ # 核心结构
350
- │ ├── trackCore.js # 埋点核心实现
351
- │ └── trackPageMixin.js # 页面埋点混入
352
- └── index.js # 入口文件
353
- ```
354
-
355
- ### 核心功能
356
-
357
- 1. **页面埋点**:自动采集页面访问数据,包括页面路径、访问时间、停留时间等
358
- 2. **设备信息采集**:自动收集设备品牌、型号、操作系统等信息
359
- 3. **网络状态检测**:自动采集网络类型
360
- 4. **用户信息关联**:支持关联用户ID和手机号
361
- 5. **自定义事件**:支持自定义事件埋点
362
-
363
- ## 故障排查
364
-
365
- ### 埋点不上报
366
-
367
- 1. 检查`Track.init()`是否调用
368
- 2. 检查`enabled`配置是否为true
369
- 3. 检查网络连接是否正常
370
- 4. 检查上报接口是否正确
371
-
372
- ### 数据不完整
373
-
374
- 1. 检查用户信息是否正确设置
375
- 2. 检查自定义埋点数据格式是否正确
376
- 3. 检查设备权限是否开启
377
-
378
- ## 联系我们
379
-
380
- 如有问题或建议,请联系我们的开发团队。
381
-
382
- ## 打包配置
383
-
384
- ### 打包命令
385
-
386
- 本项目使用 `rollup` 进行打包,支持以下命令:
387
-
388
- ```bash
389
- # 安装依赖
390
- npm install
391
-
392
- # 开发模式(无压缩)
393
- npm run dev
394
-
395
- # 生产模式(有压缩)
396
- npm run build
397
-
398
- # 构建并发布(更新版本号并发布到npm)
399
- npm run release
400
- ```
401
-
402
- ### 打包配置文件
403
-
404
- 项目根目录下的 `rollup.config.js` 文件用于配置打包选项,具体配置如下:
405
-
406
- ```javascript
407
- import babel from '@rollup/plugin-babel';
408
- import resolve from '@rollup/plugin-node-resolve';
409
- import commonjs from '@rollup/plugin-commonjs';
410
- import terser from '@rollup/plugin-terser';
411
- import pkg from './package.json';
412
-
413
- const isProduction = process.env.NODE_ENV === 'production';
414
-
415
- export default {
416
- input: 'src/index.js',
417
- output: [
418
- {
419
- file: pkg.main,
420
- format: 'cjs',
421
- sourcemap: !isProduction
422
- },
423
- {
424
- file: pkg.module,
425
- format: 'es',
426
- sourcemap: !isProduction
427
- }
428
- ],
429
- plugins: [
430
- resolve(),
431
- commonjs(),
432
- babel({
433
- exclude: 'node_modules/**',
434
- babelHelpers: 'runtime'
435
- }),
436
- isProduction && terser()
437
- ].filter(Boolean)
438
- };
439
- ```
440
-
441
- ### 发布到NPM
442
-
443
- 1. 确保已登录NPM账号:
444
- ```bash
445
- npm login
446
- ```
447
-
448
- 2. 运行发布命令:
449
- ```bash
450
- npm run release
451
- ```
452
-
453
- 该命令会自动更新版本号、构建项目并发布到NPM。
454
-
455
- ### 版本号管理
456
-
457
- 项目使用语义化版本号(SemVer),格式为 `x.y.z`:
458
-
459
- - `x`:主版本号,不兼容的API更改
460
- - `y`:次版本号,向下兼容的功能添加
461
- - `z`:补丁版本号,向下兼容的错误修正
462
-
463
- 发布命令会自动递增版本号,默认递增补丁版本号。如需递增次版本号或主版本号,请手动修改 `package.json` 文件中的 `version` 字段。
1
+ # 小程序埋点SDK
2
+
3
+ ## 项目介绍
4
+
5
+ 本SDK是一个专为小程序设计的埋点解决方案,基于 **UniApp + Vue3** 框架开发,兼容微信小程序和抖音小程序。
6
+
7
+ - 支持页面访问埋点(自动)
8
+ - 支持自定义事件埋点(手动)
9
+ - 支持页面跳转事件自动埋点
10
+ - 自动收集设备信息和网络状态
11
+ - 支持用户信息关联
12
+ - 支持OpenID自动获取
13
+ - 提供简单易用的API接口
14
+ - 支持广告数据上报
15
+
16
+ ## 安装方法
17
+
18
+ ### NPM安装
19
+
20
+ ```bash
21
+ npm install yrjy_mini_sdk
22
+ ```
23
+
24
+ ### 直接引入
25
+
26
+ 将SDK文件复制到项目中,然后通过相对路径引入。
27
+
28
+ ## 使用方法
29
+
30
+ ### 1. 初始化SDK
31
+
32
+ #### 方法一:全局挂载(推荐)
33
+
34
+ 在main.js中全局注册SDK:
35
+
36
+ ```javascript
37
+ import { createApp } from 'vue';
38
+ import App from './App.vue';
39
+ import MiniSDK from 'yrjy_mini_sdk';
40
+
41
+ const app = createApp(App);
42
+
43
+ // 全局注册SDK(可传入配置参数)
44
+ app.use(MiniSDK, {
45
+ reportUrl: 'https://your-api.com/report', // 埋点上报接口,默认使用配置文件中的logURL
46
+ enabled: true // 是否启用埋点,默认true
47
+ });
48
+
49
+ app.mount('#app');
50
+ ```
51
+
52
+ 使用时:
53
+
54
+ ```javascript
55
+ // 组件中使用
56
+ this.$Track.report({
57
+ name: 'click_button',
58
+ action: '按钮点击'
59
+ });
60
+
61
+ // 非组件环境使用
62
+ uni.$Track.report({
63
+ name: 'api_call',
64
+ action: '接口调用'
65
+ });
66
+ ```
67
+
68
+ #### 方法二:按需引入
69
+
70
+ 在需要使用的文件中引入:
71
+
72
+ ```javascript
73
+ import { Track, trackPageMixin } from 'yrjy_mini_sdk';
74
+
75
+ // 初始化埋点SDK
76
+ Track.init({
77
+ reportUrl: 'https://your-api.com/report', // 埋点上报接口,默认使用配置文件中的logURL
78
+ enabled: true // 是否启用埋点,默认true
79
+ });
80
+
81
+ // 页面使用混入
82
+ export default {
83
+ mixins: [trackPageMixin],
84
+ // 页面其他代码...
85
+ };
86
+ ```
87
+
88
+ ### 2. 页面埋点
89
+
90
+ 页面埋点会自动采集页面访问数据,包括页面路径、访问时间、停留时间等。
91
+
92
+ **实现原理**:
93
+ - 在页面 `onLoad` 时初始化埋点数据
94
+ - 在页面 `onShow` 时更新页面显示时间
95
+ - 在页面 `onHide` 或 `onUnload` 时上报页面曝光事件
96
+
97
+ **上报数据格式**:
98
+ ```javascript
99
+ {
100
+ action: '页面曝光',
101
+ name: 'pageviewEvent',
102
+ data: {
103
+ path: '/pages/index/index', // 页面路径
104
+ loadTime: 1620000000000, // 页面加载时间
105
+ leaveTime: 1620000100000, // 页面离开时间
106
+ params: { id: '123' }, // 页面参数
107
+ stayTime: 10000 // 页面停留时间(毫秒)
108
+ }
109
+ }
110
+ ```
111
+
112
+ ### 3. 自定义事件埋点
113
+
114
+ #### 全局挂载后使用
115
+
116
+ ```javascript
117
+ // 组件中使用
118
+ this.$Track.report({
119
+ name: 'click_button',
120
+ action: '按钮点击',
121
+ data: {
122
+ buttonId: 'submit',
123
+ viewPagePath: '/pages/index/index'
124
+ }
125
+ });
126
+
127
+ // 非组件环境使用
128
+ uni.$Track.report({
129
+ name: 'api_call',
130
+ action: '接口调用',
131
+ data: {
132
+ apiUrl: '/api/user',
133
+ method: 'GET'
134
+ }
135
+ });
136
+ ```
137
+
138
+ #### 按需引入使用
139
+
140
+ ```javascript
141
+ import { Track } from 'yrjy_mini_sdk';
142
+
143
+ // 上报自定义事件
144
+ Track.report({
145
+ name: 'click_button',
146
+ action: '按钮点击',
147
+ data: {
148
+ buttonId: 'submit',
149
+ viewPagePath: '/pages/index/index'
150
+ }
151
+ });
152
+ ```
153
+
154
+ ### 4. 设置用户信息
155
+
156
+ ```javascript
157
+ import { Track } from 'yrjy_mini_sdk';
158
+
159
+ // 设置用户信息(登录后调用)
160
+ Track.setUserInfo({
161
+ userId: 'user123', // 用户ID(必填)
162
+ userPhone: '13800138000' // 用户手机号(可选)
163
+ });
164
+
165
+ // 清除用户信息(登出时调用)
166
+ Track.clearUserInfo();
167
+ ```
168
+
169
+ ### 5. 栏目管理
170
+
171
+ ```javascript
172
+ import { Track } from 'yrjy_mini_sdk';
173
+
174
+ // 设置一级栏目
175
+ Track.setPrimaryCategory([
176
+ { id: '1', title: '首页' },
177
+ { id: '2', title: '我的' }
178
+ ], 0); // 0为选中的索引
179
+
180
+ // 设置二级栏目
181
+ Track.setSecondaryCategory([
182
+ { id: '1-1', title: '推荐' },
183
+ { id: '1-2', title: '热门' }
184
+ ], 0); // 0为选中的索引
185
+
186
+ // 重置或设置栏目(支持恢复默认值或直接赋值)
187
+
188
+ // 重置二级栏目为默认值(空字符串)
189
+ Track.resetCategory();
190
+
191
+ // 重置一级栏目为默认值(空字符串)
192
+ Track.resetCategory('primary');
193
+
194
+ // 重置一级和二级栏目为默认值(空字符串)
195
+ Track.resetCategory('both');
196
+
197
+ // 设置二级栏目为 "新的二级栏目"
198
+ Track.resetCategory('secondary', '新的二级栏目');
199
+
200
+ // 设置一级栏目为 "新的一级栏目"
201
+ Track.resetCategory('primary', '新的一级栏目');
202
+
203
+ // 同时设置一级和二级栏目为相同值
204
+ Track.resetCategory('both', '通用栏目');
205
+
206
+ // 分别设置一级和二级栏目为不同值
207
+ Track.resetCategory('both', {
208
+ primary: '新的一级栏目',
209
+ secondary: '新的二级栏目'
210
+ });
211
+ ```
212
+
213
+ ### 6. 页面跳转事件(自动埋点)
214
+
215
+ SDK会自动拦截小程序的页面跳转API,自动上报页面跳转事件,无需手动调用。
216
+
217
+ **支持的跳转方法**:
218
+ - `uni.navigateTo` - 保留当前页面,跳转到应用内的某个页面
219
+ - `uni.redirectTo` - 关闭当前页面,跳转到应用内的某个页面
220
+ - `uni.reLaunch` - 关闭所有页面,打开到应用内的某个页面
221
+ - `uni.switchTab` - 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
222
+ - `uni.navigateBack` - 关闭当前页面,返回上一页面或多级页面
223
+
224
+ **上报数据格式**:
225
+ ```javascript
226
+ {
227
+ action: '页面跳转',
228
+ name: 'navigationEvent',
229
+ data: {
230
+ currentPagePath: '/pages/index/index', // 当前页面路径
231
+ targetPagePath: '/pages/detail/detail', // 目标页面路径(navigateBack时为'back')
232
+ navigationParams: { id: '123' } // 跳转参数
233
+ }
234
+ }
235
+ ```
236
+
237
+ ### 7. OpenID自动获取
238
+
239
+ SDK在初始化时会自动获取用户的OpenID,无需手动调用。
240
+
241
+ **获取流程**:
242
+ 1. 调用 `uni.login()` 获取登录 code
243
+ 2. 使用 code 调用后端接口获取 OpenID
244
+ 3. 将 OpenID 缓存到内存中,供后续埋点使用
245
+
246
+ **上报数据格式**:
247
+ ```javascript
248
+ {
249
+ openid: 'o1234567890abcdef', // 用户OpenID
250
+ // ... 其他埋点数据
251
+ }
252
+ ```
253
+
254
+ **配置接口**:
255
+ 在 `src/config/index.js` 中配置获取OpenID的接口基础路径:
256
+ ```javascript
257
+ export default {
258
+ miniProURL: 'https://your-api.com', // 小程序接口地址
259
+ // ... 其他配置
260
+ };
261
+ ```
262
+
263
+ ### 8. 广告数据上报
264
+
265
+ SDK支持广告数据上报,用于追踪广告效果。
266
+
267
+ **支持的广告类型**:
268
+ - `REGISTER` - 注册
269
+ - `VIEW_CONTENT` - 关键页面访问(上传图片)
270
+ - `RESERVATION` - 表单预约(制作完成)
271
+
272
+ **实现原理**:
273
+ SDK会自动从启动参数中获取广告相关信息,包括广告ID、子渠道等,在指定时机上报广告数据。
274
+
275
+ ## API文档
276
+
277
+ ### Track类
278
+
279
+ #### `Track.init(options)`
280
+
281
+ 初始化埋点SDK。
282
+
283
+ - `options`:配置对象
284
+ - `reportUrl`:埋点上报接口URL,默认使用配置文件中的logURL
285
+ - `enabled`:是否启用埋点(默认true)
286
+
287
+ #### `Track.report(trackData)`
288
+
289
+ 上报埋点数据。
290
+
291
+ - `trackData`:埋点数据对象
292
+ - `name`:埋点类型(必填)
293
+ - `action`:埋点行为名称(必填)
294
+ - `data`:埋点数据(可选)
295
+
296
+ #### `Track.customReport(action, data, name, needColumn)`
297
+
298
+ 自定义埋点上报,提供更灵活的埋点配置。
299
+
300
+ - `action`:埋点行为名称(必填)
301
+ - `data`:埋点数据(可选,默认{}
302
+ - `name`:埋点类型(可选,默认"clickEvent")
303
+ - `needColumn`:是否需要栏目信息(可选,默认true)
304
+
305
+ #### `Track.setUserInfo(userInfo)`
306
+
307
+ 设置用户信息。
308
+
309
+ - `userInfo`:用户信息对象
310
+ - `userId`:用户ID(必填)
311
+ - `userPhone`:用户手机号(可选)
312
+
313
+ #### `Track.clearUserInfo()`
314
+
315
+ 清除用户信息。
316
+
317
+ #### `Track.enable()`
318
+
319
+ 开启埋点功能。
320
+
321
+ #### `Track.disable()`
322
+
323
+ 关闭埋点功能。
324
+
325
+ #### `Track.setPrimaryCategory(categoryList, selectedIndex)`
326
+
327
+ 设置一级栏目。
328
+
329
+ - `categoryList`:栏目列表,每个元素需包含title字段
330
+ - `selectedIndex`:当前选中的索引
331
+
332
+ #### `Track.setSecondaryCategory(categoryList, selectedIndex)`
333
+
334
+ 设置二级栏目。
335
+
336
+ - `categoryList`:栏目列表,每个元素需包含title字段
337
+ - `selectedIndex`:当前选中的索引
338
+
339
+ #### `Track.resetCategory(type, value)`
340
+
341
+ 重置或设置栏目信息。
342
+
343
+ - `type`:操作类型,可选值:"primary"(一级栏目)、"secondary"(二级栏目)、"both"(两者都操作),默认值为 "secondary"
344
+ - `value`:可选,要设置的值。
345
+ - `type` 为 "primary" 或 "secondary" 时,`value` 应为字符串
346
+ - `type` 为 "both" 时,`value` 可以是字符串(同时设置两个栏目为相同值)或对象(分别设置两个栏目)
347
+ - 如果不提供,则重置为默认值(空字符串)
348
+
349
+ ### trackPageMixin
350
+
351
+ 页面埋点混入,自动采集页面访问数据:
352
+
353
+ - 自动记录页面加载时间
354
+ - 自动计算页面停留时间
355
+ - 自动上报页面曝光事件
356
+
357
+ ## 数据上报格式
358
+
359
+ 埋点上报的基础数据格式如下:
360
+
361
+ ```javascript
362
+ {
363
+ launchTime: 1620000000000, // 小程序启动时间
364
+ launchPath: '/pages/index/index', // 启动路径
365
+ launchScene: 1001, // 启动场景
366
+ launchParams: '{}', // 启动参数
367
+ currentTime: 1620000100000, // 当前时间戳
368
+ system: 'iOS 14.4', // 操作系统
369
+ uniPlatform: 'mp-weixin', // 平台
370
+ deviceBrand: 'Apple', // 设备品牌
371
+ deviceType: 'iphone', // 设备类型
372
+ appId: 'wx1234567890', // 小程序AppID
373
+ version: '1.0.0', // 小程序版本
374
+ envVersion: 'release', // 小程序环境
375
+ userId: 'user123', // 用户ID
376
+ userPhone: '13800138000', // 用户手机号
377
+ openid: 'o1234567890abcdef', // 用户OpenID
378
+ networkType: 'wifi', // 网络类型
379
+ action: '页面曝光', // 埋点行为名称
380
+ name: 'pageviewEvent', // 埋点类型
381
+ data: '{...}', // 埋点数据(JSON字符串)
382
+ }
383
+ ```
384
+
385
+ ## 兼容性
386
+
387
+ - 微信小程序
388
+ - 抖音小程序
389
+ - 其他基于UniApp框架的小程序平台
390
+
391
+ ## 开发说明
392
+
393
+ ### 项目结构
394
+
395
+ ```
396
+ src/
397
+ ├── axios/ # 网络请求模块
398
+ │ ├── api.js # API接口定义
399
+ │ └── request.js # 请求封装
400
+ ├── config/ # 配置文件
401
+ │ └── index.js # 全局配置
402
+ ├── struct/ # 核心结构
403
+ │ ├── trackCore.js # 埋点核心实现
404
+ │ └── trackPageMixin.js # 页面埋点混入
405
+ ├── utils/ # 工具函数
406
+ │ └── common.js # 通用工具函数
407
+ └── index.js # 入口文件
408
+ ```
409
+
410
+ ### 核心功能
411
+
412
+ 1. **页面埋点**:自动采集页面访问数据,包括页面路径、访问时间、停留时间等
413
+ 2. **设备信息采集**:自动收集设备品牌、型号、操作系统等信息
414
+ 3. **网络状态检测**:自动采集网络类型
415
+ 4. **用户信息关联**:支持关联用户ID和手机号
416
+ 5. **自定义事件**:支持自定义事件埋点
417
+ 6. **页面跳转事件**:自动拦截小程序页面跳转API,自动上报页面跳转事件
418
+ 7. **OpenID自动获取**:在初始化时自动获取用户的OpenID
419
+ 8. **广告数据上报**:支持广告效果追踪
420
+
421
+ ## 配置说明
422
+
423
+ ### 配置文件
424
+
425
+ 项目的配置文件位于 `src/config/index.js`,包含以下配置项:
426
+
427
+ ```javascript
428
+ export default {
429
+ baseURL: '', // 基础接口地址
430
+ logURL: "https://log.cdyrjygs.com/binlog", // 埋点上报接口
431
+ miniProURL: 'https://crbt.cdyrjygs.com/cms-vrbt' // 小程序接口地址
432
+ };
433
+ ```
434
+
435
+ ### 构建配置
436
+
437
+ 项目使用 Rollup 进行构建,配置文件位于 `rollup.config.js`。
438
+
439
+ **构建命令**:
440
+ ```bash
441
+ # 开发模式(无压缩)
442
+ npm run dev
443
+
444
+ # 生产模式(有压缩)
445
+ npm run build
446
+
447
+ # 构建并发布(更新版本号并发布到npm)
448
+ npm run release
449
+ ```
450
+
451
+ **生产环境优化**:
452
+ - 代码压缩
453
+ - 移除控制台日志
454
+ - 移除调试器语句
455
+ - 未使用代码移除
456
+
457
+ ## 故障排查
458
+
459
+ ### 埋点不上报
460
+
461
+ 1. 检查`Track.init()`是否调用
462
+ 2. 检查`enabled`配置是否为true
463
+ 3. 检查网络连接是否正常
464
+ 4. 检查上报接口是否正确
465
+ 5. 检查小程序是否有网络请求权限
466
+
467
+ ### 页面曝光事件不上报
468
+
469
+ 1. 检查页面是否正确使用了`trackPageMixin`
470
+ 2. 检查页面是否正常触发了`onHide`或`onUnload`生命周期
471
+ 3. 检查SDK是否已正确初始化
472
+
473
+ ### OpenID获取失败
474
+
475
+ 1. 检查小程序是否有登录权限
476
+ 2. 检查`miniProURL`配置是否正确
477
+ 3. 检查后端接口是否正常
478
+
479
+ ## 联系我们
480
+
481
+ 如有问题或建议,请联系我们的开发团队。
482
+
483
+ ## 版本号管理
484
+
485
+ 项目使用语义化版本号(SemVer),格式为 `x.y.z`:
486
+
487
+ - `x`:主版本号,不兼容的API更改
488
+ - `y`:次版本号,向下兼容的功能添加
489
+ - `z`:补丁版本号,向下兼容的错误修正
490
+
491
+ 发布命令会自动递增版本号,默认递增补丁版本号。如需递增次版本号或主版本号,请手动修改 `package.json` 文件中的 `version` 字段。
492
+
493
+ ## 完整构建和发布流程
494
+
495
+ 1. **安装依赖**:
496
+ ```bash
497
+ npm install
498
+ ```
499
+
500
+ 2. **开发模式**(可选,用于调试):
501
+ ```bash
502
+ npm run dev
503
+ ```
504
+
505
+ 3. **生产构建**(可选,用于本地验证):
506
+ ```bash
507
+ npm run build
508
+ ```
509
+
510
+ 4. **发布到NPM**:
511
+ ```bash
512
+ npm run release
513
+ ```
514
+
515
+ 该命令会自动执行以下操作:
516
+ - 更新版本号(默认递增补丁版本号)
517
+ - 构建生产版本
518
+ - 发布到NPM