stat.js 3.5 KB
Newer Older
1
import Report from './report.js'
2 3 4 5 6 7 8

import { set_page_residence_time } from '../utils/pageTime.js'
import {
  get_page_types,
  get_platform_name,
  get_space,
  is_debug,
9
} from '../utils/pageInfo.js'
10
import { dbSet } from '../utils/db.js'
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
class Stat extends Report {
  static getInstance() {
    if (!uni.__stat_instance) {
      uni.__stat_instance = new Stat()
    }

    // 2.0 init 服务空间
    if (__STAT_VERSION__ === '2') {
      let space = get_space(uniCloud.config)
      if (!uni.__stat_uniCloud_space) {
        //   判断不为空对象
        if (space && Object.keys(space).length !== 0) {
          let spaceData = {
            provider: space.provider,
            spaceId: space.spaceId,
            clientSecret: space.clientSecret
          }
          if(space.endpoint){
            spaceData.endpoint = space.endpoint
          }
          uni.__stat_uniCloud_space = uniCloud.init(spaceData)
          // console.log(
          //   '=== 当前绑定的统计服务空间spaceId:' +
          //     uni.__stat_uniCloud_space.config.spaceId
          // )
        } else {
          console.error('当前尚未关联统计服务空间,请先在manifest.json中配置服务空间!')
        }
      }
    }

    return uni.__stat_instance
  }
  constructor() {
    super()
  }

  /**
   * 进入应用
   * @param {Object} options 页面参数
   * @param {Object} self	当前页面实例
   */
  launch(options, self) {
    // 初始化页面停留时间  start
    let residence_time = set_page_residence_time()
    this.__licationShow = true
57
    dbSet('__launch_options', options)
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
    this.sendReportRequest(options, true)
  }
  load(options, self) {
    this.self = self
    this._query = options
  }

  appHide(self) {
    this.applicationHide(self, true)
  }

  appShow(self) {
    this.applicationShow(self)
  }

  show(self) {
    this.self = self
    if (get_page_types(self) === 'page') {
      this.pageShow(self)
    }

    // #ifdef VUE3
80
    if (get_platform_name() === 'h5' || get_platform_name() === 'n') {
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
      if (get_page_types(self) === 'app') {
        this.appShow()
      }
    }
    // #endif

    // #ifndef VUE3
    if (get_page_types(self) === 'app') {
      this.appShow()
    }
    // #endif
  }

  hide(self) {
    this.self = self
    if (get_page_types(self) === 'page') {
      this.pageHide(self)
    }
99

100
    // #ifdef VUE3
101
    if (get_platform_name() === 'h5' || get_platform_name() === 'n') {
102 103 104 105 106
      if (get_page_types(self) === 'app') {
        this.appHide()
      }
    }
    // #endif
107

108 109 110 111 112 113
    // #ifndef VUE3
    if (get_page_types(self) === 'app') {
      this.appHide()
    }
    // #endif
  }
114

115 116
  error(em) {
    // 开发工具内不上报错误
117 118 119 120 121 122
    // if (this._platform === 'devtools') {
    //   if (process.env.NODE_ENV === 'development') {
    //     console.info('当前运行环境为开发者工具,不上报数据。')
    //     return
    //   }
    // }
123 124 125 126 127 128
    let emVal = ''
    if (!em.message) {
      emVal = JSON.stringify(em)
    } else {
      emVal = em.stack
    }
129 130 131 132 133 134 135 136 137

    let route = ''
    try {
      route =  get_route() 
    }catch(e){
      // 未获取到页面路径
      route = ''
    }

138
    let options = {
139 140 141
      ak: this.statData.ak,
      uuid: this.statData.uuid,
      p: this.statData.p,
142
      lt: '31',
143
      url:route,
144 145 146 147 148 149 150 151 152 153 154 155
      ut: this.statData.ut,
      ch: this.statData.ch,
      mpsdk: this.statData.mpsdk,
      mpv: this.statData.mpv,
      v: this.statData.v,
      em: emVal,
      usv: this.statData.usv,
      t: parseInt(new Date().getTime() / 1000),
    }
    this.request(options)
  }
}
156
export default Stat