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 +518 -463
- package/dist/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/package.json +1 -1
- package/src/axios/api.js +17 -1
- package/src/axios/request.js +1 -1
- package/src/config/index.js +2 -0
- package/src/index.js +7 -7
- package/src/struct/trackCore.js +89 -19
- package/src/struct/trackPageMixin.js +9 -14
package/README.md
CHANGED
|
@@ -1,463 +1,518 @@
|
|
|
1
|
-
# 小程序埋点SDK
|
|
2
|
-
|
|
3
|
-
## 项目介绍
|
|
4
|
-
|
|
5
|
-
本SDK
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
import
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
//
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
userId
|
|
311
|
-
userPhone
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
#
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
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
|