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 @@ + + + + + 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