uni-stat-v2.md 34.2 KB
Newer Older
hbcui1984's avatar
rename  
hbcui1984 已提交
1
## uni统计2.0
M
mehaotian 已提交
2

3
uni统计2.0 是基于 uniCloud 开发的开源、免费统计平台。
M
mehaotian 已提交
4

M
mehaotian 已提交
5
## 产品特色
M
mehaotian 已提交
6

inkwalk's avatar
inkwalk 已提交
7
`uni统计2.0``uni统计1.0`一样,均支持全域流量统计,无需在各端接不同的 sdk、无需在不同后台查看数据。使用 uni 统计,一张报表可查看所有端(iOS、Android、H5 及各家小程序)的运营数据。
M
mehaotian 已提交
8

hbcui1984's avatar
hbcui1984 已提交
9
相比`uni统计1.0``uni统计2.0`还有如下特色功能:
M
mehaotian 已提交
10

hbcui1984's avatar
hbcui1984 已提交
11
**1. 开源**
M
mehaotian 已提交
12

inkwalk's avatar
inkwalk 已提交
13
前端采集数据的 SDK、云端接收数据的云函数、云端跑批统计的云函数、展示统计结果的管理报表,所有代码全部开源。
M
mehaotian 已提交
14

hbcui1984's avatar
hbcui1984 已提交
15
**2. 私有部署**
M
mehaotian 已提交
16

inkwalk's avatar
inkwalk 已提交
17
使用传统`saas`类统计产品时,所有 App 数据都上报在统计厂商统一的数据库中,也就是中央化部署模式。
hbcui1984's avatar
hbcui1984 已提交
18
`uni统计2.0`基于`uniCloud`实现,云函数、统计数据全部托管在开发者自己的服务空间中,开发者对自己的统计数据拥有完整的控制权。
M
mehaotian 已提交
19

hbcui1984's avatar
hbcui1984 已提交
20
**3. 自由定制**
M
mehaotian 已提交
21

hbcui1984's avatar
hbcui1984 已提交
22 23
`uni统计2.0`所有代码是完全开源的,开发者可在开源代码基础上,轻松扩展统计维度,自由定制报表样式。

inkwalk's avatar
inkwalk 已提交
24
**uni 统计新老版本对比**
M
mehaotian 已提交
25

M
mehaotian 已提交
26
|功能|uni统计1.0|uni统计2.0|
27 28 29 30 31
| :-: | :-: | :-: |
|是否开源 |否|是|
|是否免费 |是|是|
|部署方式 |中央部署|私有部署|
|定制方式 |不可定制|方便定制|
M
mehaotian 已提交
32

M
mehaotian 已提交
33
## 前端配置
M
mehaotian 已提交
34 35 36

在项目中打开 `manifest.json` , 选择 `uni统计配置` 项,根据需求,选择开通 `uni统计` ,勾选 `version2` 开启新版统计。

M
mehaotian 已提交
37
![开启统计](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/03c7afa3-2512-462b-a53f-cbaeca4dec58.png)
M
mehaotian 已提交
38

M
mehaotian 已提交
39
### 全局设置
hbcui1984's avatar
hbcui1984 已提交
40

inkwalk's avatar
inkwalk 已提交
41
`manifest.json -> uniStatistics` 下的 `enable` 字段设置为 `true|false` ,来开启关闭 `uni统计`
M
mehaotian 已提交
42 43 44 45

设置 `version` 属性为 `"2"` 来开启新版统计

```js
inkwalk's avatar
inkwalk 已提交
46 47
//...
"uniStatistics": {
M
mehaotian 已提交
48 49
	"enable": true,//全局开启
	"version": "2" // 开启新版uni统计,值为字符串
inkwalk's avatar
inkwalk 已提交
50
},
M
mehaotian 已提交
51 52
//...
```
hbcui1984's avatar
hbcui1984 已提交
53

M
mehaotian 已提交
54 55 56 57 58
**uniStatistics说明**

|字段|类型|默认值|可选值|说明|
|:-:|:-:|:-:|:-:|:-:|
|enable|Boolean|false|true , false|全局开启或关闭统计 ,分平台配置会覆盖当前配置|
M
mehaotian 已提交
59
|version|String|"1"|"1" , "2"|统计版本 ,如不填写,默认使用版本1.0,推荐使用2.0版本|
M
mehaotian 已提交
60 61
|debug|Boolean|false|true , false|开启统计调试模式 ,会产生大量日志,且会在开发阶段上报数据,应用发布请关闭此项|

M
mehaotian 已提交
62
### 分平台设置
hbcui1984's avatar
hbcui1984 已提交
63

M
mehaotian 已提交
64 65 66
`uniStatistics` 支持分平台设置,比如若需仅开启微信平台的 `uni统计`,则在`mp-weixin`节点下设置 `uniStatistics ->enable` 即可,如下:

```js
inkwalk's avatar
inkwalk 已提交
67 68 69 70 71
//...
"mp-weixin":{
    "uniStatistics": {
        "enable": true //微信平台开启统计
    }
M
mehaotian 已提交
72 73 74
}
```

M
mehaotian 已提交
75 76 77 78 79 80
**uniStatistics说明**

|字段|类型|默认值|可选值|说明|
|:-:|:-:|:-:|:-:|:-:|
|enable|Boolean|false|true , false|分平台开启或关闭统计 ,分平台配置会覆盖全局配置,uniStatistics 需在平台配置下|

