@seaverse/track-sdk 0.1.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 +272 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.js +1 -0
- package/package.json +67 -0
package/README.md
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# @seaverse/track-sdk
|
|
2
|
+
|
|
3
|
+
统一埋点 SDK,采用 Token 化配置,所有平台配置已内置,使用更简单。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- 🎯 **Token 化配置**:只需提供 token,无需关心复杂配置
|
|
8
|
+
- 🔒 **代码混淆**:生产构建自动混淆,保护配置信息
|
|
9
|
+
- 🚀 **智能采集**:自动采集用户行为,同时支持手动埋点
|
|
10
|
+
- 🔌 **多平台支持**:同时支持多个数据分析平台
|
|
11
|
+
- 📦 **TypeScript 支持**:完整的类型定义
|
|
12
|
+
- 🎨 **按需加载**:动态导入,减少初始加载
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @seaverse/track-sdk
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
安装 SDK 时会自动安装所需依赖。
|
|
21
|
+
|
|
22
|
+
## 快速开始
|
|
23
|
+
|
|
24
|
+
### 基本使用
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { TrackClient } from '@seaverse/track-sdk';
|
|
28
|
+
|
|
29
|
+
// 创建客户端(使用生产环境 token)
|
|
30
|
+
const trackClient = new TrackClient({
|
|
31
|
+
token: 'prod_2f8a9c1b4e3d',
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// 初始化
|
|
35
|
+
await trackClient.initialize();
|
|
36
|
+
|
|
37
|
+
// 手动埋点
|
|
38
|
+
await trackClient.track('button_click', {
|
|
39
|
+
button_name: '购买按钮',
|
|
40
|
+
page: '商品详情',
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## API 文档
|
|
45
|
+
|
|
46
|
+
### TrackClient
|
|
47
|
+
|
|
48
|
+
#### 构造函数
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
new TrackClient(config: TrackConfig)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**参数:**
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
interface TrackConfig {
|
|
58
|
+
token: string; // 应用令牌(必填)
|
|
59
|
+
debug?: boolean; // 是否开启调试模式,默认 false
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### 方法
|
|
64
|
+
|
|
65
|
+
##### `initialize(): Promise<void>`
|
|
66
|
+
|
|
67
|
+
初始化 SDK,必须在使用前调用。
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
await trackClient.initialize();
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
##### `track(eventName: string, properties?: EventProperties): Promise<void>`
|
|
74
|
+
|
|
75
|
+
跟踪事件。
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
await trackClient.track('purchase', {
|
|
79
|
+
product_id: '12345',
|
|
80
|
+
price: 99.99,
|
|
81
|
+
currency: 'CNY',
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
##### `setUserId(userId: string): Promise<void>`
|
|
86
|
+
|
|
87
|
+
设置用户 ID(用户登录时调用)。
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
await trackClient.setUserId('user_123456');
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
##### `setUserProperties(properties: UserProperties): Promise<void>`
|
|
94
|
+
|
|
95
|
+
设置用户属性。
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
await trackClient.setUserProperties({
|
|
99
|
+
age: 25,
|
|
100
|
+
gender: 'male',
|
|
101
|
+
vip_level: 'gold',
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
##### `clearUserId(): Promise<void>`
|
|
106
|
+
|
|
107
|
+
清除用户 ID(用户登出时调用)。
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
await trackClient.clearUserId();
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
##### `getInitializedProviders(): TrackProvider[]`
|
|
114
|
+
|
|
115
|
+
获取已初始化的提供商列表。
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
const providers = trackClient.getInitializedProviders();
|
|
119
|
+
console.log(providers); // 已初始化的埋点平台列表
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 使用示例
|
|
123
|
+
|
|
124
|
+
### React 应用
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
import { useEffect } from 'react';
|
|
128
|
+
import { TrackClient } from '@seaverse/track-sdk';
|
|
129
|
+
|
|
130
|
+
// 创建全局实例
|
|
131
|
+
const trackClient = new TrackClient({
|
|
132
|
+
token: process.env.REACT_APP_TRACK_TOKEN || 'dev_9a3b6c2d1e4f',
|
|
133
|
+
debug: process.env.NODE_ENV === 'development',
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
function App() {
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
// 初始化埋点
|
|
139
|
+
trackClient.initialize().then(() => {
|
|
140
|
+
console.log('Track SDK 已初始化');
|
|
141
|
+
});
|
|
142
|
+
}, []);
|
|
143
|
+
|
|
144
|
+
const handleLogin = async (userId: string) => {
|
|
145
|
+
await trackClient.setUserId(userId);
|
|
146
|
+
await trackClient.track('user_login');
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const handlePurchase = async (productId: string, price: number) => {
|
|
150
|
+
await trackClient.track('purchase', {
|
|
151
|
+
product_id: productId,
|
|
152
|
+
price,
|
|
153
|
+
currency: 'CNY',
|
|
154
|
+
});
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
return <div>Your App</div>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export default App;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Vue 应用
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
// plugins/track.ts
|
|
167
|
+
import { TrackClient } from '@seaverse/track-sdk';
|
|
168
|
+
|
|
169
|
+
export const trackClient = new TrackClient({
|
|
170
|
+
token: import.meta.env.VITE_TRACK_TOKEN || 'dev_9a3b6c2d1e4f',
|
|
171
|
+
debug: import.meta.env.DEV,
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// main.ts
|
|
175
|
+
import { createApp } from 'vue';
|
|
176
|
+
import App from './App.vue';
|
|
177
|
+
import { trackClient } from './plugins/track';
|
|
178
|
+
|
|
179
|
+
const app = createApp(App);
|
|
180
|
+
|
|
181
|
+
trackClient.initialize();
|
|
182
|
+
|
|
183
|
+
app.config.globalProperties.$track = trackClient;
|
|
184
|
+
|
|
185
|
+
app.mount('#app');
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 环境变量配置
|
|
189
|
+
|
|
190
|
+
**React (.env):**
|
|
191
|
+
```bash
|
|
192
|
+
# 开发环境
|
|
193
|
+
REACT_APP_TRACK_TOKEN=dev_9a3b6c2d1e4f
|
|
194
|
+
|
|
195
|
+
# 测试环境
|
|
196
|
+
REACT_APP_TRACK_TOKEN=test_5d7e2a4b8f1c
|
|
197
|
+
|
|
198
|
+
# 生产环境
|
|
199
|
+
REACT_APP_TRACK_TOKEN=prod_2f8a9c1b4e3d
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Vue (.env):**
|
|
203
|
+
```bash
|
|
204
|
+
# 开发环境
|
|
205
|
+
VITE_TRACK_TOKEN=dev_9a3b6c2d1e4f
|
|
206
|
+
|
|
207
|
+
# 生产环境
|
|
208
|
+
VITE_TRACK_TOKEN=prod_2f8a9c1b4e3d
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## 最佳实践
|
|
212
|
+
|
|
213
|
+
### 1. 环境配置
|
|
214
|
+
|
|
215
|
+
使用环境变量管理 token:
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
const trackClient = new TrackClient({
|
|
219
|
+
token: process.env.REACT_APP_TRACK_TOKEN || 'dev_9a3b6c2d1e4f',
|
|
220
|
+
debug: process.env.NODE_ENV !== 'production',
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 2. 用户生命周期
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
// 登录
|
|
228
|
+
async function onLogin(userId: string) {
|
|
229
|
+
await trackClient.setUserId(userId);
|
|
230
|
+
await trackClient.setUserProperties({
|
|
231
|
+
login_time: Date.now(),
|
|
232
|
+
});
|
|
233
|
+
await trackClient.track('user_login');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// 登出
|
|
237
|
+
async function onLogout() {
|
|
238
|
+
await trackClient.track('user_logout');
|
|
239
|
+
await trackClient.clearUserId();
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### 3. 错误处理
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
try {
|
|
247
|
+
await trackClient.initialize();
|
|
248
|
+
} catch (error) {
|
|
249
|
+
console.error('埋点初始化失败:', error);
|
|
250
|
+
// 继续运行,不阻塞主流程
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## 常见问题
|
|
255
|
+
|
|
256
|
+
**Q: 如何申请新的 token?**
|
|
257
|
+
|
|
258
|
+
联系管理员添加新的配置到 `src/config.ts`。
|
|
259
|
+
|
|
260
|
+
**Q: 如何验证埋点是否正常工作?**
|
|
261
|
+
|
|
262
|
+
开启 debug 模式:
|
|
263
|
+
```typescript
|
|
264
|
+
const trackClient = new TrackClient({
|
|
265
|
+
token: 'your_token',
|
|
266
|
+
debug: true, // 会在控制台输出日志
|
|
267
|
+
});
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
MIT
|