From 8806dba38d4356389e3fb029cbff0fd29cc30e70 Mon Sep 17 00:00:00 2001
From: mehaotian <490272692@qq.com>
Date: Tue, 12 Nov 2024 17:38:36 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=BE=E5=BC=80=E7=BB=9F=E8=AE=A1?=
=?UTF-8?q?=E5=85=A5=E5=8F=A3=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=BB=9F=E8=AE=A1?=
=?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BE=8B=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
App.uvue | 74 +++----
main.uts | 24 +--
pages.json | 9 +
pages/API/uni-stat/uni-stat.uvue | 52 +++++
uni_modules/uni-stat/plugin.uts | 40 ++--
uni_modules/uni-stat/readme.md | 189 +-----------------
.../uni-stat/utssdk/common/core/stat.uts | 23 ++-
uni_modules/uni-stat/utssdk/index.uts | 4 +-
uni_modules/uni-stat/utssdk/interface.uts | 82 +++-----
9 files changed, 192 insertions(+), 305 deletions(-)
create mode 100644 pages/API/uni-stat/uni-stat.uvue
diff --git a/App.uvue b/App.uvue
index 6c87c531..3e3bdc42 100644
--- a/App.uvue
+++ b/App.uvue
@@ -49,15 +49,15 @@
// 统计上报 - 应用启动
// #ifdef APP-ANDROID || APP-IOS || WEB
- // uni.report({
- // name: 'uni-app-launch',
- // options: res,
- // success(res_data) {
- // console.log(res_data);
- // }, fail(err) {
- // console.log(err);
- // }
- // })
+ uni.report({
+ name: 'uni-app-launch',
+ options: res,
+ success(res_data) {
+ console.log(res_data);
+ }, fail(err) {
+ console.log(err);
+ }
+ })
// #endif
// #ifdef APP
if (process.env.NODE_ENV !== 'development') { //真机运行可以注释此条件
@@ -90,14 +90,14 @@
// #ifdef APP-ANDROID || APP-IOS || WEB
// 统计上报 - 应用显示
- // uni.report({
- // name: 'uni-app-show',
- // success(res_data) {
- // console.log(res_data);
- // }, fail(err) {
- // console.log(err);
- // }
- // })
+ uni.report({
+ name: 'uni-app-show',
+ success(res_data) {
+ console.log(res_data);
+ }, fail(err) {
+ console.log(err);
+ }
+ })
// #endif
},
onHide: function () {
@@ -107,14 +107,14 @@
// #ifdef APP-ANDROID || APP-IOS || WEB
// 统计上报 - 应用进入后台
- // uni.report({
- // name: 'uni-app-hide',
- // success(res) {
- // console.log(res);
- // }, fail(err) {
- // console.log(err);
- // }
- // })
+ uni.report({
+ name: 'uni-app-hide',
+ success(res) {
+ console.log(res);
+ }, fail(err) {
+ console.log(err);
+ }
+ })
// #endif
},
// #ifdef APP-ANDROID
@@ -142,18 +142,18 @@
// #endif
onError(err : any) {
console.log('App onError', err)
- // // #ifdef APP-ANDROID || APP-IOS || WEB
- // // 统计上报 - 应用发生错误
- // uni.report({
- // name: 'uni-app-error',
- // options: err,
- // success(res) {
- // console.log(res);
- // }, fail(err) {
- // console.log(err);
- // }
- // })
- // // #endif
+ // #ifdef APP-ANDROID || APP-IOS || WEB
+ // 统计上报 - 应用发生错误
+ uni.report({
+ name: 'uni-app-error',
+ options: err,
+ success(res) {
+ console.log(res);
+ }, fail(err) {
+ console.log(err);
+ }
+ })
+ // #endif
},
methods: {
increasetLifeCycleNum() {
diff --git a/main.uts b/main.uts
index 7b6dc58a..3c691bc4 100644
--- a/main.uts
+++ b/main.uts
@@ -1,27 +1,27 @@
// 仅测试 console.log 时机问题
import './test-main-console.uts'
// #ifdef APP-ANDROID || APP-IOS || WEB
-// import { uniStat } from '@/uni_modules/uni-stat/plugin.uts'
+import { uniStat } from '@/uni_modules/uni-stat/plugin.uts'
// #endif
import App from './App.uvue'
import { createSSRApp } from 'vue'
-// // 统计配置
-// const collectItems = {
-// uniStatPageLog: true
-// }
+// 统计配置
+const uniStatcollectItems = {
+ uniStatPageLog: true
+}
-// const statOptions = {
-// debug: false,
-// collectItems: collectItems,
-// }
+const uniStatOptions = {
+ debug: true,
+ collectItems: uniStatcollectItems,
+}
export function createApp() {
const app = createSSRApp(App)
- // // #ifdef APP-ANDROID || APP-IOS || WEB
- // app.use(uniStat, statOptions)
- // // #endif
+ // #ifdef APP-ANDROID || APP-IOS || WEB
+ app.use(uniStat, uniStatOptions)
+ // #endif
// app.mixin({
// onReady() {
// setTimeout(() => {
diff --git a/pages.json b/pages.json
index b2947986..4ecf1046 100644
--- a/pages.json
+++ b/pages.json
@@ -1216,6 +1216,15 @@
"navigationBarTitleText": "推送"
}
},
+ // #ifdef APP-ANDROID || APP-IOS || WEB
+ {
+ "path" : "pages/API/uni-stat/uni-stat",
+ "style" :
+ {
+ "navigationBarTitleText" : "统计"
+ }
+ },
+ // #endif
// #ifdef APP-ANDROID || APP-IOS || WEB
{
"path": "pages/API/dialog-page/dialog-page",
diff --git a/pages/API/uni-stat/uni-stat.uvue b/pages/API/uni-stat/uni-stat.uvue
new file mode 100644
index 00000000..2a940d80
--- /dev/null
+++ b/pages/API/uni-stat/uni-stat.uvue
@@ -0,0 +1,52 @@
+
+
+
+
+
+ 当前页面调用API均为模拟,请查看文档,在特定场景下使用以下 API。请在main.uts中设置统计debug配置为true,并点击按钮查控制台输出。
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-stat/plugin.uts b/uni_modules/uni-stat/plugin.uts
index b51bc138..b856d2f6 100644
--- a/uni_modules/uni-stat/plugin.uts
+++ b/uni_modules/uni-stat/plugin.uts
@@ -1,26 +1,42 @@
-import { Stat } from '@/uni_modules/uni-stat'
-// // UniStatOptions, UniStatCollectItemsOptions
+import { Stat } from '@/uni_modules/uni-stat'
+// // UniStatOptions, UniStatCollectItemsOptions
// 实例统计sdk
const stat_instance = Stat.getInstance()
const lifecycle = defineMixin({
- // onLaunch(options : OnLaunchOptions) { stat_instance.onLaunch(options, this) },
+ // onLaunch(options : OnLaunchOptions) { stat_instance.onLaunch(options, this) },
// @ts-ignore
- onLoad() { stat_instance.onLoad(this) },
+ onLoad() {
+ if (this instanceof Page) {
+ stat_instance.onLoad(this)
+ }
+ },
// @ts-ignore
- onShow() { stat_instance.onShow(this) },
+ onShow() {
+ if (this instanceof Page) {
+ stat_instance.onShow(this)
+ }
+ },
// @ts-ignore
- onHide() { stat_instance.onHide(this) },
+ onHide() {
+ if (this instanceof Page) {
+ stat_instance.onHide(this)
+ }
+ },
// @ts-ignore
- onUnload() { stat_instance.onUnload(this) },
- // onError(error : string) { stat_instance.onError(error) }
+ onUnload() {
+ if (this instanceof Page) {
+ stat_instance.onUnload(this)
+ }
+ },
+ // onError(error : string) { stat_instance.onError(error) }
})
export const uniStat = definePlugin({
- install(app : VueApp, options : UTSJSONObject) {
- stat_instance.init(options)
- app.mixin(lifecycle)
- }
+ install(app : VueApp, options : UTSJSONObject) {
+ stat_instance.init(options)
+ app.mixin(lifecycle)
+ }
})
diff --git a/uni_modules/uni-stat/readme.md b/uni_modules/uni-stat/readme.md
index ac37575f..3e0779fd 100644
--- a/uni_modules/uni-stat/readme.md
+++ b/uni_modules/uni-stat/readme.md
@@ -1,185 +1,10 @@
-# uni-app x 专用的 uni 统计插件
+# uni统计 for uni-app x
+>
> 注意:当前版本 uni 统计仅支持 uni-app x ,与 uni统计1.0和uni统计2.0 数据不兼容。
+>
+> uni统计for uni-app x需要单独下载使用,无需在 manifest.json 中配置开关,只需在前端代码中配置即可。
+>
+> 依赖 `Hbuilder X Alpha版 4.32+`。
-## 配置 uni统计后台
-与uni统计2.0后台配置一样,只是数据不互通,详情参考 [创建 admin 项目](https://uniapp.dcloud.net.cn/uni-stat-v2.html#%E5%90%8E%E5%8F%B0%E6%8A%A5%E8%A1%A8%E9%85%8D%E7%BD%AE)
-
-## 前端配置
-因为当前版本 uni统计是单独的插件,需要在插件市场中下载使用
-
-[下载uni统计](https://ext.dcloud.net.cn/plugin?name=uni-stat)
-
-
-### 配置说明
-
-**uniStatistics说明**
-
-|字段 | 类型 | 默认值 | 可选值 | 说明 |
-|:-: |:-: |:-: |:-: |:-: |
-|debug | Boolean |false | true/ false |开启统计调试模式 ,会产生大量日志,且会在开发阶段上报数据,应用发布请关闭此项 |
-|reportInterval | Number |10 | - |前端数据上报周期 |
-|collectItems |Object |- | - |采集项配置 |
-
-**collectItems 采集项配置说明**
-
-|字段 |类型| 默认值 |可选值 |说明|
-|:-:|:-: |:-: |:-: |:-:|
-|uniPushClientID| Boolean |false| true/false |是否开启推送PushClientID的采集|
-|uniStatPageLog| Boolean |true| true/false |是否开启页面数据采集|
-
-### 如何引用
-
-在 main.uts 中 ,通过vue插件的方式加载 uni统计
-
-```js
-import App from './App.uvue'
-import { createSSRApp } from 'vue'
-
-// 引入uni统计插件
-import { uniStat } from '@/uni_modules/uni-stat/plugin.uts'
-
-// uni统计采集项配置
-const collectItems = {
- uniStatPageLog: true
-}
-
-// uni统计基础配置
-const statOptions = {
- debug: true,
- collectItems: collectItems
-}
-
-export function createApp() {
- const app = createSSRApp(App)
-
- // 载入uni统计插件 ,use 第二个参数不能为空,如需使用默认配置,请传入 {}
- app.use(uniStat, statOptions)
-
- return {
- app
- }
-}
-
-```
-
-### 如何使用
-因版本限制,uni统计无法自动采集应用相关的数据,如应用启动、进入后台、进入前台等信息,需要用户手动调用 uni.report() 来实现对应的数据采集。
-
-
-**使用示例**
-
-```js
-
-
-```
-
-### 影响范围
-`uni-app-launch` 是整个统计的入口,会采集应用启动的相关数据会影响的统计数据为:
-- 日活
-- 新增
-- 总设备数
-
-`uni-app-show` 是应用从后台进入前台调用,会影响:
-- 日活
-
-`uni-app-hide` 是应用从前台进入后台调用,会影响:
-- 页面访问次数
-
-
-
-### uni.report(OBJECT) 说明
-
-**OBJECT参数说明**
-|参数名 |类型 |必填 |说明 |
-|:-: |:-: |:-: |:-: |
-|name | String | 是 |事件名称 ,内置名称见下方 **name 内置事件说明** |
-|options | Any | 否 |事件自定义参数 |
-|success | Function| 否 |接口调用成功的回调函数 |
-|fail |Function | 否 |接口调用失败的回调函数 |
-|complete | Function| 否 |接口调用结束的回调函数(调用成功、失败都会执行) |
-
-
-**name 内置事件说明**
-
-|事件名 |调用声明周期 |事件说明 |
-|:-: |:-: |:-: |
-|uni-app-launch | App.onLaunch| 应用启动 |
-|uni-app-show | App.onShow | 应用进入前台 |
-|uni-app-hide | App.onHide | 应用进入后台 |
-|uni-app-error | App.onError | 应用发生错误 |
-|title | any | 内容统计采集标题 |
-
-
-**如何使用自定义上报**
-```js
-// 参数支持字符串
-uni.report({
- name:'购买',
- options:'购买成功'
-})
-
-// 参数支持对象
-uni.report({
- name:'购买',
- options:{
- id:'1000',
- name:'上衣',
- price:'998',
- msg:'购买成功'
- // ...
- }
-})
-
-```
-
-
+uni统计`uni-app x`版本,[使用教程](https://uniapp.dcloud.net.cn/uni-stat-uniappx)
diff --git a/uni_modules/uni-stat/utssdk/common/core/stat.uts b/uni_modules/uni-stat/utssdk/common/core/stat.uts
index af935dac..69ed4197 100644
--- a/uni_modules/uni-stat/utssdk/common/core/stat.uts
+++ b/uni_modules/uni-stat/utssdk/common/core/stat.uts
@@ -66,7 +66,7 @@ export class Stat {
* 初始化插件参数
* @param {Object} options
*/
- init(options : UTSJSONObject) {
+ init(options : UTSJSONObject) {
// 插件挂载玩成,可以进行后续操作
Stat.is_register = true
@@ -98,7 +98,7 @@ export class Stat {
* 显示页面或应用进入前台
* @param {ComponentPublicInstance} appInstance 应用实例
*/
- onShow(appInstance : Page) {
+ onShow(appInstance : Page) {
this.isHide = false
// @ts-ignore
const mptype = is_page(appInstance)
@@ -223,7 +223,7 @@ export class Stat {
}
// 自定义参数上报
// fn : ErrorCallback
- appEvent(name : string, options : any | null = null, fn : ErrorCallback) {
+ appEvent(name : string, options : any | null = null, fn : ErrorCallback) {
if (!Stat.is_register) {
fn(false, '统计服务尚未初始化,请在main.uts中引入统计插件。')
return
@@ -246,20 +246,29 @@ export class Stat {
return
}
if (name == 'uni-app-show') {
-
this.registerEvent(StatType.LifeCycleAppShow, null, null)
return
}
if (name == 'uni-app-hide') {
-
this.registerEvent(StatType.LifeCycleAppHide, null, null)
return
- }
+ }
+
+ if (name == 'uni-page-show') {
+ this.report.pageShow(options as Page)
+ return
+ }
+
+ if (name == 'uni-page-hide') {
+ this.report.pageHide(options as Page)
+ return
+ }
+
if (name == 'uni-app-error') {
this.registerEvent(StatType.LifeCycleError, null, null, options)
return
- }
+ }
// 校验 type 参数
const is_calibration = calibration(name, options)
diff --git a/uni_modules/uni-stat/utssdk/index.uts b/uni_modules/uni-stat/utssdk/index.uts
index 4c10de4f..9af3a597 100644
--- a/uni_modules/uni-stat/utssdk/index.uts
+++ b/uni_modules/uni-stat/utssdk/index.uts
@@ -25,5 +25,5 @@ export const report : Report = function (options : ReportOptions) {
}
export { Stat } from './common/core/stat.uts'
-// // --- 导出统计类型 ---
-export { UniStatOptions, UniStatCollectItemsOptions } from './interface.uts'
\ No newline at end of file
+// --- 导出统计类型 ---
+export { UniStatOptions, UniStatCollectItemsOptions } from './interface.uts'
diff --git a/uni_modules/uni-stat/utssdk/interface.uts b/uni_modules/uni-stat/utssdk/interface.uts
index f74ac992..bfcefc07 100644
--- a/uni_modules/uni-stat/utssdk/interface.uts
+++ b/uni_modules/uni-stat/utssdk/interface.uts
@@ -1,4 +1,7 @@
-export type ReportSuccess = {
+export type ReportSuccess = {
+ /**
+ * 成功的详细信息
+ */
errMsg : string,
}
@@ -9,12 +12,9 @@ export type ReportFail = {
errMsg : string,
}
-
-
export type ReportOptions = {
/**
- * 自定义事件名称
- * 内置名称(不允许覆盖):
+ * 自定义事件名称,内置名称(不允许覆盖):
* uni-app-launch : 应用启动
* uni-app-show : 应用进入前台
* uni-app-hide : 应用进入后台
@@ -34,28 +34,24 @@ export type ReportOptions = {
*/
fail ?: (res : ReportFail) => void
/**
- * 接口调用成功的回调
+ * 接口调用成功的回调函数
*/
complete ?: (res : any) => void
}
-export type ReportResult = {
-
-}
+export type ReportResult = {}
/**
* 自定义事件信息
* @param {ReportOptions} options
*
-*
-* @tutorial https://uniapp.dcloud.net.cn/xxxx
* @platforms APP-IOS = ^9.0,APP-ANDROID = ^22
* @since 4.25
*/
export type Report = (options : ReportOptions) => void
-interface Uni {
+export interface Uni {
/**
* 统计自定义事件
* @description 统计自定义事件上报
@@ -71,46 +67,21 @@ interface Uni {
* ```
* @remark
* - 该接口需要同步调用
- * @uniPlatform {
- * "app": {
- * "android": {
- * "osVer": "4.4.4",
- * "uniVer": "3.6.11",
- * "unixVer": "3.9.0"
- * },
- * "ios": {
- * "osVer": "9.0",
- * "uniVer": "3.6.11",
- * "unixVer": "3.9.0"
- * }
- * }
- * }
- * @uniVueVersion 2,3 //支持的vue版本
- *
*/
report(options : ReportOptions) : void,
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
// 统计插件参数类型
export type UniStatOptions = {
- /* 是否开启debug模式,默认 false */
+ /**
+ * 是否开启debug模式
+ * @defaultValue false
+ */
debug ?: boolean
- /* 前端数据上报周期 ,默认 10s ,单位s */
+ /**
+ * 前端数据上报周期 ,单位s
+ * @defaultValue 10
+ */
reportInterval ?: number
/* 多服务空间配置 */
uniCloud ?: UniCloudInitOptions
@@ -119,9 +90,15 @@ export type UniStatOptions = {
}
export type UniStatCollectItemsOptions = {
- /* 是否开启推送PushClientID的采集,默认false */
+ /**
+ * 是否开启推送PushClientID的采集
+ * @defaultValue false
+ */
uniPushClientID ?: boolean
- /* 是否开启页面数据采集,默认true */
+ /**
+ * 是否开启页面数据采集
+ * @defaultValue true
+ */
uniStatPageLog ?: boolean
}
@@ -194,7 +171,6 @@ export type PageParams = {
urlref_tt ?: string
}
-
/**
* 上传 unicloud 参数
*/
@@ -222,7 +198,10 @@ export type CustomUnicloudConfig = {
/** secretId */
secretId ?: string
}
-
+
+/**
+ * 事件类型
+ */
export type EventParams = {
/** 事件名字*/
key : string
@@ -230,7 +209,6 @@ export type EventParams = {
value ?: string
}
-
/**
* 统计默认值
*/
@@ -330,7 +308,6 @@ export type StatDefault = {
em ?:string
}
-
/**
* 应用首次启动上报参数
*/
@@ -470,7 +447,6 @@ export type PageReportParams = {
t : number
/** 上报时机,参看 ReprotCstType */
cst ?: number
-
}
-export type ErrorCallback = (is_err : boolean, errMsg : string) => void
\ No newline at end of file
+export type ErrorCallback = (is_err : boolean, errMsg : string) => void
--
GitLab