M
mehaotian 已提交
81
::: warning 注意
M
mehaotian 已提交
82
- 在分平台下如有`uniStatistics -> enable`字段,则优先使用分平台下配置 ,反之使用全局统计设置
M
mehaotian 已提交
83 84
- 分平台无需设置 `version``debyg` 属性 ,两个属性仅全局生效
- 分平台无需设置 `debyg` 属性 ,`debyg` 属性仅全局生效
M
mehaotian 已提交
85
- 仅在开启调试模式或发行代码后才会正常上报数据
M
mehaotian 已提交
86
:::
M
mehaotian 已提交
87

hbcui1984's avatar
hbcui1984 已提交
88 89
### 域名白名单

M
mehaotian 已提交
90 91 92 93
由于各家小程序对可访问的域名要配置白名单,否则无法联网。

注意选择对应的服务商域名(文章后面章节会有服务空间相关配置)

inkwalk's avatar
inkwalk 已提交
94 95 96 97
| 服务提供商 |      request 合法域名       |
| :--------: | :-------------------------: |
|   阿里云   |       api.bspapp.com        |
|   腾讯云   | tcb-api.tencentcloudapi.com |
M
mehaotian 已提交
98

M
mehaotian 已提交
99
## 统计管理后台配置
M
mehaotian 已提交
100

