提交 2331299a 编写于 作者: M mehaotian

fix(stat): 修复在onLaunch中执行 uni.report 报错的bug,新增 存储隔离应用 ,优化统计版本信息

上级 96c656ea
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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,
......
......@@ -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`));
}
......
// 访问开始即启动小程序,访问结束结分为:进入后台超过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'
......
......@@ -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 = {
......
......@@ -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,
......
......@@ -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`)
......
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)
}
}
}
......@@ -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) {
......
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册