提交 8806dba3 编写于 作者: M mehaotian

fix: 放开统计入口,新增统计测试例页面

上级 61b6099a
...@@ -49,15 +49,15 @@ ...@@ -49,15 +49,15 @@
// 统计上报 - 应用启动 // 统计上报 - 应用启动
// #ifdef APP-ANDROID || APP-IOS || WEB // #ifdef APP-ANDROID || APP-IOS || WEB
// uni.report({ uni.report({
// name: 'uni-app-launch', name: 'uni-app-launch',
// options: res, options: res,
// success(res_data) { success(res_data) {
// console.log(res_data); console.log(res_data);
// }, fail(err) { }, fail(err) {
// console.log(err); console.log(err);
// } }
// }) })
// #endif // #endif
// #ifdef APP // #ifdef APP
if (process.env.NODE_ENV !== 'development') { //真机运行可以注释此条件 if (process.env.NODE_ENV !== 'development') { //真机运行可以注释此条件
...@@ -90,14 +90,14 @@ ...@@ -90,14 +90,14 @@
// #ifdef APP-ANDROID || APP-IOS || WEB // #ifdef APP-ANDROID || APP-IOS || WEB
// 统计上报 - 应用显示 // 统计上报 - 应用显示
// uni.report({ uni.report({
// name: 'uni-app-show', name: 'uni-app-show',
// success(res_data) { success(res_data) {
// console.log(res_data); console.log(res_data);
// }, fail(err) { }, fail(err) {
// console.log(err); console.log(err);
// } }
// }) })
// #endif // #endif
}, },
onHide: function () { onHide: function () {
...@@ -107,14 +107,14 @@ ...@@ -107,14 +107,14 @@
// #ifdef APP-ANDROID || APP-IOS || WEB // #ifdef APP-ANDROID || APP-IOS || WEB
// 统计上报 - 应用进入后台 // 统计上报 - 应用进入后台
// uni.report({ uni.report({
// name: 'uni-app-hide', name: 'uni-app-hide',
// success(res) { success(res) {
// console.log(res); console.log(res);
// }, fail(err) { }, fail(err) {
// console.log(err); console.log(err);
// } }
// }) })
// #endif // #endif
}, },
// #ifdef APP-ANDROID // #ifdef APP-ANDROID
...@@ -142,18 +142,18 @@ ...@@ -142,18 +142,18 @@
// #endif // #endif
onError(err : any) { onError(err : any) {
console.log('App onError', err) console.log('App onError', err)
// // #ifdef APP-ANDROID || APP-IOS || WEB // #ifdef APP-ANDROID || APP-IOS || WEB
// // 统计上报 - 应用发生错误 // 统计上报 - 应用发生错误
// uni.report({ uni.report({
// name: 'uni-app-error', name: 'uni-app-error',
// options: err, options: err,
// success(res) { success(res) {
// console.log(res); console.log(res);
// }, fail(err) { }, fail(err) {
// console.log(err); console.log(err);
// } }
// }) })
// // #endif // #endif
}, },
methods: { methods: {
increasetLifeCycleNum() { increasetLifeCycleNum() {
......
// 仅测试 console.log 时机问题 // 仅测试 console.log 时机问题
import './test-main-console.uts' import './test-main-console.uts'
// #ifdef APP-ANDROID || APP-IOS || WEB // #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 // #endif
import App from './App.uvue' import App from './App.uvue'
import { createSSRApp } from 'vue' import { createSSRApp } from 'vue'
// // 统计配置 // 统计配置
// const collectItems = { const uniStatcollectItems = {
// uniStatPageLog: true uniStatPageLog: true
// } }
// const statOptions = { const uniStatOptions = {
// debug: false, debug: true,
// collectItems: collectItems, collectItems: uniStatcollectItems,
// } }
export function createApp() { export function createApp() {
const app = createSSRApp(App) const app = createSSRApp(App)
// // #ifdef APP-ANDROID || APP-IOS || WEB // #ifdef APP-ANDROID || APP-IOS || WEB
// app.use(uniStat, statOptions) app.use(uniStat, uniStatOptions)
// // #endif // #endif
// app.mixin({ // app.mixin({
// onReady() { // onReady() {
// setTimeout(() => { // setTimeout(() => {
......
...@@ -1216,6 +1216,15 @@ ...@@ -1216,6 +1216,15 @@
"navigationBarTitleText": "推送" "navigationBarTitleText": "推送"
} }
}, },
// #ifdef APP-ANDROID || APP-IOS || WEB
{
"path" : "pages/API/uni-stat/uni-stat",
"style" :
{
"navigationBarTitleText" : "统计"
}
},
// #endif
// #ifdef APP-ANDROID || APP-IOS || WEB // #ifdef APP-ANDROID || APP-IOS || WEB
{ {
"path": "pages/API/dialog-page/dialog-page", "path": "pages/API/dialog-page/dialog-page",
......
<template>
<!-- #ifdef APP -->
<scroll-view style="flex:1">
<!-- #endif -->
<text class="instructions">
当前页面调用API均为模拟,请查看文档,在特定场景下使用以下 API。请在main.uts中设置统计debug配置为true,并点击按钮查控制台输出。
</text>
<button class="normal-button" type="default" @click="handleAppLunch">
创建本地通知消息 | createPushMessage
</button>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script>
export default {
data() {
return {
}
},
methods: {
handleAppLunch() {
const options = uni.getLaunchOptionsSync()
uni.report({
name: 'uni-app-launch',
options: options,
success(data) {
console.log(data);
}, fail(err) {
console.log(err);
}
})
}
}
}
</script>
<style>
.normal-button {
width: 100%;
}
.instructions {
margin-top: 10px;
margin-left: 10px;
margin-right: 10px;
background-color: #eee;
}
</style>
import { Stat } from '@/uni_modules/uni-stat' import { Stat } from '@/uni_modules/uni-stat'
// // UniStatOptions, UniStatCollectItemsOptions // // UniStatOptions, UniStatCollectItemsOptions
// 实例统计sdk // 实例统计sdk
const stat_instance = Stat.getInstance() const stat_instance = Stat.getInstance()
const lifecycle = defineMixin({ const lifecycle = defineMixin({
// onLaunch(options : OnLaunchOptions) { stat_instance.onLaunch(options, this) }, // onLaunch(options : OnLaunchOptions) { stat_instance.onLaunch(options, this) },
// @ts-ignore // @ts-ignore
onLoad() { stat_instance.onLoad(this) }, onLoad() {
if (this instanceof Page) {
stat_instance.onLoad(this)
}
},
// @ts-ignore // @ts-ignore
onShow() { stat_instance.onShow(this) }, onShow() {
if (this instanceof Page) {
stat_instance.onShow(this)
}
},
// @ts-ignore // @ts-ignore
onHide() { stat_instance.onHide(this) }, onHide() {
if (this instanceof Page) {
stat_instance.onHide(this)
}
},
// @ts-ignore // @ts-ignore
onUnload() { stat_instance.onUnload(this) }, onUnload() {
// onError(error : string) { stat_instance.onError(error) } if (this instanceof Page) {
stat_instance.onUnload(this)
}
},
// onError(error : string) { stat_instance.onError(error) }
}) })
export const uniStat = definePlugin({ export const uniStat = definePlugin({
install(app : VueApp, options : UTSJSONObject) { install(app : VueApp, options : UTSJSONObject) {
stat_instance.init(options) stat_instance.init(options)
app.mixin(lifecycle) app.mixin(lifecycle)
} }
}) })
# uni-app x 专用的 uni 统计插件 # uni统计 for uni-app x
>
> 注意:当前版本 uni 统计仅支持 uni-app x ,与 uni统计1.0和uni统计2.0 数据不兼容。 > 注意:当前版本 uni 统计仅支持 uni-app x ,与 uni统计1.0和uni统计2.0 数据不兼容。
>
> uni统计for uni-app x需要单独下载使用,无需在 manifest.json 中配置开关,只需在前端代码中配置即可。
>
> 依赖 `Hbuilder X Alpha版 4.32+`。
## 配置 uni统计后台 uni统计`uni-app x`版本,[使用教程](https://uniapp.dcloud.net.cn/uni-stat-uniappx)
与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
<script lang="uts">
export default {
onLaunch: function (options) {
console.log('App Launch')
uni.report({
name: 'uni-app-launch',
options: options,
success(res) {
console.log(res);
}, fail(err) {
console.log(err);
}
})
},
onShow: function () {
console.log('App Show')
uni.report({
name: 'uni-app-show',
success(res) {
console.log(res);
}, fail(err) {
console.log(err);
}
})
},
onHide: function () {
console.log('App Hide')
uni.report({
name: 'uni-app-hide',
success(res) {
console.log(res);
}, fail(err) {
console.log(err);
}
})
},
onError(err : any) {
console.log('错误');
uni.report({
name: 'uni-app-error',
options: err,
success(res) {
console.log(res);
}, fail(err) {
console.log(err);
}
})
}
}
</script>
```
### 影响范围
`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:'购买成功'
// ...
}
})
```
...@@ -66,7 +66,7 @@ export class Stat { ...@@ -66,7 +66,7 @@ export class Stat {
* 初始化插件参数 * 初始化插件参数
* @param {Object} options * @param {Object} options
*/ */
init(options : UTSJSONObject) { init(options : UTSJSONObject) {
// 插件挂载玩成,可以进行后续操作 // 插件挂载玩成,可以进行后续操作
Stat.is_register = true Stat.is_register = true
...@@ -98,7 +98,7 @@ export class Stat { ...@@ -98,7 +98,7 @@ export class Stat {
* 显示页面或应用进入前台 * 显示页面或应用进入前台
* @param {ComponentPublicInstance} appInstance 应用实例 * @param {ComponentPublicInstance} appInstance 应用实例
*/ */
onShow(appInstance : Page) { onShow(appInstance : Page) {
this.isHide = false this.isHide = false
// @ts-ignore // @ts-ignore
const mptype = is_page(appInstance) const mptype = is_page(appInstance)
...@@ -223,7 +223,7 @@ export class Stat { ...@@ -223,7 +223,7 @@ export class Stat {
} }
// 自定义参数上报 // 自定义参数上报
// fn : ErrorCallback // fn : ErrorCallback
appEvent(name : string, options : any | null = null, fn : ErrorCallback) { appEvent(name : string, options : any | null = null, fn : ErrorCallback) {
if (!Stat.is_register) { if (!Stat.is_register) {
fn(false, '统计服务尚未初始化,请在main.uts中引入统计插件。') fn(false, '统计服务尚未初始化,请在main.uts中引入统计插件。')
return return
...@@ -246,20 +246,29 @@ export class Stat { ...@@ -246,20 +246,29 @@ export class Stat {
return return
} }
if (name == 'uni-app-show') { if (name == 'uni-app-show') {
this.registerEvent(StatType.LifeCycleAppShow, null, null) this.registerEvent(StatType.LifeCycleAppShow, null, null)
return return
} }
if (name == 'uni-app-hide') { if (name == 'uni-app-hide') {
this.registerEvent(StatType.LifeCycleAppHide, null, null) this.registerEvent(StatType.LifeCycleAppHide, null, null)
return 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') { if (name == 'uni-app-error') {
this.registerEvent(StatType.LifeCycleError, null, null, options) this.registerEvent(StatType.LifeCycleError, null, null, options)
return return
} }
// 校验 type 参数 // 校验 type 参数
const is_calibration = calibration(name, options) const is_calibration = calibration(name, options)
......
...@@ -25,5 +25,5 @@ export const report : Report = function (options : ReportOptions) { ...@@ -25,5 +25,5 @@ export const report : Report = function (options : ReportOptions) {
} }
export { Stat } from './common/core/stat.uts' export { Stat } from './common/core/stat.uts'
// // --- 导出统计类型 --- // --- 导出统计类型 ---
export { UniStatOptions, UniStatCollectItemsOptions } from './interface.uts' export { UniStatOptions, UniStatCollectItemsOptions } from './interface.uts'
\ No newline at end of file
export type ReportSuccess = { export type ReportSuccess = {
/**
* 成功的详细信息
*/
errMsg : string, errMsg : string,
} }
...@@ -9,12 +12,9 @@ export type ReportFail = { ...@@ -9,12 +12,9 @@ export type ReportFail = {
errMsg : string, errMsg : string,
} }
export type ReportOptions = { export type ReportOptions = {
/** /**
* 自定义事件名称 * 自定义事件名称,内置名称(不允许覆盖):
* 内置名称(不允许覆盖):
* uni-app-launch : 应用启动 * uni-app-launch : 应用启动
* uni-app-show : 应用进入前台 * uni-app-show : 应用进入前台
* uni-app-hide : 应用进入后台 * uni-app-hide : 应用进入后台
...@@ -34,28 +34,24 @@ export type ReportOptions = { ...@@ -34,28 +34,24 @@ export type ReportOptions = {
*/ */
fail ?: (res : ReportFail) => void fail ?: (res : ReportFail) => void
/** /**
* 接口调用成功的回调 * 接口调用成功的回调函数
*/ */
complete ?: (res : any) => void complete ?: (res : any) => void
} }
export type ReportResult = { export type ReportResult = {}
}
/** /**
* 自定义事件信息 * 自定义事件信息
* @param {ReportOptions} options * @param {ReportOptions} options
* *
*
* @tutorial https://uniapp.dcloud.net.cn/xxxx
* @platforms APP-IOS = ^9.0,APP-ANDROID = ^22 * @platforms APP-IOS = ^9.0,APP-ANDROID = ^22
* @since 4.25 * @since 4.25
*/ */
export type Report = (options : ReportOptions) => void export type Report = (options : ReportOptions) => void
interface Uni { export interface Uni {
/** /**
* 统计自定义事件 * 统计自定义事件
* @description 统计自定义事件上报 * @description 统计自定义事件上报
...@@ -71,46 +67,21 @@ interface Uni { ...@@ -71,46 +67,21 @@ interface Uni {
* ``` * ```
* @remark * @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, report(options : ReportOptions) : void,
} }
// 统计插件参数类型 // 统计插件参数类型
export type UniStatOptions = { export type UniStatOptions = {
/* 是否开启debug模式,默认 false */ /**
* 是否开启debug模式
* @defaultValue false
*/
debug ?: boolean debug ?: boolean
/* 前端数据上报周期 ,默认 10s ,单位s */ /**
* 前端数据上报周期 ,单位s
* @defaultValue 10
*/
reportInterval ?: number reportInterval ?: number
/* 多服务空间配置 */ /* 多服务空间配置 */
uniCloud ?: UniCloudInitOptions uniCloud ?: UniCloudInitOptions
...@@ -119,9 +90,15 @@ export type UniStatOptions = { ...@@ -119,9 +90,15 @@ export type UniStatOptions = {
} }
export type UniStatCollectItemsOptions = { export type UniStatCollectItemsOptions = {
/* 是否开启推送PushClientID的采集,默认false */ /**
* 是否开启推送PushClientID的采集
* @defaultValue false
*/
uniPushClientID ?: boolean uniPushClientID ?: boolean
/* 是否开启页面数据采集,默认true */ /**
* 是否开启页面数据采集
* @defaultValue true
*/
uniStatPageLog ?: boolean uniStatPageLog ?: boolean
} }
...@@ -194,7 +171,6 @@ export type PageParams = { ...@@ -194,7 +171,6 @@ export type PageParams = {
urlref_tt ?: string urlref_tt ?: string
} }
/** /**
* 上传 unicloud 参数 * 上传 unicloud 参数
*/ */
...@@ -222,7 +198,10 @@ export type CustomUnicloudConfig = { ...@@ -222,7 +198,10 @@ export type CustomUnicloudConfig = {
/** secretId */ /** secretId */
secretId ?: string secretId ?: string
} }
/**
* 事件类型
*/
export type EventParams = { export type EventParams = {
/** 事件名字*/ /** 事件名字*/
key : string key : string
...@@ -230,7 +209,6 @@ export type EventParams = { ...@@ -230,7 +209,6 @@ export type EventParams = {
value ?: string value ?: string
} }
/** /**
* 统计默认值 * 统计默认值
*/ */
...@@ -330,7 +308,6 @@ export type StatDefault = { ...@@ -330,7 +308,6 @@ export type StatDefault = {
em ?:string em ?:string
} }
/** /**
* 应用首次启动上报参数 * 应用首次启动上报参数
*/ */
...@@ -470,7 +447,6 @@ export type PageReportParams = { ...@@ -470,7 +447,6 @@ export type PageReportParams = {
t : number t : number
/** 上报时机,参看 ReprotCstType */ /** 上报时机,参看 ReprotCstType */
cst ?: number cst ?: number
} }
export type ErrorCallback = (is_err : boolean, errMsg : string) => void export type ErrorCallback = (is_err : boolean, errMsg : string) => void
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册