npm package: @syman/point-plugin
Description: uniapp/mpvue 数据埋点
Author: liming
Latest version: 1.1.11
Deprecated: false

# 1. @syman/point-plugin

> 小程序数据埋点

## 1.1. 说明
``` bash
# 插件说明
这个插件是目前用于uniapp/mpvue的数据埋点使用的
```

``` bash
# 安装
npm i @syman/point-plugin
```
## 1.2. 使用
  * ### 初始化注册
    * 在项目根目录App.js入口文件的onLaunch生命周期中里调用**this.getwxObj_()** 方法 
    分别传入uni(也可以是wx) appVersion param api 
    并且在App.js 的 onshow 生命周期里塞入需要打点的页面并调用打点方法
    ```
    onLaunch() {
		    this.getwxObj_({
		    	root:uni,   //root是小程序根对象
 		    	openStatus: true, //是否开启埋点上传(这个键也可以不传 默认为true)
 		    	appVersion:this.globalData.appVersion, //当前小程序版本号
		    	param:{}, //接口需要额外加入的参数
 		    	shareCode:'',//分享人信息
 		    	userInfo:{}, //用户信息
		    	api:this.$api.pointUpload, //埋点上传的接口 是个函数
		    	success:function(res){  //初始化成功回调
		    		console.log(res) 
		    	}
		    })		
		},
    methods:{
      pointUpload(data){  //自己自定义封装的埋点上传方法
          console.log(data) 这个是埋点回调的数据

          下面可以写自己上传的接口代码
          uni.request({
            url: 'test.php', //仅为示例，并非真实的接口地址
            data, //上传给后台的data对象  注：如果需要额外加入自定义的参数可以在this.getwxObj_的param里加入
            header: {
              'content-type': 'application/json' // 默认值
            },
            success (res) {
              console.log(res)
            }
          })        
      }
    },
		onShow: function() {
			this.getRoute_([   //这个是加入的需要埋点的页面
				'pages/index/index',
				'pages/goods/index/index'
			])
            this.$$startPoint()  //这个方法是统计小程序启动（包括冷启动丶热启动）的埋点
		},    
    ```

  * ### 事件埋点
    * 如果需要事件埋点比如点击事件，直接调用**this.$$eventPoint({desc:{label:'点击购买按钮'：value:'1'}})**
    ```
    this.$$eventPoint({
         type:0 // type为埋点类型 0为自定义类型 1.固定埋点规则 海报分享埋点（需要posterType有值） 2.点击转发分享
         posterType:1 //posterType为海报类型 type为1的时候可传，其他type类型则不传
         desc：{label:'点击购买按钮'：value:'1'} //自定义事件类型 desc里面的结构可以自定义，type类型可以不传默认为0
    })
    ```
    示例埋点如下
    ```
    methods:{   //需要打点页面的methods
		  click(){  
			this.$$eventPoint({desc:{label:'点击购买按钮'：value:'1'}})  //自定义埋点规则 支持desc内部键值对自定义
			this.$$eventPoint({type:1,posterType:'1'}})  //固定埋点规则 type:1 海报分享埋点  posterType是海报类型 
			this.$$eventPoint({type:2}})  //固定埋点规则 type:2 点击转发分享  
		  }
      <!-- 建议开发者使用自定义埋点 -->
    }，  
    ```
  * ### 埋点上报结构
    
  ```
  //下面的为简化结构 具体的结构请查看git的wiki
  {
		pointType:'page' //page 是页面类型 event是点击事件类型 start 第一次启动
		event: { //按钮点击事件（如果pointType是event的时候  当前对象有值 否则为null）
		   desc: {label:'点击购买按钮',value:'1'}, // 点击事件为其他类型的时候取desc描述 支持自定义
		   type: 0, //事件类型  0 其他点击事件类型 
		   time: 1222 //当前点击的时间戳
		},
		route:'pages/page/index1', //当前路由
		prevRoute:'pages/index/index', //上页路由
		enterTime:34555, //进入时间
		outTime:342342, //出来时间
		stayTime:3200, //停留时间
		params:{    //页面路由参数
		   order_id:5637
		},
		scene:1001, //1001发现栏小程序主入口 1011扫描二维码 1012长按图片识别二维码 1013扫描手机相册中选取的二维码 1035 公众号自定义菜单 1036 App 分享消息卡片（仅第一次上报）
		appId:'wx124324', // appId
		sdkVersion:'1.0.0', //sdk版本号(打点版本号)
		appVersion: '0.0.1', //小程序版本号
		shareCode: 234, //分享人信息可不传
		userInfo:{} //用户信息可自定义设置
		systemInfo:{  //设备信息（设备全部信息 仅第一次上报）
			brand:'', //设备品牌	
			model:'', //设备型号
			version:'',//微信版本号	
			system:'', //操作系统及版本	
			platform:'',//客户端平台	
			SDKVersion:'' //客户端基础库版本	
		}
}
  ```
  * ### 埋点上报机制

  埋点分为启动埋点、页面浏览埋点、点击事件埋点三个部分  
  启动埋点是小程序打开的时候自动触发此时pointType为start 
  页面埋点为离开埋点页面自动上报 此时pointType为page
  事件埋点为点击时候触发此时pointType为event,但是会以数组方式存储随着页面关闭与页面埋点一起上报