M
mehaotian 已提交
101
2.0版本统计与之前不同的是需要用户自行管理部署统计后台,使用了 [uni-admin](https://uniapp.dcloud.io/uniCloud/admin.html#uni-admin-%E6%A1%86%E6%9E%B6-%E5%8E%9F%E5%90%8D-unicloud-admin)
M
mehaotian 已提交
102 103
来管理 `uni统计`数据。

M
mehaotian 已提交
104
### 创建 uni-admin
M
mehaotian 已提交
105

inkwalk's avatar
inkwalk 已提交
106
使用 `HBuilderX 3.4.x`版本新建 `uni-app` 项目,选择 `uni-admin` 项目模板,如下图:
M
mehaotian 已提交
107 108 109 110 111
![download-admin](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/80406bf5-f96a-4a66-9430-a339a4054c96.png)
创建完成后,可以跟随`云服务空间初始化向导`初始化项目,创建并绑定云服务空间

![download-admin](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/7fd34451-2313-4d01-8caf-39f277780642.png)

M
mehaotian 已提交
112
### 运行 uni-admin
M
mehaotian 已提交
113 114 115

接下来所有操作都是基于新创建的 `uni-admin` 项目来操作

M
mehaotian 已提交
116
### 目录结构
M
mehaotian 已提交
117

M
mehaotian 已提交
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
注意:创建完成后确保 `uniCloud - cloudfunctions` 目录下包含了 `uni-stat-receiver` 云对象

```bash {3}
├── uniCloud                          
│   │── cloudfunctions 
│ 	│	│── uni-sata-receiver       # 上报数据接收器
│ 	│	└── ...
│   └── ...      			
├── pages                             
├── static
├── store
├── admin.config.js
├── App.vue
└── ...
```
inkwalk's avatar
inkwalk 已提交
133

M
mehaotian 已提交
134
### 配置 uni-id
M
mehaotian 已提交
135 136

打开`uni-config-center` 配置 `uni-id``passwordSecret``tokenSecret`字段 (测试期间跳过本条也可以)
inkwalk's avatar
inkwalk 已提交
137

M
mehaotian 已提交
138 139 140 141 142 143 144 145 146 147 148 149
- `passwordSecret` 字段 ,用于加密密码入库的密钥
- `tokenSecret` 字段 ,为生成 token 需要的密钥

```js
//  `uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json`
{
  "passwordSecret": "passwordSecret-demo",
  "tokenSecret": "tokenSecret-demo",
  // ...
}
```

M
mehaotian 已提交
150
### 配置服务空间
M
mehaotian 已提交
151 152 153 154 155

右键 `uniCloud` 目录 `运行云服务空间初始化向导`,初始化数据库和上传部署云函数(**如已创建并绑定云服务空间,则跳过此步**

![配置服务空间](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/7fd34451-2313-4d01-8caf-39f277780642.png)

M
mehaotian 已提交
156 157
**运行项目**

M
mehaotian 已提交
158 159
点击`HBuilderX`工具栏的运行(快捷键【Ctrl+r】) -> 运行到浏览器。如果是连接本地云函数调试环境,上一步可以不上传云函数,但数据库仍需初始化。

M
mehaotian 已提交
160 161
**登录 admin 后台**

M
mehaotian 已提交
162 163 164 165 166 167
从启动后的登录页面的底部,进入创建管理员页面(仅允许注册一次管理员账号)

![登录 admin 后台](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/6582a93f-e707-4d12-9749-48d7e0f58f4b.png)

![登录 admin 后台](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/28e09692-5931-437d-a633-7437ff87bdca.png)

M
mehaotian 已提交
168
::: warning 注意
M
mehaotian 已提交
169 170
- 在 HBuilderX 中运行需在插件市场在安装 [sass 插件](https://ext.dcloud.net.cn/plugin?id=2046)
- 浏览器联网失败,报 `request:fail`,需要去云服务空间的`跨域配置`配置跨域域名,需带端口。[详见](https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=useinh5)
M
mehaotian 已提交
171 172
- 如从未接触过`uniCloud`,可能无法直接上手uni-admin的,建议先通读下uniCloud文档的概念介绍和快速上手章节。[详见](https://uniapp.dcloud.net.cn/uniCloud/README)
:::
M
mehaotian 已提交
173

M
mehaotian 已提交
174
## 关联服务空间
M
mehaotian 已提交
175 176 177 178 179 180 181 182


客户端和管理后端都已经准备好了,但是现在还不能从客户端直接上报数据到管理后端,所以需要关联客户端和管理后端的服务空间

1. 在客户端项目右键并选择 `创建uniCloud云开发环境 -> 阿里云|腾讯云`

![关联前后台数据](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/b2ad84ed-a69a-43dc-b8d1-6efaafd96a14.png)

inkwalk's avatar
inkwalk 已提交
183
2.`uniCloud`目录右键并选择`关联云服务空间或项目`,在打开的窗口中选择上一节`uni-admin`关联的服务空间(两个项目务必关联同一个服务空间,且 uni-admin 中所有云函数、公共模板等都已经上传部署到该服务空间)
M
mehaotian 已提交
184 185 186 187 188

![关联前后台数据](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/14744bf3-c88e-4408-b2fa-0ecf0dcf4fe1.png)

3. 发行项目到对应平台 ,此时数据已经成功采集到 `uni-admin`

M
mehaotian 已提交
189 190 191 192 193 194



## 开源代码解读
### 前端SDK说明
#### 开启调试模式
M
mehaotian 已提交
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

`manifest.json -> uniStatistics` 下的 `debug` 字段设置为 `true|false` ,来开启关闭 `uni统计`调试模式

在调试模式下,会将上报数据的关键信息打印到控制台,方便观察采集信息是否正确 ,多用在自定义扩展的时候

**日志格式**

`===` 表示统计日志相关日志

```
// 标识统计开启
=== uni统计开启,version:2.0

// 采集日志,采集类型见 :上报数据说明
=== 统计数据采集:{采集类型} ===
// 这里是采集的原始数据
{
	fvts: 1647313662
	lang: "zh"
	lt: "1"
	lvts: 1650857441
	md: "PC"
	t: 1650857461
	ttpj: "view"
	tvc: 14
	url: "pages/component/view/view"
	usv: "0.0.1"
	ut: "h5"
	// ...
} 
=== 采集结束 ===

// 数据上报成功
=== 统计队列数据上报 ===
// 这里是上报数据
{usv: '0.0.1', t: 1650857765, requests: '["lt=11&ut=h5&url=/pages/component/view/view&tt=&u…&ch=&usv=0.0.1&t=1650857765&ttn=&ttpj=view&ttc="]'}
=== 上报结束 ===

```

M
mehaotian 已提交
235
#### 采集类型说明
M
mehaotian 已提交
236 237 238 239

**应用启动**

访问开始即启动程序,访问结束结分为:进入后台超过5min、在前台无任何操作超过30min、在新的来源程序
M
mehaotian 已提交
240

M
mehaotian 已提交
241 242
|上报字段|说明|
|:-:|:-:|
M
mehaotian 已提交
243 244
|lt|统计数据类型,默认值为1,`类型见下文`|
|ut	|平台类型,`类型见下文`|
M
mehaotian 已提交
245 246 247 248
|mpsdk|小程序 sdk version|
|mpv|小程序平台版本,如微信、支付宝等|
|mpn|原生平台包名、小程序 appid|
|v|应用版本。原生应用|
M
mehaotian 已提交
249 250
|p|手机系统,`类型见下文`|
|net|网络类型,`类型见下文`|
M
mehaotian 已提交
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
|brand|手机品牌|
|md	|手机型号 model|
|lang|语言|
|lat|纬度|
|lng|经度|
|pr	|pixelRatio 设备像素比|
|ww	|windowWidth 可使用窗口宽度|
|wh	|windowHeight 可使用窗口高度|
|sw	|screenWidth 屏幕宽度|
|sh	|screenHeight 屏幕高度|
|url|当前页面的完整 url,包含参数在内。最多255字符|
|ch	|渠道信息|
|fvts|首次访问时间戳|
|lvts|上次访问时间戳|
|cn	|国家|
|pn	|省份|
|ct	|城市|
|sc	|场景值|
|tvc|用户到本次访问为止总共的访问次数|
|usv|统计 sdk 版本|
|t|上报数据时的时间戳|

M
mehaotian 已提交
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 311 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

**应用进入后台**

应用进入后台时,在 sdk 中是应用的onHide 生命周期触发

|上报字段|说明|
|:-:|:-:|
|lt			|统计数据类型,默认值为3,`类型见下文`|
|ut			|平台类型,`类型见下文`|
|p			|手机系统,`类型见下文`|
|urlref		|应用退出时停留的页面|
|urlref_ts	|应用退出时,最后一个页面的停留时间|
|ch			|渠道信息|
|usv		|统计 sdk 版本|
|t			|上报数据时的时间戳|


**页面切换**

页面跳转时上报,在 sdk 中是页面的 onHide 生命周期触发

|上报字段|说明|
|:-:|:-:|
|lt|统计数据类型,默认值为11,`类型见下文`|
|ut	|平台类型,`类型见下文`|
|p|手机系统,`类型见下文`|
|url|当前页面的完整 url,包含参数在内。最多255字符|
|ttpj|pages.json 中定义的页面的 title|
|ttn|通过API uni.setnavigationbartitle 设置的 title|
|ttc|通过 uni.report 上报的页面的 title|
|ttct|title 组件中设置的 title|
|urlref		|应用退出时停留的页面|
|urlref_ts	|应用退出时,最后一个页面的停留时间|
|ch	|渠道信息|
|usv|统计 sdk 版本|
|t|上报数据时的时间戳|

**事件触发**

用户触发某些业务逻辑时
- 默认事件
    - 登录:用户信息
    - 支付:商品名称、金额
    - 分享:
- 用户自定义事件

|上报字段|说明|
|:-:|:-:|
|lt|统计数据类型,默认值为21,`类型见下文`|
|ut	|平台类型,`类型见下文`|
|p|手机系统,`类型见下文`|
|url|当前页面的完整 url,包含参数在内。最多255字符|
|e_n|事件名称|
|e_v|事件参数|
|ch	|渠道信息|
|usv|统计 sdk 版本|
|t|上报数据时的时间戳|

**应用错误**

应用发生错误时上报

|上报字段|说明|
|:-:|:-:|
|lt|统计数据类型,默认值为21,`类型见下文`|
|ut	|平台类型,`类型见下文`|
|p|手机系统,`类型见下文`|
|ch|渠道信息|
|mpsdk|小程序 SDK Version|
|mpv|小程序平台版本,如微信、支付宝等|
|v|应用版本。原生应用|
|em|错误信息|
|usv|统计 sdk 版本|
|t|上报数据时的时间戳|


**`lt`:统计数据类型**

|值|说明|
|:-:|:-:|
|1  |应用启动,对应 `onLaunch` 事件|
|3  |应用进入后台,对应应用 `onHide` 事件|
|11 |页面跳转,对应页面 `onHide` 事件|
|21 |事件触发|
|31 |应用错误|

**`ut`:平台类型**

|值|说明|
|:-:|:-:|
|n|移动端  |
|h5|h5	  |
|wx|微信	  |
|ali|阿里	  |
|bd|百度	  |
|tt|头条	  |
|qq|qq	  |
|qn|快应用  |
|ks|快手	  |
|lark|飞书	  |
|qw|快应用  |
|dt| 钉钉	  |

**`p`:手机系统**

|值|说明|
|:-:|:-:|
|a|Android|
|i|iOS|


**`net`:网络类型**

|值|说明|
|:-:|:-:|
|wifi|wifi网络|
|2g|2g网络|
|3g|3g网络|
|4g|4g网络|
|5g|5g网络|
|none|无网络|
|cable|有线|

M
mehaotian 已提交
396 397
#### 数据上报逻辑
数据上报间隔最小是 10s 上报一次 ,在上报间隔内,会将每次上报节点的数据加入统计数据队列,10s后会在下一个上报节点,统一对数据队列进行一定的处理进行上报。
M
mehaotian 已提交
398

M
mehaotian 已提交
399
这么做的目的是防止频繁上报引起的并发问题。所以上报请求不是时实发生的。
400

M
mehaotian 已提交
401
### uni-admin说明
402
**前端页面结构**
M
mehaotian 已提交
403

inkwalk's avatar
inkwalk 已提交
404 405 406 407
为了突出目标,仅注释出 uni 统计相关的文件夹及文件,其余与普通 uni-app 项目相同。新增页面可参考 uni-stat 中相似页面。

```bash
├── cloudfunctions
M
mehaotian 已提交
408 409 410 411 412 413
├── common                             # 样式
│   │── uni.css                        # 公共样式
│   └── uni-icons.css                  # icon样式
├── components                         # 自定义组件
├── js_sdk                             # js sdk
│   └── uni-stat                       # uni统计相关工具方法
inkwalk's avatar
inkwalk 已提交
414
│       └── util.js                      
M
mehaotian 已提交
415 416 417 418 419 420 421
├── pages                              # 页面
│   └── uni-stat                       # uni统计页面
│       │── channel                    # 渠道(app)
│       │   │── channel.vue            # 页面(下同)
│       │   └── fieldsMap.js           # 字段配置(下同)
│       │── device                     # 设备统计
│       │   │── activity               # 渠道/场景分析
inkwalk's avatar
inkwalk 已提交
422 423
│       │   │   │── activity.vue      
│       │   │   └── fieldsMap.js    
M
mehaotian 已提交
424
│       │   │── comparison             # 平台对比
inkwalk's avatar
inkwalk 已提交
425 426
│       │   │   │── comparison.vue      
│       │   │   └── fieldsMap.js    
M
mehaotian 已提交
427
│       │   │── overview               # 今日概览
inkwalk's avatar
inkwalk 已提交
428 429
│       │   │   │── overview.vue      
│       │   │   └── fieldsMap.js    
M
mehaotian 已提交
430
│       │   │── retention              # 留存
inkwalk's avatar
inkwalk 已提交
431 432
│       │   │   │── retention.vue      
│       │   │   └── fieldsMap.js    
M
mehaotian 已提交
433
│       │   │── stickiness             # 粘性
inkwalk's avatar
inkwalk 已提交
434 435
│       │   │   │── stickiness.vue      
│       │   │   └── fieldsMap.js    
M
mehaotian 已提交
436
│       │   └── trend                  # 趋势分析
inkwalk's avatar
inkwalk 已提交
437 438
│       │       │── trend.vue           
│       │       └── fieldsMap.js        
M
mehaotian 已提交
439
│       │── error                      # 错误分析
inkwalk's avatar
inkwalk 已提交
440 441
│       │   │── error.vue             
│       │   └── fieldsMap.js            
M
mehaotian 已提交
442
│       │── event                       # 事件分析
inkwalk's avatar
inkwalk 已提交
443 444
│       │   │── event.vue             
│       │   └── fieldsMap.js            
M
mehaotian 已提交
445
│       │── index                       # 统计首页
inkwalk's avatar
inkwalk 已提交
446 447
│       │   │── index.vue             
│       │   └── fieldsMap.js            
M
mehaotian 已提交
448
│       │── page-ent                    # 入口页
inkwalk's avatar
inkwalk 已提交
449 450
│       │   │── page-ent.vue             
│       │   └── fieldsMap.js            
M
mehaotian 已提交
451
│       │── page-res                    # 受访页
inkwalk's avatar
inkwalk 已提交
452 453
│       │   │── page-res.vue             
│       │   └── fieldsMap.js            
M
mehaotian 已提交
454
│       │── scene                       # 场景值(小程序)
inkwalk's avatar
inkwalk 已提交
455 456 457
│       │   │── scene.vue             
│       │   └── fieldsMap.js            
│       └── user                        # 用户统计
M
mehaotian 已提交
458
│           │── activity                # 渠道/场景分析
inkwalk's avatar
inkwalk 已提交
459 460
│           │   │── activity.vue      
│           │   └── fieldsMap.js    
M
mehaotian 已提交
461
│           │── comparison              # 平台对比
inkwalk's avatar
inkwalk 已提交
462 463
│           │   │── comparison.vue      
│           │   └── fieldsMap.js    
M
mehaotian 已提交
464
│           │── overview                # 今日概览
inkwalk's avatar
inkwalk 已提交
465 466
│           │   │── overview.vue      
│           │   └── fieldsMap.js    
M
mehaotian 已提交
467
│           │── retention               # 留存
inkwalk's avatar
inkwalk 已提交
468 469
│           │   │── retention.vue      
│           │   └── fieldsMap.js    
M
mehaotian 已提交
470
│           │── stickiness              # 粘性
inkwalk's avatar
inkwalk 已提交
471 472
│           │   │── stickiness.vue      
│           │   └── fieldsMap.js    
M
mehaotian 已提交
473
│           └── trend                   # 趋势分析
inkwalk's avatar
inkwalk 已提交
474 475 476 477 478 479 480 481 482 483 484 485
│               │── trend.vue           
│               └── fieldsMap.js        
├── static
├── store
├── admin.config.js
├── App.vue
├── main.js
├── mainfest.json
├── pages.json
├── postcss.config.js
└── uni.scss
```
486 487 488



M
mehaotian 已提交
489 490 491 492 493 494 495 496 497 498 499 500 501 502 503
### 服务端说明

**一、 uni统计服务端构成**

- `uni-config-center/uni-stat 配置模块`:给uni统计提供运行必要的配置参数。
- `uni-stat 公共模块`:数据处理模块,包括收集上报数据的处理入库及定时任务的数据处理。
- `uni-stat-receiver 上报数据接收器`:接收客户端上报数据并转发给公共模块处理。注意:该云对象依赖于`uni-id`公共模块。
- `uni-stat-cron 定时任务云函数`:触发定时任务并转发给公共模块处理。

**二、公共模块说明**

::: warning 注意
注意:uni统计公共模块依赖于 uniCloud配置中心(uni-config-center)
:::

M
mehaotian 已提交
504
``` bash
M
mehaotian 已提交
505 506 507 508 509 510 511 512 513 514 515
├── shared                              # 公共模块,提供公共函数库等支持。
│   │── create-api.js                   # 用来创建对外访问的实例
│   │── error.js                   		# 错误处理模块
│   │── index.js                   		# 入口文件,提供对外访问的基础模块
│   └── utils.js                     	# 工具函数库文件
├── stat                                # uni统计实际业务处理模块
│   │── lib                             # 工具类类库,提供日期计算、数据加密等额外功能支持。
│   │   │── date.js                     # 日期计算类文件
│   │   │── index.js                    # 入口文件,提供对外访问模块
│   │   └── uni-crypto.js               # 数据加密类文件,提供AES/MD5加密
│   │── mod                             # 数据模型,提供具体业务实现。
M
mehaotian 已提交
516 517 518
│   │   │── activeDevices.js            # 活跃设备模型,给周月维度的设备基础统计和留存统计提供数据,每日跑批合并,仅添加本周/本月首次访问的设备。
│   │   │── activeUsers.js              # 活跃用户模型,给周月维度的用户基础统计和留存统计提供数据,每日跑批合并,仅添加本周/本月首次访问的用户。
│   │   │── appCrashLogs.js             # 原生应用崩溃日志模型,记录原生应用的崩溃日志
M
mehaotian 已提交
519
│   │   │── base.js                     # 基类模型,提供基础服务支持
M
mehaotian 已提交
520 521 522 523 524 525
│   │   │── channel.js                  # 渠道模型,提供渠道和场景值数据
│   │   │── errorLog.js                 # 错误日志模型,记录上报的应用运行错误日志
│   │   │── errorResult.js              # 错误结果统计模型,统计汇总错误日志中的数据
│   │   │── event.js                    # 事件统计模型,提供应用的事件字典
│   │   │── eventLog.js                 # 事件日志模型,记录上报的事件日志
│   │   │── eventResult.js              # 事件结果统计,统计汇总事件日志中的数据
M
mehaotian 已提交
526
│   │   │── index.js                    # 入口文件,提供对外访问模块
M
mehaotian 已提交
527 528 529 530 531 532 533 534 535 536 537 538 539
│   │   │── loyalty.js                  # 设备/用户忠诚度(粘性)统计模型,统计设备/用户的粘性,粘性判断依据为:访问时长和访问页面数量
│   │   │── page.js                     # 页面模型,提供应用的页面字典
│   │   │── pageLog.js                  # 页面日志模型,记录上报的页面访问日志
│   │   │── pageResult.js               # 页面结果统计模型,统计汇总页面访问日志中的数据
│   │   │── platform.js                 # 应用平台模型,提供应用的平台字典
│   │   │── runErrors.js                # 运行错误日志,记录数据统计时运行出错的日志
│   │   │── scenes.js                   # 场景值模型,提供应用渠道和小程序场景值的数据字典
│   │   │── sessionLog.js               # 基础会话日志模型,记录设备访问时产生的会话日志
│   │   │── shareLog.js                 # 分享日志模型,记录触发分享事件的日志
│   │   │── statResult.js               # 基础数据结果统计模型,统计汇总会话数据包括不限于设备/用户的数量、访问量、活跃度(日活、周活、月活)、留存率(日留存、周留存、月留存)、跳出率、访问时长等数据
│   │   │── uniIDUsers.js               # uni-id 用户模型,提供uni-id用户数据查询
│   │   │── userSessionLog.js           # 用户会话日志模型,记录登录用户的会话日志
│   │   └── version.js                  # 应用版本模型,提供应用的版本号字典
M
mehaotian 已提交
540 541 542 543 544 545 546 547 548 549 550 551 552 553
│   │── receiver.js                     # 上报数据接收器,数据上报功能的分发入口文件
│   └── stat.js                         # 数据统计调度处理模块,数据统计及日志清理功能的分发入口文件
└── index.js                            # 代理入口文件,提供对外访问的uni-stat对象
```

##### 三、 公共模块配置项说明
uni统计配置项存放于uniCloud配置中心(`uni-config-center`)下的 `uni-stat/config.json`文件中,用户可根据自身系统需要自定义各配置项的值。

::: warning 注意
注意:修改uni统计配置项后需要重新上传公共模块`uni-config-center`后才会生效。
:::

**基础参数**

M
mehaotian 已提交
554 555
|配置项				|默认值		|说明																																																|
| :--------:		|:---------:|:-------------------:																																												|
M
mehaotian 已提交
556
|  debug			|  false	|开启调试模式 true: 开启,false:关闭,开启后会产生大量日志,生产环境请关闭。																														|
M
mehaotian 已提交
557
|  redis			|  false	|开启redis缓存,开启后可以降低数据库查询压力,提升uni统计性能,可按需决定是否开启。[开启方法](#开启redis缓存)																					|
M
mehaotian 已提交
558 559
|  cachetime		|  604800	|redis缓存有效期,单位秒。																																											|
|  sessionExpireTime|  1800		|会话过期时间,该配置用来判断当前会话是否已过期,一般情况下无需修改此项。																															|
M
mehaotian 已提交
560
|  realtimeStat		|  true		|开启实时统计,true: 开启,false:关闭,开启后会每小时统计一次,数据库读写次数会增多,可按需决定是否开启。																							|
M
mehaotian 已提交
561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
|  cronMin			|  false	|开启分钟级定时任务,true: 开启,false:关闭。开启后定时任务将细分到分钟级执行,分摊数据计算压力,适合应用日活较大或有特殊需求的用户群体。开启方法见下方 [开启分钟级定时任务](#开启分钟级定时任务)。	|
|  cron				|  -		|用于配置定时任务触发时间,详情见下方[定时任务配置说明](#定时任务配置说明)。																														|
|  batchInsertNum	|  5000		|当有批量写入操作时,限制单次写入数据库的最大条数。为防止写入超时,最大值为5000条。																													|
|  errorCheck		|  -		|错误检测,此项用于在规定时间内限制相同的错误日志写入数据库,防止有高频错误产生时造成大量的数据库写入操作。[详情](#错误检测配置说明)																|
|  cleanLog			|  -		|日志清理,此项用于配置定时清理过期的日志,减少数据库数据的存储量,提升uni统计性能。[详情](#日志清理配置说明)																						|

#### 开启redis缓存
::: warning 注意
开启redis缓存前,需要先确认是否已在布署uni统计的服务空间内购买redis服务,如果没有购买则需要先购买redis服务。
:::

**开启步骤:**
1. 修改uni统计配置项将`redis`参数的值改为`true`
2. 分别在数据`上报数据接收器(uni-stat-receiver)``定时任务云函数(uni-stat-cron)`下的`package.json`文件中添加redis拓展库。
3. 重新上传部署数据`上报数据接收器(uni-stat-receiver)``定时任务云函数(uni-stat-cron)``配置中心(uni-config-center)`

``` javascript
//配置uni-stat-receiver的redis拓展库
{
	"name": "uni-stat-receiver",
	"dependencies": {
		"uni-id": "file:../../../../uni-id/uniCloud/cloudfunctions/common/uni-id",
		"uni-stat": "file:../common/uni-stat"
	},
	"extensions": {
		"uni-cloud-jql": {},
		"uni-cloud-redis": {} // 配置为此云函数开启redis扩展库,值为空对象留作后续追加参数,暂无内容。如拷贝此配置项到package.json文件,切记去除注释。
	}
M
mehaotian 已提交
589
}
M
mehaotian 已提交
590 591 592 593 594
```


``` javascript
//配置uni-stat-cron的redis拓展库
M
mehaotian 已提交
595 596 597 598 599 600 601 602 603 604 605 606
{
	"name": "uni-stat-cron",
	"version": "1.0.0",
	"description": "",
	"main": "index.js",
	"scripts": {
		"test": "echo \"Error: no test specified\" && exit 1"
	},
	"author": "",
	"license": "ISC",
	"dependencies": {
		"uni-stat": "file:../common/uni-stat"
M
mehaotian 已提交
607 608 609
	},
	"extensions": {
		"uni-cloud-redis": {} // 配置为此云函数开启redis扩展库,值为空对象留作后续追加参数,暂无内容。如拷贝此配置项到package.json文件,切记去除注释。
M
mehaotian 已提交
610 611 612 613 614 615 616 617 618 619 620 621 622
	},
	"cloudfunction-config": {
		"concurrency": 1,
		"memorySize": 512,
		"timeout": 600,
		"triggers": [
			{
				"name": "uni-stat-cron",
				"type": "timer",
				"config": "0 0 * * * * *"
			}
		]
	}
M
mehaotian 已提交
623 624 625 626 627 628 629 630 631 632 633 634
}
```


#### 定时任务配置说明
`cron` 参数用于配置定时任务触发时间,一般无需修改此项。

|参数		|说明																																|
| :--------:|:-------------------:																												|
|  type		|定时任务类型:如 `stat`:基础数据统计																								|
|  time		|触发时间表达式:`* * * *` 共四位,由左到右分别代表:星期(1-7代表周一到周日)/日/时/分。例:每天晚上0点0分触发,应写作 `* * 0 0`	|

M
mehaotian 已提交
635
目前定时任务类型有(`以下括号内的内容表示开启分钟级统计后定时任务的触发时间`):
M
mehaotian 已提交
636

M
mehaotian 已提交
637 638 639 640 641
- `stat`:基础数据统计,统计维度包括:
  - 实时统计,默认`每小时(0分)`触发,统计上一小时的基础数据
  - 日统计,默认`每天上午1点(10分)`触发,统计前一天的基础数据
  - 周统计,默认`每周一上午1点(20分)`触发,统计上一周的基础数据
  - 月统计,默认`每月1号上午3点(30分)`触发,统计上一月的基础数据
M
mehaotian 已提交
642

M
mehaotian 已提交
643 644 645 646
- `retention-device`:设备留存数据统计,统计维度包括:
  - 日统计,默认`每天上午2点(20分)`触发,统计前一天的设备留存数据
  - 周统计,默认`每周一上午2点(30分)`触发,统计上一周的设备留存数据
  - 月统计,默认`每月1号上午4点(30分)`触发,统计上一月的设备留存数据
M
mehaotian 已提交
647

M
mehaotian 已提交
648 649 650 651
- `retention-user`:用户留存数据统计,统计维度包括:
  - 日统计,默认`每天上午3点(40分)`触发,统计前一天的用户留存数据
  - 周统计,默认`每周一上午5点(30分)`触发,统计上一周的用户留存数据
  - 月统计,默认`每月1号上午6点(40分)`触发,统计上一月的用户留存数据
M
mehaotian 已提交
652

M
mehaotian 已提交
653 654
- `active-device`:活跃设备数据归档,统计维度包括:
  - 日归档,默认`每天上午0点(10分)`触发,归档前一天的活跃设备数据,注意:此项数据要保持在`基础数据统计``设备留存数据统计``用户留存数据统计`中的周统计、月统计触发之前执行。
M
mehaotian 已提交
655

M
mehaotian 已提交
656 657
- `active-user`:活跃用户数据归档,统计维度包括:
  - 日归档,默认`每天上午0点(20分)`触发,归档前一天的活跃用户数据,注意:此项数据要保持在`基础数据统计``设备留存数据统计``用户留存数据统计`中的周统计、月统计触发之前执行。
M
mehaotian 已提交
658

M
mehaotian 已提交
659 660
- `page`:页面数据统计,统计维度包括:
  - 日统计,默认`每天上午3点(20分)`触发,统计前一天的页面数据
M
mehaotian 已提交
661

M
mehaotian 已提交
662 663
- `event`:事件数据统计,统计维度包括:
  - 日统计,默认`每天上午4点(20分)`触发,统计前一天的事件数据
M
mehaotian 已提交
664

M
mehaotian 已提交
665 666
- `error`:错误数据统计,统计维度包括:
  - 日统计,默认`每天上午5点(20分)`触发,统计前一天的错误数据
M
mehaotian 已提交
667 668 669 670


#### 开启分钟级定时任务

M
mehaotian 已提交
671 672 673
::: warning 注意
注意:因云函数运行时长为最大10分钟,所以开启分钟级定时任务后,如果想重新设置定时任务触发时间的话,需要确保各定时任务之间的触发间隔时间要大于等于10分钟,防止出现运行超时的问题。
:::
M
mehaotian 已提交
674 675 676 677 678 679 680 681 682 683

- 阿里云服务空间开启步骤:

1. 因阿里云服务空间默认不支持分钟级定时器,必须先向DCloud申请分钟级定时器后再开启。[申请方式](https://uniapp.dcloud.io/uniCloud/price.html#aliyun)
2. 修改uni统计配置项将`cronMin`参数的值改为`true`
3. 修改`定时任务云函数(uni-stat-cron)`下的`package.json`文件中的触发器配置。
4. 重新上传部署`定时任务云函数(uni-stat-cron)``配置中心(uni-config-center)`

``` javascript
//config选项为阿里云定时器的cron表达式 将原小时级表达式 "config": "0 0 * * * * *" 更改为分钟级表达式 "config": "0 * * * * * *" 后重新上传部署云函数即可.
M
mehaotian 已提交
684 685 686 687 688 689 690 691 692 693
"cloudfunction-config": {
	"concurrency": 1,
	"memorySize": 256,
	"timeout": 600,
	"triggers": [
		{
			"name": "uni-stat-cron",
			"type": "timer",
			"config": "0 * * * * * *"
		}
M
mehaotian 已提交
694 695 696 697 698 699 700 701 702 703 704 705
	]
}
```

- 腾讯云服务空间开启步骤:

1. 修改uni统计配置项将`cronMin`参数的值改为`true`
2. 修改`定时任务云函数(uni-stat-cron)`下的`package.json`文件中的触发器配置。
3. 重新上传部署`定时任务云函数(uni-stat-cron)``配置中心(uni-config-center)`

``` javascript
//config选项为阿里云定时器的cron表达式 将原小时级表达式 "config": "0 0 * * * * *" 更改为分钟级表达式 "config": "0 * * * * * *" 后重新上传部署云函数即可.
M
mehaotian 已提交
706 707 708 709 710 711 712 713 714 715
"cloudfunction-config": {
	"concurrency": 1,
	"memorySize": 256,
	"timeout": 600,
	"triggers": [
		{
			"name": "uni-stat-cron",
			"type": "timer",
			"config": "0 * * * * * *"
		}
M
mehaotian 已提交
716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748
	]
}
```


#### 错误检测配置说明

`errorCheck`参数用于在规定时间内限制相同的错误日志写入数据库,防止有高频错误产生时造成大量的数据库写入操作,可按需开启或关闭。

|参数		|说明								|
| :--------:|:-------------------:				|
| needCheck	|是否需要检测:true:是;false:否	|
| checkTime	|错误检测间隔时间,单位`分钟`。		|


#### 日志清理配置说明

`cleanLog`参数用于配置定时清理过期的日志,减少数据库数据的存储量,提升uni统计性能。

|参数			|说明																																								|
| :--------:	|:-------------------:																																				|
| open			|是否开启日志清理:true:是;false:否																																|
| reserveDays	|各项日志的保留天数配置,参数格式:`日志类型:保留天数`,例如: `sessionLog:31`代表保留31天的会话日志,保留天数设置为0时表示永久保留(此举会累积大量无用数据,不推荐)	|

目前可配置的日志类型有:

- `基础会话日志:sessionLog`,默认保留`31`天的日志。注意:因设备留存统计中最长需要统计30后的留存数据, 所以基础会话日志要至少保存`31`天的日志,否则会对设备留存统计造成影响。
- `用户会话日志:userSessionLog`,默认保留`31`天的日志。注意:因用户留存统计中最长需要统计30后的留存数据, 所以用户会话日志要至少保存`31`天的日志,否则会对用户留存统计造成影响。
- `页面日志:pageLog`,默认保留`7`天的日志。
- `事件日志:eventLog`,默认保留`7`天的日志。
- `分享日志:shareLog`,默认保留`7`天的日志。
- `错误日志:errorLog`,默认保留`7`天的日志。

M
mehaotian 已提交
749 750 751 752 753 754
::: warning 注意事项
- 客户端和统计后台两个项目务必关联同一个服务空间,且uni-admin中所有云函数、公共模板等都已经上传部署到该服务空间
- 使用 uni 统计必须配置 APPID 才能正常使用。[DCloud的Appid有什么用,如需转让应用怎么做](https://ask.dcloud.net.cn/article/35907)
- 应用在运行、调试时不会上报统计数据,仅在发行后,并启动新版的App、h5、小程序,才会上报数据。
- 不支持 CLI 项目
:::
755

M
mehaotian 已提交
756 757
<!-- ## 扩展和自定义方式
uni统计提供了基础的数据报表,如不能达到预期的数据采集,可以在客户端通过 `uni.report(eventKey,param)`  自由上报数据 ,并通过 uni-admin 增加页面 ,自行统计数据。
M
mehaotian 已提交
758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780

### uni.report 基础用法 

这里列出 `uni.report(eventKey,param)` 的基本用法,完整`API`查看:[详情](https://uniapp.dcloud.io/api/other/report.html)

`uni.report(eventKey,param)` 有两个参数。
- eventKey  自定义事件名称
- param		自定义事件参数

``` js
// 参数支持字符串
uni.report('购买','购买成功')

// 参数支持对象
uni.report('购买',{
	id:'1000',
	name:'上衣',
	price:'998',
	msg:'购买成功'
	// ...
})
```

781
 -->
M
mehaotian 已提交
782 783