tracking-lib-ott 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 +265 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Tracking Library OTT
|
|
2
|
+
|
|
3
|
+
Thư viện tracking events dành cho các dự án OTT (Web, iOS, Android).
|
|
4
|
+
|
|
5
|
+
## Cài đặt
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install tracking-lib-ott
|
|
9
|
+
# hoặc
|
|
10
|
+
yarn add tracking-lib-ott
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Sử dụng cơ bản
|
|
14
|
+
|
|
15
|
+
### 1. Khởi tạo (Init)
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
import tracking from "tracking-lib-ott";
|
|
19
|
+
|
|
20
|
+
tracking.init({
|
|
21
|
+
baseURL: "https://api.example.com/v1/event_batch",
|
|
22
|
+
debug: true, // Bật log để debug
|
|
23
|
+
|
|
24
|
+
// Thông tin bắt buộc
|
|
25
|
+
session_id: "unique-session-id",
|
|
26
|
+
session_sign: "session-signature",
|
|
27
|
+
user_id: 12345,
|
|
28
|
+
deviceId: "device-unique-id",
|
|
29
|
+
deviceModel: "iPhone 14",
|
|
30
|
+
deviceBrand: "Apple",
|
|
31
|
+
ip_address: "192.168.1.1",
|
|
32
|
+
|
|
33
|
+
// Thông tin tuỳ chọn
|
|
34
|
+
appName: "on_plus",
|
|
35
|
+
appId: "app-id",
|
|
36
|
+
packageId: "com.vtvcab.onsportstv",
|
|
37
|
+
platform: "Web", // 'Web' | 'Ios' | 'Android'
|
|
38
|
+
os_version: "17.0",
|
|
39
|
+
app_version: "1.0.0",
|
|
40
|
+
language: "vi",
|
|
41
|
+
country: "VN",
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 2. Track Page View
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
// Track khi user vào một trang
|
|
49
|
+
tracking.trackPageView("/home");
|
|
50
|
+
tracking.trackPageView("/detail/123");
|
|
51
|
+
tracking.trackPageView("/live/channel-1");
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 3. Track Custom Event
|
|
55
|
+
|
|
56
|
+
```javascript
|
|
57
|
+
// Track event tuỳ ý với params
|
|
58
|
+
tracking.trackEvent("button_click", {
|
|
59
|
+
button_id: "subscribe_btn",
|
|
60
|
+
page_id: "detail",
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
tracking.trackEvent("video_play", {
|
|
64
|
+
video_id: "12345",
|
|
65
|
+
video_title: "Trận đấu hay nhất",
|
|
66
|
+
duration: 3600,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
tracking.trackEvent("search", {
|
|
70
|
+
keyword: "bóng đá",
|
|
71
|
+
results_count: 25,
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 4. Send Event trực tiếp
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
// Gửi event với full control payload
|
|
79
|
+
await tracking.sendEvent({
|
|
80
|
+
event_name: "custom_event",
|
|
81
|
+
custom_field_1: "value1",
|
|
82
|
+
custom_field_2: "value2",
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Tích hợp Next.js (Pages Router)
|
|
89
|
+
|
|
90
|
+
### Trong `_app.js` hoặc `_app.tsx`
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
import { useEffect } from "react";
|
|
94
|
+
import { useRouter } from "next/router";
|
|
95
|
+
import tracking from "tracking-lib-ott";
|
|
96
|
+
|
|
97
|
+
function MyApp({ Component, pageProps }) {
|
|
98
|
+
const router = useRouter();
|
|
99
|
+
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
// Khởi tạo tracking
|
|
102
|
+
tracking.init({
|
|
103
|
+
baseURL: process.env.NEXT_PUBLIC_TRACKING_URL,
|
|
104
|
+
session_id: "session-id-from-somewhere",
|
|
105
|
+
session_sign: "session-sign",
|
|
106
|
+
user_id: 12345,
|
|
107
|
+
deviceId: "device-id",
|
|
108
|
+
deviceModel: navigator.userAgent,
|
|
109
|
+
deviceBrand: "Web Browser",
|
|
110
|
+
ip_address: "", // Lấy từ API hoặc để trống
|
|
111
|
+
debug: process.env.NODE_ENV === "development",
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Auto track page views
|
|
115
|
+
const cleanup = tracking.usePageViewTracking(router);
|
|
116
|
+
|
|
117
|
+
return cleanup;
|
|
118
|
+
}, [router]);
|
|
119
|
+
|
|
120
|
+
return <Component {...pageProps} />;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export default MyApp;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Custom Page Mapping
|
|
129
|
+
|
|
130
|
+
Mặc định thư viện có sẵn mapping cho các page phổ biến. Bạn có thể tuỳ chỉnh:
|
|
131
|
+
|
|
132
|
+
```javascript
|
|
133
|
+
tracking.init({
|
|
134
|
+
baseURL: "...",
|
|
135
|
+
// ... other config
|
|
136
|
+
|
|
137
|
+
pageMap: {
|
|
138
|
+
// Thêm hoặc ghi đè page mapping
|
|
139
|
+
phim: { name: "Phim", id: "movie" },
|
|
140
|
+
"the-thao": { name: "Thể thao", id: "sports" },
|
|
141
|
+
"tin-tuc": { name: "Tin tức", id: "news" },
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Page mapping mặc định:**
|
|
147
|
+
|
|
148
|
+
| URL Path | Page Name | Page ID |
|
|
149
|
+
| ----------- | --------- | -------- |
|
|
150
|
+
| `/` | Home | home |
|
|
151
|
+
| `/home` | Home | home |
|
|
152
|
+
| `/search` | Search | search |
|
|
153
|
+
| `/detail` | Detail | detail |
|
|
154
|
+
| `/player` | Player | player |
|
|
155
|
+
| `/video` | Video | video |
|
|
156
|
+
| `/live` | Live | live |
|
|
157
|
+
| `/category` | Category | category |
|
|
158
|
+
| `/profile` | Profile | profile |
|
|
159
|
+
| `/login` | Login | login |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## API Reference
|
|
164
|
+
|
|
165
|
+
### `tracking.init(options)`
|
|
166
|
+
|
|
167
|
+
Khởi tạo thư viện với config.
|
|
168
|
+
|
|
169
|
+
| Option | Type | Required | Mô tả |
|
|
170
|
+
| -------------- | ------- | -------- | ---------------------------- |
|
|
171
|
+
| `baseURL` | string | ✅ | URL endpoint để gửi events |
|
|
172
|
+
| `session_id` | string | ✅ | Session ID của user |
|
|
173
|
+
| `session_sign` | string | ✅ | Session signature |
|
|
174
|
+
| `user_id` | number | ✅ | User ID (-1 nếu chưa login) |
|
|
175
|
+
| `deviceId` | string | ✅ | Device unique ID |
|
|
176
|
+
| `deviceModel` | string | ✅ | Tên model thiết bị |
|
|
177
|
+
| `deviceBrand` | string | ✅ | Hãng thiết bị |
|
|
178
|
+
| `ip_address` | string | ✅ | IP address |
|
|
179
|
+
| `debug` | boolean | ❌ | Bật/tắt debug logs |
|
|
180
|
+
| `appName` | string | ❌ | Tên app (default: `on_plus`) |
|
|
181
|
+
| `platform` | string | ❌ | Platform (default: `Web`) |
|
|
182
|
+
| `pageMap` | object | ❌ | Custom page mapping |
|
|
183
|
+
|
|
184
|
+
### `tracking.trackPageView(url)`
|
|
185
|
+
|
|
186
|
+
Track sự kiện xem trang.
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
tracking.trackPageView("/detail/123?tab=info");
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### `tracking.trackEvent(eventName, params)`
|
|
193
|
+
|
|
194
|
+
Track custom event.
|
|
195
|
+
|
|
196
|
+
```javascript
|
|
197
|
+
tracking.trackEvent("video_complete", { video_id: "123" });
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### `tracking.sendEvent(eventData)`
|
|
201
|
+
|
|
202
|
+
Gửi event trực tiếp với full payload.
|
|
203
|
+
|
|
204
|
+
```javascript
|
|
205
|
+
await tracking.sendEvent({
|
|
206
|
+
event_name: "my_event",
|
|
207
|
+
...customData,
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### `tracking.usePageViewTracking(router)`
|
|
212
|
+
|
|
213
|
+
Auto track page views cho Next.js Pages Router.
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
const cleanup = tracking.usePageViewTracking(router);
|
|
217
|
+
// Gọi cleanup() khi unmount
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Event Payload Structure
|
|
223
|
+
|
|
224
|
+
Mỗi event được gửi lên server có cấu trúc:
|
|
225
|
+
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"app_name": "on_plus",
|
|
229
|
+
"app_id": "",
|
|
230
|
+
"package_id": "com.vtvcab.onsportstv",
|
|
231
|
+
"platform": "Web",
|
|
232
|
+
|
|
233
|
+
"session_id": "...",
|
|
234
|
+
"session_sign": "...",
|
|
235
|
+
"user_id": 12345,
|
|
236
|
+
|
|
237
|
+
"device_id": "...",
|
|
238
|
+
"device_model": "...",
|
|
239
|
+
"device_brand": "...",
|
|
240
|
+
"ip_address": "...",
|
|
241
|
+
|
|
242
|
+
"event_name": "page_view",
|
|
243
|
+
"page_name": "Home",
|
|
244
|
+
"page_id": "home",
|
|
245
|
+
"page_path": "/home",
|
|
246
|
+
"referrer_page_id": ""
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Debug Mode
|
|
253
|
+
|
|
254
|
+
Khi bật `debug: true`, thư viện sẽ log ra console:
|
|
255
|
+
|
|
256
|
+
- Config khi khởi tạo
|
|
257
|
+
- Mỗi event được gửi đi
|
|
258
|
+
- Lỗi nếu có
|
|
259
|
+
|
|
260
|
+
```javascript
|
|
261
|
+
tracking.init({
|
|
262
|
+
debug: process.env.NODE_ENV === "development",
|
|
263
|
+
// ...
|
|
264
|
+
});
|
|
265
|
+
```
|