# 基础使用
# 1.开启统计
在业务 App 项目的 manifest.json 里,选择 uni统计配置 项,根据需求,选择开通 uni统计 ,勾选 2.0 开启新版统计。
可选择开启调试模式将上报数据打印到控制台。
将
manifest.json -> uniStatistics下的debug字段设置为true|false,可以开启关闭uni统计调试模式
# 2.添加白名单
如果是小程序之类的需要为部署的 uni 统计对应的云厂商域名配置白名单。
# 3.部署后台 admin 项目
两种方式:
- 插件市场通过 uni-admin (opens new window) 插件一键部署在你的
uniapp服务空间上。 - 手动创建项目,并完成关联服务空间、部署云端资源等操作。
# 4.关联服务空间
# (1)创建云开发环境
右键并选择 创建uniCloud云开发环境 -> 支付宝云|阿里云|腾讯云(数据量大推荐使用支付宝云 + 扩展数据库 (opens new window)),会创建出一个云服务目录。
# (2)为云环境关联云服务
目录右键并选择关联云服务空间或项目,在打开的窗口中选择对应uni-admin项目关联的服务空间
# 5.添加应用
运行 uni-admin 项目 添加要统计的 uniapp 应用,然后默认配置每个整点零几分就可以看到数据了
# 拓展
# 1.节约资源
开启
redis缓存:先在服务空间内购买redis,然后修改uni统计配置项,redis->false关闭内容统计:
pageDetailStat->false关闭实时统计:
realtimeStat->falseuni统计配置项:uni-config-center目录下右键下载公共模块,在uni-stat/config.json中修改配置修改上报时间:默认上报时间为 10 秒,可以增加上报时间间隔
在
uni统计配置 -> 前端数据上报周期中修改
# 2.内容统计
内容统计是统计制定页面的访问、分享等数据,需要制定访问规则,需要 url 携带特定的参数。
页面 不同
url表示一个不同的页面,如在pages.json --> pages下的每一项都表示一个不同页面内容页 相同的
url,不同的参数值表示一个内容页面,即同一个页面会有不同的内容统计(目的) 比如统计某个商品详情的访问情况,"商品url"?pid=="pid123",针对pid为pid123的商品详情地址统计的数据就是需要的结果内容名称 可以让用户直观感受的名称,如某个商品的详情,某个新闻的描述可通过一下方式定义
- 采集原生导航栏标题(通过 pages.json 获取)
- 采集 uni.setNavigationBarTitle() (opens new window)
- 采集 uni.reprot() (opens new window)
# 3.采集的数据
在应用中上报的数据可以在绑定的服务空间->云数据库中找到。
用户统计和页面统计:uni-stat-result 表中。
支付统计:uni-stat-pay-result 表中。
自定义事件(通过 uni.report 上报):uni-stat-event-logs 表中。

查询表中数据:(类似 ORM(对象关系映射)的链式调用风格)
const db = uniCloud.database();
db.collection("uni-stat-result")
.get()
.then((res) => {
console.log("uni-stat-result 全部数据:", res.result.data);
})
.catch((err) => {
console.error("查询失败:", err);
});
2
3
4
5
6
7
8
9
更复杂的查询:
比如按照时间和维度分组计算统计数据,并获取每组的最后开始时间
db.collection(this.tableName)
.where(`start_time==19700000`)
.field(
`${stringifyField(
fieldsMap
)}, dimension, stat_date.date_str as stat_time, start_time`
)
.groupBy(`stat_time, dimension`)
.groupField(
stringifyGroupField(fieldsMap) + ",last(start_time) as start_time"
)
//.field(`pay_total_amount,pay_order_count, dimension, start_time`)
.get()
.then((res) => {
console.log(res);
});
// 对应的MySQL语法
SELECT [field指定的字段]
FROM [this.tableName对应的表名]
WHERE [where条件]
GROUP BY [groupBy指定的字段]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 3.用户统计
需在
uni-stat/config.json中开启pageDetailStat,开启后会产生大量日志,请按需开启。
用户数据存在于服务空间 uni-id-users 表中。
用户统计依赖 uni-id 体系,如果一定要使用 uni-admin 的用户统计,要么使用 uni-id 用户体系,要么你自己在业务中将用户数据统计好,更新到 uni-stat-result 表中。或者通过 uni.report自主上报或者和后端约定接口,然后后台自主实现。
迂回方案:
维护两套用户体系,用户注册时同时为其注册 uni-id,用户登录时判断 uni-id 中是否存在对应用户没有则为其注册并静默登录。优点是侵入少可维持现状,缺点是承担维护两份用户体系的成本。
1.修改云函数,取消注册校验
2.提取出注册、登录、退出方法
const uniIdCo = uniCloud.importObject("uni-id-co", {
// 是否自动弹窗
errorOptions: {
type: "toast",
},
});
// 登录
uniIdCo
.login({
username: "user1",
password: "123456@user1",
})
.then((e) => {});
// 注册
uniIdCo
.registerUser({
username: "user1",
password: "123456@user1",
password2: "123456@user1",
})
.then((e) => {});
// 退出
async function logout() {
// 1. 已经过期就不需要调用服务端的注销接口 2.即使调用注销接口失败,不能阻塞客户端
if (uniCloud.getCurrentUserInfo().tokenExpired > Date.now()) {
try {
await uniIdCo.logout();
} catch (e) {
console.error(e);
}
}
uni.removeStorageSync("uni_id_token");
uni.setStorageSync("uni_id_token_expired", 0);
this.setUserInfo(
{},
{
cover: true,
}
);
uni.$emit("uni-id-pages-logout");
}
2
3
4
5
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
38
39
40
41
# 4.支付统计
需要接入 uni-pay,且 uni-pay 部分依赖于 uni-id 体系。