diff --git a/packages/uni-stat/dist/uni-cloud-stat.cjs.js b/packages/uni-stat/dist/uni-cloud-stat.cjs.js index dcd459dea474ac8f34abd278919ac388fd9156db..783063ad888365d1f4573b9a7790f51526d72b28 100644 --- a/packages/uni-stat/dist/uni-cloud-stat.cjs.js +++ b/packages/uni-stat/dist/uni-cloud-stat.cjs.js @@ -6,7 +6,7 @@ const sys = uni.getSystemInfoSync(); // 访问开始即启动小程序,访问结束结分为:进入后台超过5min、在前台无任何操作超过30min、在新的来源打开小程序; -const STAT_VERSION = '0.0.1'; +const STAT_VERSION = process.env.UNI_COMPILER_VERSION; const STAT_URL = 'https://tongji.dcloud.io/uni/stat'; const STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif'; const PAGE_PVER_TIME = 1800; // 页面在前台无操作结束访问时间 单位s @@ -202,21 +202,10 @@ const get_scene = (options) => { return scene }; -/** - * 获取拼接参数 - */ -const get_splicing = (data) => { - let str = ''; - for (var i in data) { - str += i + '=' + data[i] + '&'; - } - return str.substr(0, str.length - 1) -}; - /** * 获取页面url,不包含参数 */ -const get_route = (pageVm) => { +const get_route$1 = (pageVm) => { let _self = pageVm || get_page_vm(); if (get_platform_name() === 'bd') { let mp_route = _self.$mp && _self.$mp.page && _self.$mp.page.is; @@ -290,7 +279,10 @@ const handle_data = (statData) => { for (let i in statData) { const rd = statData[i]; rd.forEach((elm) => { - const newData = get_splicing(elm); + let newData = ''; + { + newData = elm; + } if (i === 0) { firstArr.push(newData); } else if (i === 3) { @@ -506,18 +498,21 @@ const log = (data) => { } }; -let data = uni.getStorageSync('$$STAT__DBDATA') || {}; +const appid = process.env.UNI_APP_ID; // 做应用隔离 const dbSet = (name, value) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; + if (!data) { data = {}; } data[name] = value; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); }; const dbGet = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (!data[name]) { - let dbdata = uni.getStorageSync('$$STAT__DBDATA'); + let dbdata = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (!dbdata) { dbdata = {}; } @@ -530,14 +525,15 @@ const dbGet = (name) => { }; const dbRemove = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } else { - data = uni.getStorageSync('$$STAT__DBDATA'); + data = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } } }; @@ -621,35 +617,35 @@ const get_total_visit_count = () => { return count }; -let Set__First__Time = 0; -let Set__Last__Time = 0; +const FIRST_TIME = '__first_time'; /** - * 获取第一次时间 + * 设置页面首次访问时间,用户获取页面/应用停留时常 */ -const get_first_time = () => { - let time = new Date().getTime(); - Set__First__Time = time; - Set__Last__Time = 0; - return time +const set_first_time = () => { + const time = new Date().getTime(); + const timeStorge = dbSet(FIRST_TIME,time); + return timeStorge }; /** - * 获取最后一次时间 + * 获取最后一次时间 ,暂时用不到,直接获取当前时间即可 */ -const get_last_time = () => { - let time = new Date().getTime(); - Set__Last__Time = time; - return time -}; +// export const get_last_time = () => { +// let time = new Date().getTime() +// Set__Last__Time = time +// return time +// } /** * 获取页面 \ 应用停留时间 */ const get_residence_time = (type) => { let residenceTime = 0; - if (Set__First__Time !== 0) { - residenceTime = Set__Last__Time - Set__First__Time; + const first_time = dbGet(FIRST_TIME); + const last_time = get_time(); + if (first_time !== 0) { + residenceTime = last_time - first_time; } residenceTime = parseInt(residenceTime / 1000); @@ -811,7 +807,6 @@ class Report { applicationShow() { // 通过 __licationHide 判断保证是进入后台后在次进入应用,避免重复上报数据 if (this.__licationHide) { - get_last_time(); const time = get_residence_time('app'); // 需要判断进入后台是否超过时限 ,默认是 30min ,是的话需要执行进入应用的上报 if (time.overtime) { @@ -839,7 +834,6 @@ class Report { } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; - get_last_time(); const time = get_residence_time(); const route = get_page_route(self); uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); @@ -850,8 +844,8 @@ class Report { }, type ); - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -867,20 +861,19 @@ class Report { }; const route = get_page_route(self); - const routepath = get_route(self); + const routepath = get_route$1(self); this._navigationBarTitle.config = get_page_name(routepath); // 表示应用触发 ,页面切换不触发之后的逻辑 if (this.__licationShow) { - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.__licationShow = false; return } - get_last_time(); - const time = get_residence_time('page'); // 停留时间 if (time.overtime) { @@ -890,8 +883,8 @@ class Report { }; this.sendReportRequest(options); } - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -899,7 +892,6 @@ class Report { */ pageHide(self) { if (!this.__licationHide) { - get_last_time(); const time = get_residence_time('page'); let route = get_page_route(self); let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE'); @@ -992,8 +984,16 @@ class Report { * 自定义事件上报 */ sendEventRequest({ key = '', value = '' } = {}) { - // const route = this._lastPageRoute - const routepath = get_route(); + + let routepath = ''; + + try { + routepath = get_route$1(); + } catch (error) { + const launch_options = dbGet('__launch_options'); + routepath = launch_options.path; + } + this._navigationBarTitle.config = get_page_name(routepath); this._navigationBarTitle.lt = '21'; let options = { @@ -1227,6 +1227,7 @@ class Stat extends Report { // 初始化页面停留时间 start set_page_residence_time(); this.__licationShow = true; + dbSet('__launch_options', options); this.sendReportRequest(options, true); } load(options, self) { @@ -1249,7 +1250,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appShow(); } @@ -1270,7 +1271,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appHide(); } @@ -1286,23 +1287,33 @@ class Stat extends Report { error(em) { // 开发工具内不上报错误 - if (this._platform === 'devtools') { - if (process.env.NODE_ENV === 'development') { - console.info('当前运行环境为开发者工具,不上报数据。'); - return - } - } + // if (this._platform === 'devtools') { + // if (process.env.NODE_ENV === 'development') { + // console.info('当前运行环境为开发者工具,不上报数据。') + // return + // } + // } let emVal = ''; if (!em.message) { emVal = JSON.stringify(em); } else { emVal = em.stack; } + + let route = ''; + try { + route = get_route(); + }catch(e){ + // 未获取到页面路径 + route = ''; + } + let options = { ak: this.statData.ak, uuid: this.statData.uuid, p: this.statData.p, lt: '31', + url:route, ut: this.statData.ut, ch: this.statData.ch, mpsdk: this.statData.mpsdk, diff --git a/packages/uni-stat/dist/uni-cloud-stat.es.js b/packages/uni-stat/dist/uni-cloud-stat.es.js index 77c74d0221ffd465c7a379007f7ac6a3fb7e0114..7d9fbdcdcdd194cc2763734e22935b0ec48598a4 100644 --- a/packages/uni-stat/dist/uni-cloud-stat.es.js +++ b/packages/uni-stat/dist/uni-cloud-stat.es.js @@ -4,7 +4,7 @@ const sys = uni.getSystemInfoSync(); // 访问开始即启动小程序,访问结束结分为:进入后台超过5min、在前台无任何操作超过30min、在新的来源打开小程序; -const STAT_VERSION = '0.0.1'; +const STAT_VERSION = process.env.UNI_COMPILER_VERSION; const STAT_URL = 'https://tongji.dcloud.io/uni/stat'; const STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif'; const PAGE_PVER_TIME = 1800; // 页面在前台无操作结束访问时间 单位s @@ -200,21 +200,10 @@ const get_scene = (options) => { return scene }; -/** - * 获取拼接参数 - */ -const get_splicing = (data) => { - let str = ''; - for (var i in data) { - str += i + '=' + data[i] + '&'; - } - return str.substr(0, str.length - 1) -}; - /** * 获取页面url,不包含参数 */ -const get_route = (pageVm) => { +const get_route$1 = (pageVm) => { let _self = pageVm || get_page_vm(); if (get_platform_name() === 'bd') { let mp_route = _self.$mp && _self.$mp.page && _self.$mp.page.is; @@ -288,7 +277,10 @@ const handle_data = (statData) => { for (let i in statData) { const rd = statData[i]; rd.forEach((elm) => { - const newData = get_splicing(elm); + let newData = ''; + { + newData = elm; + } if (i === 0) { firstArr.push(newData); } else if (i === 3) { @@ -504,18 +496,21 @@ const log = (data) => { } }; -let data = uni.getStorageSync('$$STAT__DBDATA') || {}; +const appid = process.env.UNI_APP_ID; // 做应用隔离 const dbSet = (name, value) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; + if (!data) { data = {}; } data[name] = value; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); }; const dbGet = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (!data[name]) { - let dbdata = uni.getStorageSync('$$STAT__DBDATA'); + let dbdata = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (!dbdata) { dbdata = {}; } @@ -528,14 +523,15 @@ const dbGet = (name) => { }; const dbRemove = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } else { - data = uni.getStorageSync('$$STAT__DBDATA'); + data = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } } }; @@ -619,35 +615,35 @@ const get_total_visit_count = () => { return count }; -let Set__First__Time = 0; -let Set__Last__Time = 0; +const FIRST_TIME = '__first_time'; /** - * 获取第一次时间 + * 设置页面首次访问时间,用户获取页面/应用停留时常 */ -const get_first_time = () => { - let time = new Date().getTime(); - Set__First__Time = time; - Set__Last__Time = 0; - return time +const set_first_time = () => { + const time = new Date().getTime(); + const timeStorge = dbSet(FIRST_TIME,time); + return timeStorge }; /** - * 获取最后一次时间 + * 获取最后一次时间 ,暂时用不到,直接获取当前时间即可 */ -const get_last_time = () => { - let time = new Date().getTime(); - Set__Last__Time = time; - return time -}; +// export const get_last_time = () => { +// let time = new Date().getTime() +// Set__Last__Time = time +// return time +// } /** * 获取页面 \ 应用停留时间 */ const get_residence_time = (type) => { let residenceTime = 0; - if (Set__First__Time !== 0) { - residenceTime = Set__Last__Time - Set__First__Time; + const first_time = dbGet(FIRST_TIME); + const last_time = get_time(); + if (first_time !== 0) { + residenceTime = last_time - first_time; } residenceTime = parseInt(residenceTime / 1000); @@ -809,7 +805,6 @@ class Report { applicationShow() { // 通过 __licationHide 判断保证是进入后台后在次进入应用,避免重复上报数据 if (this.__licationHide) { - get_last_time(); const time = get_residence_time('app'); // 需要判断进入后台是否超过时限 ,默认是 30min ,是的话需要执行进入应用的上报 if (time.overtime) { @@ -837,7 +832,6 @@ class Report { } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; - get_last_time(); const time = get_residence_time(); const route = get_page_route(self); uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); @@ -848,8 +842,8 @@ class Report { }, type ); - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -865,20 +859,19 @@ class Report { }; const route = get_page_route(self); - const routepath = get_route(self); + const routepath = get_route$1(self); this._navigationBarTitle.config = get_page_name(routepath); // 表示应用触发 ,页面切换不触发之后的逻辑 if (this.__licationShow) { - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.__licationShow = false; return } - get_last_time(); - const time = get_residence_time('page'); // 停留时间 if (time.overtime) { @@ -888,8 +881,8 @@ class Report { }; this.sendReportRequest(options); } - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -897,7 +890,6 @@ class Report { */ pageHide(self) { if (!this.__licationHide) { - get_last_time(); const time = get_residence_time('page'); let route = get_page_route(self); let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE'); @@ -990,8 +982,16 @@ class Report { * 自定义事件上报 */ sendEventRequest({ key = '', value = '' } = {}) { - // const route = this._lastPageRoute - const routepath = get_route(); + + let routepath = ''; + + try { + routepath = get_route$1(); + } catch (error) { + const launch_options = dbGet('__launch_options'); + routepath = launch_options.path; + } + this._navigationBarTitle.config = get_page_name(routepath); this._navigationBarTitle.lt = '21'; let options = { @@ -1225,6 +1225,7 @@ class Stat extends Report { // 初始化页面停留时间 start set_page_residence_time(); this.__licationShow = true; + dbSet('__launch_options', options); this.sendReportRequest(options, true); } load(options, self) { @@ -1247,7 +1248,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appShow(); } @@ -1268,7 +1269,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appHide(); } @@ -1284,23 +1285,33 @@ class Stat extends Report { error(em) { // 开发工具内不上报错误 - if (this._platform === 'devtools') { - if (process.env.NODE_ENV === 'development') { - console.info('当前运行环境为开发者工具,不上报数据。'); - return - } - } + // if (this._platform === 'devtools') { + // if (process.env.NODE_ENV === 'development') { + // console.info('当前运行环境为开发者工具,不上报数据。') + // return + // } + // } let emVal = ''; if (!em.message) { emVal = JSON.stringify(em); } else { emVal = em.stack; } + + let route = ''; + try { + route = get_route(); + }catch(e){ + // 未获取到页面路径 + route = ''; + } + let options = { ak: this.statData.ak, uuid: this.statData.uuid, p: this.statData.p, lt: '31', + url:route, ut: this.statData.ut, ch: this.statData.ch, mpsdk: this.statData.mpsdk, diff --git a/packages/uni-stat/dist/uni-stat.cjs.js b/packages/uni-stat/dist/uni-stat.cjs.js index c4264527cd235a6ef17b292182aaa6b40fcee13d..164375e93654fe413c3a917e01eca75d21ab01bd 100644 --- a/packages/uni-stat/dist/uni-stat.cjs.js +++ b/packages/uni-stat/dist/uni-stat.cjs.js @@ -6,7 +6,7 @@ const sys = uni.getSystemInfoSync(); // 访问开始即启动小程序,访问结束结分为:进入后台超过5min、在前台无任何操作超过30min、在新的来源打开小程序; -const STAT_VERSION = '0.0.1'; +const STAT_VERSION = process.env.UNI_COMPILER_VERSION; const STAT_URL = 'https://tongji.dcloud.io/uni/stat'; const STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif'; const PAGE_PVER_TIME = 1800; // 页面在前台无操作结束访问时间 单位s @@ -216,7 +216,7 @@ const get_splicing = (data) => { /** * 获取页面url,不包含参数 */ -const get_route = (pageVm) => { +const get_route$1 = (pageVm) => { let _self = pageVm || get_page_vm(); if (get_platform_name() === 'bd') { let mp_route = _self.$mp && _self.$mp.page && _self.$mp.page.is; @@ -290,7 +290,10 @@ const handle_data = (statData) => { for (let i in statData) { const rd = statData[i]; rd.forEach((elm) => { - const newData = get_splicing(elm); + let newData = ''; + { + newData = get_splicing(elm); + } if (i === 0) { firstArr.push(newData); } else if (i === 3) { @@ -474,18 +477,21 @@ const log = (data) => { } }; -let data = uni.getStorageSync('$$STAT__DBDATA') || {}; +const appid = process.env.UNI_APP_ID; // 做应用隔离 const dbSet = (name, value) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; + if (!data) { data = {}; } data[name] = value; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); }; const dbGet = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (!data[name]) { - let dbdata = uni.getStorageSync('$$STAT__DBDATA'); + let dbdata = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (!dbdata) { dbdata = {}; } @@ -498,14 +504,15 @@ const dbGet = (name) => { }; const dbRemove = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } else { - data = uni.getStorageSync('$$STAT__DBDATA'); + data = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } } }; @@ -589,35 +596,35 @@ const get_total_visit_count = () => { return count }; -let Set__First__Time = 0; -let Set__Last__Time = 0; +const FIRST_TIME = '__first_time'; /** - * 获取第一次时间 + * 设置页面首次访问时间,用户获取页面/应用停留时常 */ -const get_first_time = () => { - let time = new Date().getTime(); - Set__First__Time = time; - Set__Last__Time = 0; - return time +const set_first_time = () => { + const time = new Date().getTime(); + const timeStorge = dbSet(FIRST_TIME,time); + return timeStorge }; /** - * 获取最后一次时间 + * 获取最后一次时间 ,暂时用不到,直接获取当前时间即可 */ -const get_last_time = () => { - let time = new Date().getTime(); - Set__Last__Time = time; - return time -}; +// export const get_last_time = () => { +// let time = new Date().getTime() +// Set__Last__Time = time +// return time +// } /** * 获取页面 \ 应用停留时间 */ const get_residence_time = (type) => { let residenceTime = 0; - if (Set__First__Time !== 0) { - residenceTime = Set__Last__Time - Set__First__Time; + const first_time = dbGet(FIRST_TIME); + const last_time = get_time(); + if (first_time !== 0) { + residenceTime = last_time - first_time; } residenceTime = parseInt(residenceTime / 1000); @@ -779,7 +786,6 @@ class Report { applicationShow() { // 通过 __licationHide 判断保证是进入后台后在次进入应用,避免重复上报数据 if (this.__licationHide) { - get_last_time(); const time = get_residence_time('app'); // 需要判断进入后台是否超过时限 ,默认是 30min ,是的话需要执行进入应用的上报 if (time.overtime) { @@ -807,7 +813,6 @@ class Report { } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; - get_last_time(); const time = get_residence_time(); const route = get_page_route(self); uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); @@ -818,8 +823,8 @@ class Report { }, type ); - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -835,20 +840,19 @@ class Report { }; const route = get_page_route(self); - const routepath = get_route(self); + const routepath = get_route$1(self); this._navigationBarTitle.config = get_page_name(routepath); // 表示应用触发 ,页面切换不触发之后的逻辑 if (this.__licationShow) { - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.__licationShow = false; return } - get_last_time(); - const time = get_residence_time('page'); // 停留时间 if (time.overtime) { @@ -858,8 +862,8 @@ class Report { }; this.sendReportRequest(options); } - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -867,7 +871,6 @@ class Report { */ pageHide(self) { if (!this.__licationHide) { - get_last_time(); const time = get_residence_time('page'); let route = get_page_route(self); let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE'); @@ -960,8 +963,16 @@ class Report { * 自定义事件上报 */ sendEventRequest({ key = '', value = '' } = {}) { - // const route = this._lastPageRoute - const routepath = get_route(); + + let routepath = ''; + + try { + routepath = get_route$1(); + } catch (error) { + const launch_options = dbGet('__launch_options'); + routepath = launch_options.path; + } + this._navigationBarTitle.config = get_page_name(routepath); this._navigationBarTitle.lt = '21'; let options = { @@ -1183,6 +1194,7 @@ class Stat extends Report { // 初始化页面停留时间 start set_page_residence_time(); this.__licationShow = true; + dbSet('__launch_options', options); this.sendReportRequest(options, true); } load(options, self) { @@ -1205,7 +1217,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appShow(); } @@ -1226,7 +1238,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appHide(); } @@ -1242,23 +1254,33 @@ class Stat extends Report { error(em) { // 开发工具内不上报错误 - if (this._platform === 'devtools') { - if (process.env.NODE_ENV === 'development') { - console.info('当前运行环境为开发者工具,不上报数据。'); - return - } - } + // if (this._platform === 'devtools') { + // if (process.env.NODE_ENV === 'development') { + // console.info('当前运行环境为开发者工具,不上报数据。') + // return + // } + // } let emVal = ''; if (!em.message) { emVal = JSON.stringify(em); } else { emVal = em.stack; } + + let route = ''; + try { + route = get_route(); + }catch(e){ + // 未获取到页面路径 + route = ''; + } + let options = { ak: this.statData.ak, uuid: this.statData.uuid, p: this.statData.p, lt: '31', + url:route, ut: this.statData.ut, ch: this.statData.ch, mpsdk: this.statData.mpsdk, diff --git a/packages/uni-stat/dist/uni-stat.es.js b/packages/uni-stat/dist/uni-stat.es.js index b6d89c0d886333ab6ce97da915dcbfc857b7542f..c71b286a369d68930ee39684d5168dcab9639581 100644 --- a/packages/uni-stat/dist/uni-stat.es.js +++ b/packages/uni-stat/dist/uni-stat.es.js @@ -4,7 +4,7 @@ const sys = uni.getSystemInfoSync(); // 访问开始即启动小程序,访问结束结分为:进入后台超过5min、在前台无任何操作超过30min、在新的来源打开小程序; -const STAT_VERSION = '0.0.1'; +const STAT_VERSION = process.env.UNI_COMPILER_VERSION; const STAT_URL = 'https://tongji.dcloud.io/uni/stat'; const STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif'; const PAGE_PVER_TIME = 1800; // 页面在前台无操作结束访问时间 单位s @@ -214,7 +214,7 @@ const get_splicing = (data) => { /** * 获取页面url,不包含参数 */ -const get_route = (pageVm) => { +const get_route$1 = (pageVm) => { let _self = pageVm || get_page_vm(); if (get_platform_name() === 'bd') { let mp_route = _self.$mp && _self.$mp.page && _self.$mp.page.is; @@ -288,7 +288,10 @@ const handle_data = (statData) => { for (let i in statData) { const rd = statData[i]; rd.forEach((elm) => { - const newData = get_splicing(elm); + let newData = ''; + { + newData = get_splicing(elm); + } if (i === 0) { firstArr.push(newData); } else if (i === 3) { @@ -472,18 +475,21 @@ const log = (data) => { } }; -let data = uni.getStorageSync('$$STAT__DBDATA') || {}; +const appid = process.env.UNI_APP_ID; // 做应用隔离 const dbSet = (name, value) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; + if (!data) { data = {}; } data[name] = value; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); }; const dbGet = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (!data[name]) { - let dbdata = uni.getStorageSync('$$STAT__DBDATA'); + let dbdata = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (!dbdata) { dbdata = {}; } @@ -496,14 +502,15 @@ const dbGet = (name) => { }; const dbRemove = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {}; if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } else { - data = uni.getStorageSync('$$STAT__DBDATA'); + data = uni.getStorageSync('$$STAT__DBDATA:'+appid); if (data[name]) { delete data[name]; - uni.setStorageSync('$$STAT__DBDATA', data); + uni.setStorageSync('$$STAT__DBDATA:'+appid, data); } } }; @@ -587,35 +594,35 @@ const get_total_visit_count = () => { return count }; -let Set__First__Time = 0; -let Set__Last__Time = 0; +const FIRST_TIME = '__first_time'; /** - * 获取第一次时间 + * 设置页面首次访问时间,用户获取页面/应用停留时常 */ -const get_first_time = () => { - let time = new Date().getTime(); - Set__First__Time = time; - Set__Last__Time = 0; - return time +const set_first_time = () => { + const time = new Date().getTime(); + const timeStorge = dbSet(FIRST_TIME,time); + return timeStorge }; /** - * 获取最后一次时间 + * 获取最后一次时间 ,暂时用不到,直接获取当前时间即可 */ -const get_last_time = () => { - let time = new Date().getTime(); - Set__Last__Time = time; - return time -}; +// export const get_last_time = () => { +// let time = new Date().getTime() +// Set__Last__Time = time +// return time +// } /** * 获取页面 \ 应用停留时间 */ const get_residence_time = (type) => { let residenceTime = 0; - if (Set__First__Time !== 0) { - residenceTime = Set__Last__Time - Set__First__Time; + const first_time = dbGet(FIRST_TIME); + const last_time = get_time(); + if (first_time !== 0) { + residenceTime = last_time - first_time; } residenceTime = parseInt(residenceTime / 1000); @@ -777,7 +784,6 @@ class Report { applicationShow() { // 通过 __licationHide 判断保证是进入后台后在次进入应用,避免重复上报数据 if (this.__licationHide) { - get_last_time(); const time = get_residence_time('app'); // 需要判断进入后台是否超过时限 ,默认是 30min ,是的话需要执行进入应用的上报 if (time.overtime) { @@ -805,7 +811,6 @@ class Report { } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; - get_last_time(); const time = get_residence_time(); const route = get_page_route(self); uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); @@ -816,8 +821,8 @@ class Report { }, type ); - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -833,20 +838,19 @@ class Report { }; const route = get_page_route(self); - const routepath = get_route(self); + const routepath = get_route$1(self); this._navigationBarTitle.config = get_page_name(routepath); // 表示应用触发 ,页面切换不触发之后的逻辑 if (this.__licationShow) { - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.__licationShow = false; return } - get_last_time(); - const time = get_residence_time('page'); // 停留时间 if (time.overtime) { @@ -856,8 +860,8 @@ class Report { }; this.sendReportRequest(options); } - // 重置时间 - get_first_time(); + // 更新页面首次访问时间 + set_first_time(); } /** @@ -865,7 +869,6 @@ class Report { */ pageHide(self) { if (!this.__licationHide) { - get_last_time(); const time = get_residence_time('page'); let route = get_page_route(self); let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE'); @@ -958,8 +961,16 @@ class Report { * 自定义事件上报 */ sendEventRequest({ key = '', value = '' } = {}) { - // const route = this._lastPageRoute - const routepath = get_route(); + + let routepath = ''; + + try { + routepath = get_route$1(); + } catch (error) { + const launch_options = dbGet('__launch_options'); + routepath = launch_options.path; + } + this._navigationBarTitle.config = get_page_name(routepath); this._navigationBarTitle.lt = '21'; let options = { @@ -1181,6 +1192,7 @@ class Stat extends Report { // 初始化页面停留时间 start set_page_residence_time(); this.__licationShow = true; + dbSet('__launch_options', options); this.sendReportRequest(options, true); } load(options, self) { @@ -1203,7 +1215,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appShow(); } @@ -1224,7 +1236,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appHide(); } @@ -1240,23 +1252,33 @@ class Stat extends Report { error(em) { // 开发工具内不上报错误 - if (this._platform === 'devtools') { - if (process.env.NODE_ENV === 'development') { - console.info('当前运行环境为开发者工具,不上报数据。'); - return - } - } + // if (this._platform === 'devtools') { + // if (process.env.NODE_ENV === 'development') { + // console.info('当前运行环境为开发者工具,不上报数据。') + // return + // } + // } let emVal = ''; if (!em.message) { emVal = JSON.stringify(em); } else { emVal = em.stack; } + + let route = ''; + try { + route = get_route(); + }catch(e){ + // 未获取到页面路径 + route = ''; + } + let options = { ak: this.statData.ak, uuid: this.statData.uuid, p: this.statData.p, lt: '31', + url:route, ut: this.statData.ut, ch: this.statData.ch, mpsdk: this.statData.mpsdk, diff --git a/packages/uni-stat/lib/uni.plugin.js b/packages/uni-stat/lib/uni.plugin.js index e41c975d83bcde49d7c8f70266ed8deb4aa706df..5ae74ceda17a75d6e41e5a9cc7d98bba9749ddf7 100644 --- a/packages/uni-stat/lib/uni.plugin.js +++ b/packages/uni-stat/lib/uni.plugin.js @@ -68,14 +68,18 @@ var index = () => [ isEnable = false; } else { - if (!statConfig.version) ; + if (!statConfig.version) { + uniStatLog(uniCliShared.M['stat.warn.version']); + } else { uniStatLog(`已开启 uni统计${statVersion}.0 版本`); } } } else { - if (!statConfig.version) ; + if (!statConfig.version) { + uniStatLog(uniCliShared.M['stat.warn.version']); + } else { uniStatLog(uniCliShared.M['stat.warn.tip'].replace('{version}', `${statVersion}.0`)); } diff --git a/packages/uni-stat/src/config.ts b/packages/uni-stat/src/config.ts index 552ede92cd792e756f587b9b6dfdba1a9a8d6163..768428ed146651e1dc2c739e666e140b01b08325 100644 --- a/packages/uni-stat/src/config.ts +++ b/packages/uni-stat/src/config.ts @@ -1,5 +1,5 @@ // 访问开始即启动小程序,访问结束结分为:进入后台超过5min、在前台无任何操作超过30min、在新的来源打开小程序; -export const STAT_VERSION = '0.0.1' +export const STAT_VERSION = process.env.UNI_COMPILER_VERSION export const STAT_URL = 'https://tongji.dcloud.io/uni/stat' export const STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif' export const STAT_KEY = 'qkTHEIegZGcL5iy3' diff --git a/packages/uni-stat/src/core/report.js b/packages/uni-stat/src/core/report.js index 32f072bf088eaf705be9cf915a1422ea66539e5e..a52e7a84fb0aa9e3a7904c5a3491aa0f707a2a45 100644 --- a/packages/uni-stat/src/core/report.js +++ b/packages/uni-stat/src/core/report.js @@ -5,8 +5,7 @@ import { get_last_visit_time, get_total_visit_count, get_page_residence_time, - get_first_time, - get_last_time, + set_first_time, get_residence_time, } from '../utils/pageTime.js' @@ -181,7 +180,6 @@ export default class Report { applicationShow() { // 通过 __licationHide 判断保证是进入后台后在次进入应用,避免重复上报数据 if (this.__licationHide) { - get_last_time() const time = get_residence_time('app') // 需要判断进入后台是否超过时限 ,默认是 30min ,是的话需要执行进入应用的上报 if (time.overtime) { @@ -209,7 +207,6 @@ export default class Report { } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true - get_last_time() const time = get_residence_time() const route = get_page_route(self) uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route) @@ -220,8 +217,8 @@ export default class Report { }, type ) - // 重置时间 - get_first_time() + // 更新页面首次访问时间 + set_first_time() } /** @@ -242,15 +239,14 @@ export default class Report { this._navigationBarTitle.config = get_page_name(routepath) // 表示应用触发 ,页面切换不触发之后的逻辑 if (this.__licationShow) { - get_first_time() + // 更新页面首次访问时间 + set_first_time() // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route) this.__licationShow = false return } - get_last_time() - const time = get_residence_time('page') // 停留时间 if (time.overtime) { @@ -260,8 +256,8 @@ export default class Report { } this.sendReportRequest(options) } - // 重置时间 - get_first_time() + // 更新页面首次访问时间 + set_first_time() } /** @@ -269,7 +265,6 @@ export default class Report { */ pageHide(self) { if (!this.__licationHide) { - get_last_time() const time = get_residence_time('page') let route = get_page_route(self) let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE') @@ -362,8 +357,16 @@ export default class Report { * 自定义事件上报 */ sendEventRequest({ key = '', value = '' } = {}) { - // const route = this._lastPageRoute - const routepath = get_route() + + let routepath = '' + + try { + routepath = get_route() + } catch (error) { + const launch_options = dbGet('__launch_options') + routepath = launch_options.path + } + this._navigationBarTitle.config = get_page_name(routepath) this._navigationBarTitle.lt = '21' let options = { diff --git a/packages/uni-stat/src/core/stat.js b/packages/uni-stat/src/core/stat.js index bc4a10a7238b7494f61268c195311c8ab2a3a1a0..57a914f80c8c8d3a09ed9253f0f18efac311e98f 100644 --- a/packages/uni-stat/src/core/stat.js +++ b/packages/uni-stat/src/core/stat.js @@ -7,7 +7,7 @@ import { get_space, is_debug, } from '../utils/pageInfo.js' - +import { dbSet } from '../utils/db.js' class Stat extends Report { static getInstance() { if (!uni.__stat_instance) { @@ -54,6 +54,7 @@ class Stat extends Report { // 初始化页面停留时间 start let residence_time = set_page_residence_time() this.__licationShow = true + dbSet('__launch_options', options) this.sendReportRequest(options, true) } load(options, self) { @@ -76,7 +77,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appShow() } @@ -97,7 +98,7 @@ class Stat extends Report { } // #ifdef VUE3 - if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { + if (get_platform_name() === 'h5' || get_platform_name() === 'n') { if (get_page_types(self) === 'app') { this.appHide() } @@ -113,23 +114,33 @@ class Stat extends Report { error(em) { // 开发工具内不上报错误 - if (this._platform === 'devtools') { - if (process.env.NODE_ENV === 'development') { - console.info('当前运行环境为开发者工具,不上报数据。') - return - } - } + // if (this._platform === 'devtools') { + // if (process.env.NODE_ENV === 'development') { + // console.info('当前运行环境为开发者工具,不上报数据。') + // return + // } + // } let emVal = '' if (!em.message) { emVal = JSON.stringify(em) } else { emVal = em.stack } + + let route = '' + try { + route = get_route() + }catch(e){ + // 未获取到页面路径 + route = '' + } + let options = { ak: this.statData.ak, uuid: this.statData.uuid, p: this.statData.p, lt: '31', + url:route, ut: this.statData.ut, ch: this.statData.ch, mpsdk: this.statData.mpsdk, diff --git a/packages/uni-stat/src/plugin/index.ts b/packages/uni-stat/src/plugin/index.ts index f6cb58c5e1f8f731866bb6fddbbf105be15af66b..b430fdd30d804bfde1bd6cd6f78ca05f33a7e1ff 100644 --- a/packages/uni-stat/src/plugin/index.ts +++ b/packages/uni-stat/src/plugin/index.ts @@ -66,14 +66,14 @@ export default () => [ isEnable = false } else { if (!statConfig.version) { - // uniStatLog(M['stat.warn.version']) + uniStatLog(M['stat.warn.version']) } else { uniStatLog(`已开启 uni统计${statVersion}.0 版本`) } } } else { if (!statConfig.version) { - // uniStatLog(M['stat.warn.version']) + uniStatLog(M['stat.warn.version']) } else { uniStatLog( M['stat.warn.tip'].replace('{version}', `${statVersion}.0`) diff --git a/packages/uni-stat/src/utils/db.js b/packages/uni-stat/src/utils/db.js index 5222fc60eee3704a9924d603ed2d95ab3c74278c..6a3d4de959493f6857de1061b61ba5998758e253 100755 --- a/packages/uni-stat/src/utils/db.js +++ b/packages/uni-stat/src/utils/db.js @@ -1,15 +1,18 @@ -let data = uni.getStorageSync('$$STAT__DBDATA') || {} +const appid = process.env.UNI_APP_ID // 做应用隔离 export const dbSet = (name, value) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {} + if (!data) { data = {} } data[name] = value - uni.setStorageSync('$$STAT__DBDATA', data) + uni.setStorageSync('$$STAT__DBDATA:'+appid, data) } export const dbGet = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {} if (!data[name]) { - let dbdata = uni.getStorageSync('$$STAT__DBDATA') + let dbdata = uni.getStorageSync('$$STAT__DBDATA:'+appid) if (!dbdata) { dbdata = {} } @@ -22,14 +25,15 @@ export const dbGet = (name) => { } export const dbRemove = (name) => { + let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {} if (data[name]) { delete data[name] - uni.setStorageSync('$$STAT__DBDATA', data) + uni.setStorageSync('$$STAT__DBDATA:'+appid, data) } else { - data = uni.getStorageSync('$$STAT__DBDATA') + data = uni.getStorageSync('$$STAT__DBDATA:'+appid) if (data[name]) { delete data[name] - uni.setStorageSync('$$STAT__DBDATA', data) + uni.setStorageSync('$$STAT__DBDATA:'+appid, data) } } } diff --git a/packages/uni-stat/src/utils/pageInfo.js b/packages/uni-stat/src/utils/pageInfo.js index 9e832daab25dc9a14bca1af84ae4e61843df28af..7ad14e03cd6a581484ca6f8bbcc4a83b4221d33f 100644 --- a/packages/uni-stat/src/utils/pageInfo.js +++ b/packages/uni-stat/src/utils/pageInfo.js @@ -283,7 +283,13 @@ export const handle_data = (statData) => { for (let i in statData) { const rd = statData[i] rd.forEach((elm) => { - const newData = get_splicing(elm) + let newData = '' + if (__STAT_VERSION__ === '1') { + newData = get_splicing(elm) + } + if(__STAT_VERSION__ === '2') { + newData = elm + } if (i === 0) { firstArr.push(newData) } else if (i === 3) { diff --git a/packages/uni-stat/src/utils/pageTime.js b/packages/uni-stat/src/utils/pageTime.js index 12ef2e7068e596b27813f8617c518965525921fa..974a593ab75f4386d30b38414ddbc57f593836c2 100644 --- a/packages/uni-stat/src/utils/pageTime.js +++ b/packages/uni-stat/src/utils/pageTime.js @@ -97,35 +97,35 @@ export const GetEncodeURIComponentOptions = (statData) => { return data } -let Set__First__Time = 0 -let Set__Last__Time = 0 +const FIRST_TIME = '__first_time' /** - * 获取第一次时间 + * 设置页面首次访问时间,用户获取页面/应用停留时常 */ -export const get_first_time = () => { - let time = new Date().getTime() - Set__First__Time = time - Set__Last__Time = 0 - return time +export const set_first_time = () => { + const time = new Date().getTime() + const timeStorge = dbSet(FIRST_TIME,time) + return timeStorge } /** - * 获取最后一次时间 + * 获取最后一次时间 ,暂时用不到,直接获取当前时间即可 */ -export const get_last_time = () => { - let time = new Date().getTime() - Set__Last__Time = time - return time -} +// export const get_last_time = () => { +// let time = new Date().getTime() +// Set__Last__Time = time +// return time +// } /** * 获取页面 \ 应用停留时间 */ export const get_residence_time = (type) => { let residenceTime = 0 - if (Set__First__Time !== 0) { - residenceTime = Set__Last__Time - Set__First__Time + const first_time = dbGet(FIRST_TIME) + const last_time = get_time() + if (first_time !== 0) { + residenceTime = last_time - first_time } residenceTime = parseInt(residenceTime / 1000)