From 04c80c95e3a5c36c1e1816e0417f9f0fc7de0954 Mon Sep 17 00:00:00 2001 From: mehaotian <490272692@qq.com> Date: Fri, 1 Apr 2022 15:53:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(uni-stat):=20=E4=BF=AE=E5=A4=8D=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E8=BF=9B=E5=85=A5=E5=90=8E=E5=8F=B0=E6=89=BE=E4=B8=8D?= =?UTF-8?q?=E5=88=B0=20$page=20=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/uni-stat/dist/uni-cloud-stat.cjs.js | 33 +- packages/uni-stat/dist/uni-cloud-stat.es.js | 33 +- packages/uni-stat/dist/uni-stat.cjs.js | 33 +- packages/uni-stat/dist/uni-stat.es.js | 33 +- packages/uni-stat/src/core/report.js | 10 +- packages/uni-stat/src/core/stat.js | 8 +- packages/uni-stat/src/index.js | 15 +- packages/uni-stat/src/parameter.js | 384 ------------- packages/uni-stat/src/stat.js | 556 ------------------- 9 files changed, 97 insertions(+), 1008 deletions(-) delete mode 100644 packages/uni-stat/src/parameter.js delete mode 100644 packages/uni-stat/src/stat.js diff --git a/packages/uni-stat/dist/uni-cloud-stat.cjs.js b/packages/uni-stat/dist/uni-cloud-stat.cjs.js index 5daef9e39..6858642f4 100644 --- a/packages/uni-stat/dist/uni-cloud-stat.cjs.js +++ b/packages/uni-stat/dist/uni-cloud-stat.cjs.js @@ -736,13 +736,16 @@ class Report { * @param {Object} self * @param {Object} type */ - applicationHide(self, type) { + applicationHide(self, type) { + if(!self){ + // 表示应用切换到后台 ,此时需要从页面栈获取页面实例 + self = get_page_vm(); + } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; get_last_time(); const time = get_residence_time(); const route = get_page_route(self); - // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.sendHideRequest({ urlref: route, @@ -1116,14 +1119,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } // #endif @@ -1138,14 +1141,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } // #endif @@ -1227,10 +1230,12 @@ const lifecycle = { function main() { - // console.log('--- 统计开启') - if (process.env.NODE_ENV === 'development') { - uni.report = function(type, options) {}; - } else { + { + console.log('uni统计开启,version:2'); + } + // if (process.env.NODE_ENV === 'development') { + // uni.report = function(type, options) {} + // } else { // #ifdef VUE3 uni.onCreateVueApp((app) => { app.mixin(lifecycle); @@ -1238,7 +1243,7 @@ function main() { stat.sendEvent(type, options); }; }); - + if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { uni.onAppHide(() => { stat.appHide(get_page_vm()); @@ -1248,15 +1253,15 @@ function main() { }); } // #endif - + // #ifndef VUE3 const Vue = require('vue'); (Vue.default || Vue).mixin(lifecycle); uni.report = function(type, options) { - stat.sendEvent(type, options); + stat.sendEvent(type, options); }; // #endif - } + // } } main(); diff --git a/packages/uni-stat/dist/uni-cloud-stat.es.js b/packages/uni-stat/dist/uni-cloud-stat.es.js index ce737bbed..89ce6ae78 100644 --- a/packages/uni-stat/dist/uni-cloud-stat.es.js +++ b/packages/uni-stat/dist/uni-cloud-stat.es.js @@ -734,13 +734,16 @@ class Report { * @param {Object} self * @param {Object} type */ - applicationHide(self, type) { + applicationHide(self, type) { + if(!self){ + // 表示应用切换到后台 ,此时需要从页面栈获取页面实例 + self = get_page_vm(); + } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; get_last_time(); const time = get_residence_time(); const route = get_page_route(self); - // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.sendHideRequest({ urlref: route, @@ -1114,14 +1117,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } // #endif @@ -1136,14 +1139,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } // #endif @@ -1225,10 +1228,12 @@ const lifecycle = { function main() { - // console.log('--- 统计开启') - if (process.env.NODE_ENV === 'development') { - uni.report = function(type, options) {}; - } else { + { + console.log('uni统计开启,version:2'); + } + // if (process.env.NODE_ENV === 'development') { + // uni.report = function(type, options) {} + // } else { // #ifdef VUE3 uni.onCreateVueApp((app) => { app.mixin(lifecycle); @@ -1236,7 +1241,7 @@ function main() { stat.sendEvent(type, options); }; }); - + if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { uni.onAppHide(() => { stat.appHide(get_page_vm()); @@ -1246,15 +1251,15 @@ function main() { }); } // #endif - + // #ifndef VUE3 const Vue = require('vue'); (Vue.default || Vue).mixin(lifecycle); uni.report = function(type, options) { - stat.sendEvent(type, options); + stat.sendEvent(type, options); }; // #endif - } + // } } main(); diff --git a/packages/uni-stat/dist/uni-stat.cjs.js b/packages/uni-stat/dist/uni-stat.cjs.js index cdbd785a4..7007a47e4 100644 --- a/packages/uni-stat/dist/uni-stat.cjs.js +++ b/packages/uni-stat/dist/uni-stat.cjs.js @@ -736,13 +736,16 @@ class Report { * @param {Object} self * @param {Object} type */ - applicationHide(self, type) { + applicationHide(self, type) { + if(!self){ + // 表示应用切换到后台 ,此时需要从页面栈获取页面实例 + self = get_page_vm(); + } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; get_last_time(); const time = get_residence_time(); const route = get_page_route(self); - // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.sendHideRequest({ urlref: route, @@ -1131,14 +1134,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } // #endif @@ -1153,14 +1156,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } // #endif @@ -1242,10 +1245,12 @@ const lifecycle = { function main() { - // console.log('--- 统计开启') - if (process.env.NODE_ENV === 'development') { - uni.report = function(type, options) {}; - } else { + { + console.log('uni统计开启,version:1'); + } + // if (process.env.NODE_ENV === 'development') { + // uni.report = function(type, options) {} + // } else { // #ifdef VUE3 uni.onCreateVueApp((app) => { app.mixin(lifecycle); @@ -1253,7 +1258,7 @@ function main() { stat.sendEvent(type, options); }; }); - + if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { uni.onAppHide(() => { stat.appHide(get_page_vm()); @@ -1263,15 +1268,15 @@ function main() { }); } // #endif - + // #ifndef VUE3 const Vue = require('vue'); (Vue.default || Vue).mixin(lifecycle); uni.report = function(type, options) { - stat.sendEvent(type, options); + stat.sendEvent(type, options); }; // #endif - } + // } } main(); diff --git a/packages/uni-stat/dist/uni-stat.es.js b/packages/uni-stat/dist/uni-stat.es.js index 5b8a43f6c..5feabef11 100644 --- a/packages/uni-stat/dist/uni-stat.es.js +++ b/packages/uni-stat/dist/uni-stat.es.js @@ -734,13 +734,16 @@ class Report { * @param {Object} self * @param {Object} type */ - applicationHide(self, type) { + applicationHide(self, type) { + if(!self){ + // 表示应用切换到后台 ,此时需要从页面栈获取页面实例 + self = get_page_vm(); + } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true; get_last_time(); const time = get_residence_time(); const route = get_page_route(self); - // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route); this.sendHideRequest({ urlref: route, @@ -1129,14 +1132,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appShow(self); + this.appShow(); } // #endif @@ -1151,14 +1154,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appHide(self); + this.appHide(); } // #endif @@ -1240,10 +1243,12 @@ const lifecycle = { function main() { - // console.log('--- 统计开启') - if (process.env.NODE_ENV === 'development') { - uni.report = function(type, options) {}; - } else { + { + console.log('uni统计开启,version:1'); + } + // if (process.env.NODE_ENV === 'development') { + // uni.report = function(type, options) {} + // } else { // #ifdef VUE3 uni.onCreateVueApp((app) => { app.mixin(lifecycle); @@ -1251,7 +1256,7 @@ function main() { stat.sendEvent(type, options); }; }); - + if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { uni.onAppHide(() => { stat.appHide(get_page_vm()); @@ -1261,15 +1266,15 @@ function main() { }); } // #endif - + // #ifndef VUE3 const Vue = require('vue'); (Vue.default || Vue).mixin(lifecycle); uni.report = function(type, options) { - stat.sendEvent(type, options); + stat.sendEvent(type, options); }; // #endif - } + // } } main(); diff --git a/packages/uni-stat/src/core/report.js b/packages/uni-stat/src/core/report.js index abdd07012..24b663391 100644 --- a/packages/uni-stat/src/core/report.js +++ b/packages/uni-stat/src/core/report.js @@ -26,7 +26,8 @@ import { get_page_name, is_report_data, get_sgin, - get_encodeURIComponent_options + get_encodeURIComponent_options, + get_page_vm } from '../utils/pageInfo.js' import { @@ -199,13 +200,16 @@ export default class Report { * @param {Object} self * @param {Object} type */ - applicationHide(self, type) { + applicationHide(self, type) { + if(!self){ + // 表示应用切换到后台 ,此时需要从页面栈获取页面实例 + self = get_page_vm() + } // 进入应用后台保存状态,方便进入前台后判断是否上报应用数据 this.__licationHide = true get_last_time() const time = get_residence_time() const route = get_page_route(self) - // this._lastPageRoute = route uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route) this.sendHideRequest({ urlref: route, diff --git a/packages/uni-stat/src/core/stat.js b/packages/uni-stat/src/core/stat.js index 58cd9e36c..28e289053 100644 --- a/packages/uni-stat/src/core/stat.js +++ b/packages/uni-stat/src/core/stat.js @@ -52,14 +52,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appShow(self) + this.appShow() } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appShow(self) + this.appShow() } // #endif @@ -74,14 +74,14 @@ class Stat extends Report { // #ifdef VUE3 if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { if (get_page_types(self) === 'app') { - this.appHide(self) + this.appHide() } } // #endif // #ifndef VUE3 if (get_page_types(self) === 'app') { - this.appHide(self) + this.appHide() } // #endif diff --git a/packages/uni-stat/src/index.js b/packages/uni-stat/src/index.js index bb822e4dc..7baf1bfde 100644 --- a/packages/uni-stat/src/index.js +++ b/packages/uni-stat/src/index.js @@ -46,7 +46,12 @@ const lifecycle = { function main() { - // console.log('--- 统计开启') + if (__STAT_VERSION__ === '1') { + console.log('uni统计开启,version:1') + } + if (__STAT_VERSION__ === '2') { + console.log('uni统计开启,version:2') + } if (process.env.NODE_ENV === 'development') { uni.report = function(type, options) {} } else { @@ -57,7 +62,7 @@ function main() { stat.sendEvent(type, options) } }) - + if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') { uni.onAppHide(() => { stat.appHide(get_page_vm()); @@ -67,15 +72,15 @@ function main() { }) } // #endif - + // #ifndef VUE3 const Vue = require('vue'); (Vue.default || Vue).mixin(lifecycle); uni.report = function(type, options) { - stat.sendEvent(type, options); + stat.sendEvent(type, options); }; // #endif } } -main() +main() diff --git a/packages/uni-stat/src/parameter.js b/packages/uni-stat/src/parameter.js deleted file mode 100644 index f58df9c8a..000000000 --- a/packages/uni-stat/src/parameter.js +++ /dev/null @@ -1,384 +0,0 @@ -import { - PAGE_PVER_TIME, - APP_PVER_TIME, - STAT_URL, - STAT_VERSION, - DIFF_TIME, -} from './config.ts' -const statConfig = { - appid: process.env.UNI_APP_ID, -} -const UUID_KEY = '__DC_STAT_UUID' -const UUID_VALUE = '__DC_UUID_VALUE' - -export function getUuid() { - let uuid = '' - if (getPlatformName() === 'n') { - try { - uuid = plus.runtime.getDCloudId() - } catch (e) { - uuid = '' - } - return uuid - } - - try { - uuid = uni.getStorageSync(UUID_KEY) - } catch (e) { - uuid = UUID_VALUE - } - - if (!uuid) { - uuid = Date.now() + '' + Math.floor(Math.random() * 1e7) - try { - uni.setStorageSync(UUID_KEY, uuid) - } catch (e) { - uni.setStorageSync(UUID_KEY, UUID_VALUE) - } - } - return uuid -} - -export const getSgin = (statData) => { - let arr = Object.keys(statData) - let sortArr = arr.sort() - let sgin = {} - let sginStr = '' - for (var i in sortArr) { - sgin[sortArr[i]] = statData[sortArr[i]] - sginStr += sortArr[i] + '=' + statData[sortArr[i]] + '&' - } - // const options = sginStr.substr(0, sginStr.length - 1) - // sginStr = sginStr.substr(0, sginStr.length - 1) + '&key=' + STAT_KEY; - // const si = crypto.createHash('md5').update(sginStr).digest('hex'); - return { - sign: '', - options: sginStr.substr(0, sginStr.length - 1), - } -} - -export const getSplicing = (data) => { - let str = '' - for (var i in data) { - str += i + '=' + data[i] + '&' - } - return str.substr(0, str.length - 1) -} - -export const getTime = () => { - return parseInt(new Date().getTime() / 1000) -} - -export const getPlatformName = () => { - const aliArr = ['y', 'a', 'p', 'mp-ali'] - const platformList = { - 'app-plus': 'n', - h5: 'h5', - 'mp-weixin': 'wx', - [aliArr.reverse().join('')]: 'ali', - 'mp-baidu': 'bd', - 'mp-toutiao': 'tt', - 'mp-qq': 'qq', - 'quickapp-native': 'qn', - 'mp-kuaishou': 'ks', - } - return platformList[process.env.VUE_APP_PLATFORM] -} - -export const getPackName = () => { - let packName = '' - if (getPlatformName() === 'wx' || getPlatformName() === 'qq') { - // 兼容微信小程序低版本基础库 - if (uni.canIUse('getAccountInfoSync')) { - packName = uni.getAccountInfoSync().miniProgram.appId || '' - } - } - return packName -} - -export const getVersion = () => { - return getPlatformName() === 'n' ? plus.runtime.version : '' -} - -export const getChannel = () => { - const platformName = getPlatformName() - let channel = '' - if (platformName === 'n') { - channel = plus.runtime.channel - } - if (platformName === 'wx') { - // TODO; - } - return channel -} - -export const getScene = (options) => { - const platformName = getPlatformName() - let scene = '' - if (options) { - return options - } - if (platformName === 'wx') { - scene = uni.getLaunchOptionsSync().scene - } - return scene -} -const First__Visit__Time__KEY = 'First__Visit__Time' -const Last__Visit__Time__KEY = 'Last__Visit__Time' - -export const getFirstVisitTime = () => { - const timeStorge = uni.getStorageSync(First__Visit__Time__KEY) - let time = 0 - if (timeStorge) { - time = timeStorge - } else { - time = getTime() - uni.setStorageSync(First__Visit__Time__KEY, time) - uni.removeStorageSync(Last__Visit__Time__KEY) - } - return time -} - -export const getLastVisitTime = () => { - const timeStorge = uni.getStorageSync(Last__Visit__Time__KEY) - let time = 0 - if (timeStorge) { - time = timeStorge - } else { - time = '' - } - uni.setStorageSync(Last__Visit__Time__KEY, getTime()) - return time -} - -const PAGE_RESIDENCE_TIME = '__page__residence__time' -let First_Page_residence_time = 0 -let Last_Page_residence_time = 0 - -export const setPageResidenceTime = () => { - First_Page_residence_time = getTime() - if (getPlatformName() === 'n') { - uni.setStorageSync(PAGE_RESIDENCE_TIME, getTime()) - } - return First_Page_residence_time -} - -export const getPageResidenceTime = () => { - Last_Page_residence_time = getTime() - if (getPlatformName() === 'n') { - First_Page_residence_time = uni.getStorageSync(PAGE_RESIDENCE_TIME) - } - return Last_Page_residence_time - First_Page_residence_time -} -const TOTAL__VISIT__COUNT = 'Total__Visit__Count' -export const getTotalVisitCount = () => { - const timeStorge = uni.getStorageSync(TOTAL__VISIT__COUNT) - let count = 1 - if (timeStorge) { - count = timeStorge - count++ - } - uni.setStorageSync(TOTAL__VISIT__COUNT, count) - return count -} - -export const GetEncodeURIComponentOptions = (statData) => { - let data = {} - for (let prop in statData) { - data[prop] = encodeURIComponent(statData[prop]) - } - return data -} - -let Set__First__Time = 0 -let Set__Last__Time = 0 - -export const getFirstTime = () => { - let time = new Date().getTime() - Set__First__Time = time - Set__Last__Time = 0 - return time -} - -export const getLastTime = () => { - let time = new Date().getTime() - Set__Last__Time = time - return time -} - -export const getResidenceTime = (type) => { - let residenceTime = 0 - if (Set__First__Time !== 0) { - residenceTime = Set__Last__Time - Set__First__Time - } - - residenceTime = parseInt(residenceTime / 1000) - residenceTime = residenceTime < 1 ? 1 : residenceTime - if (type === 'app') { - let overtime = residenceTime > APP_PVER_TIME ? true : false - return { - residenceTime, - overtime, - } - } - if (type === 'page') { - let overtime = residenceTime > PAGE_PVER_TIME ? true : false - return { - residenceTime, - overtime, - } - } - - return { - residenceTime, - } -} - -export const getRoute = () => { - var pages = getCurrentPages() - var page = pages[pages.length - 1] - if (!page) return '' - // TODO 需要确认如果不用 $vm ,其他平台会不会出错 - let _self = page.$vm - - if (getPlatformName() === 'bd') { - return _self.$mp && _self.$mp.page.is - } else { - return _self.route || (_self.$scope && _self.$scope.route) - } -} - -export const getPageRoute = (_this) => { - let pageVm = _this.self - let page = pageVm.$page || pageVm.$scope.$page - return page.fullPath === '/' ? page.route : page.fullPath -} - -export const getPageTypes = (self) => { - if ( - self.$mpType === 'page' || - (self.$mp && self.$mp.mpType === 'page') || - self.$options.mpType === 'page' - ) { - return true - } - return false -} - -export const calibration = (eventName, options) => { - // login 、 share 、pay_success 、pay_fail 、register 、title - if (!eventName) { - console.error(`uni.report 缺少 [eventName] 参数`) - return true - } - if (typeof eventName !== 'string') { - console.error(`uni.report [eventName] 参数类型错误,只能为 String 类型`) - return true - } - if (eventName.length > 255) { - console.error(`uni.report [eventName] 参数长度不能大于 255`) - return true - } - - if (typeof options !== 'string' && typeof options !== 'object') { - console.error( - `uni.report [options] 参数类型错误,只能为 String 或 Object 类型` - ) - return true - } - - if (typeof options === 'string' && options.length > 255) { - console.error(`uni.report [options] 参数长度不能大于 255`) - return true - } - - if (eventName === 'title' && typeof options !== 'string') { - console.error( - 'uni.report [eventName] 参数为 title 时,[options] 参数只能为 String 类型' - ) - return true - } -} - -const Report_Data_Time = 'Report_Data_Time' -const Report_Status = 'Report_Status' -export const isReportData = () => { - return new Promise((resolve, reject) => { - let start_time = '' - let end_time = new Date().getTime() - let diff_time = DIFF_TIME - let report_status = 1 - try { - start_time = uni.getStorageSync(Report_Data_Time) - report_status = uni.getStorageSync(Report_Status) - } catch (e) { - start_time = '' - report_status = 1 - } - - if (report_status === '') { - requestData(({ enable }) => { - uni.setStorageSync(Report_Data_Time, end_time) - uni.setStorageSync(Report_Status, enable) - if (enable === 1) { - resolve() - } - }) - return - } - - if (report_status === 1) { - resolve() - } - - if (!start_time) { - uni.setStorageSync(Report_Data_Time, end_time) - start_time = end_time - } - - if (end_time - start_time > diff_time) { - requestData(({ enable }) => { - uni.setStorageSync(Report_Data_Time, end_time) - uni.setStorageSync(Report_Status, enable) - }) - } - }) -} - -const requestData = (done) => { - let formData = { - usv: STAT_VERSION, - conf: JSON.stringify({ - ak: statConfig.appid, - }), - } - uni.request({ - url: STAT_URL, - method: 'GET', - data: formData, - success: (res) => { - const { data } = res - if (data.ret === 0) { - typeof done === 'function' && - done({ - enable: data.enable, - }) - } - }, - fail: (e) => { - let report_status_code = 1 - try { - report_status_code = uni.getStorageSync(Report_Status) - } catch (e) { - report_status_code = 1 - } - if (report_status_code === '') { - report_status_code = 1 - } - typeof done === 'function' && - done({ - enable: report_status_code, - }) - }, - }) -} diff --git a/packages/uni-stat/src/stat.js b/packages/uni-stat/src/stat.js deleted file mode 100644 index b75500f6c..000000000 --- a/packages/uni-stat/src/stat.js +++ /dev/null @@ -1,556 +0,0 @@ -import { - getUuid, - getSgin, - getSplicing, - getPackName, - getPlatformName, - getVersion, - getChannel, - getScene, - getTime, - getFirstVisitTime, - getLastVisitTime, - setPageResidenceTime, - getPageResidenceTime, - getTotalVisitCount, - GetEncodeURIComponentOptions, - getFirstTime, - getLastTime, - getResidenceTime, - getPageRoute, - getRoute, - getPageTypes, - calibration, - isReportData, -} from './parameter' - -import { - STAT_URL, - STAT_VERSION, - STAT_H5_URL, - OPERATING_TIME, -} from './config.ts' - -const titleJsons = process.env.UNI_STAT_TITLE_JSON - -const statConfig = { - appid: process.env.UNI_APP_ID, -} -const resultOptions = uni.getSystemInfoSync() - -class Util { - constructor() { - this.self = '' - this._retry = 0 - this._platform = '' - this._query = {} - this._navigationBarTitle = { - config: '', - page: '', - report: '', - lt: '', - } - this._operatingTime = 0 - this._reportingRequestData = { - 1: [], - 11: [], - } - this.__prevent_triggering = false - - this.__licationHide = false - this.__licationShow = false - this._lastPageRoute = '' - this.statData = { - uuid: getUuid(), - ut: getPlatformName(), - mpn: getPackName(), - ak: statConfig.appid, - usv: STAT_VERSION, - v: getVersion(), - ch: getChannel(), - cn: '', - pn: '', - ct: '', - t: getTime(), - tt: '', - p: resultOptions.platform === 'android' ? 'a' : 'i', - brand: resultOptions.brand || '', - md: resultOptions.model, - sv: resultOptions.system.replace(/(Android|iOS)\s/, ''), - mpsdk: resultOptions.SDKVersion || '', - mpv: resultOptions.version || '', - lang: resultOptions.language, - pr: resultOptions.pixelRatio, - ww: resultOptions.windowWidth, - wh: resultOptions.windowHeight, - sw: resultOptions.screenWidth, - sh: resultOptions.screenHeight, - } - // 注册拦截器 - let registerInterceptor = - typeof uni.addInterceptor === 'function' && - process.env.NODE_ENV !== 'development' - if (registerInterceptor) { - this.addInterceptorInit() - this.interceptLogin() - this.interceptShare(true) - this.interceptRequestPayment() - } - } - - addInterceptorInit() { - let self = this - uni.addInterceptor('setNavigationBarTitle', { - invoke(args) { - self._navigationBarTitle.page = args.title - }, - }) - } - - interceptLogin() { - let self = this - uni.addInterceptor('login', { - complete() { - self._login() - }, - }) - } - - interceptShare(type) { - let self = this - if (!type) { - self._share() - return - } - uni.addInterceptor('share', { - success() { - self._share() - }, - fail() { - self._share() - }, - }) - } - - interceptRequestPayment() { - let self = this - uni.addInterceptor('requestPayment', { - success() { - self._payment('pay_success') - }, - fail() { - self._payment('pay_fail') - }, - }) - } - - getIsReportData() { - return isReportData() - } - - _applicationShow() { - if (this.__licationHide) { - getLastTime() - const time = getResidenceTime('app') - if (time.overtime) { - let options = { - path: this._lastPageRoute, - scene: this.statData.sc, - } - this._sendReportRequest(options) - } - this.__licationHide = false - } - } - - _applicationHide(self, type) { - this.__licationHide = true - getLastTime() - const time = getResidenceTime() - getFirstTime() - const route = getPageRoute(this) - this._sendHideRequest( - { - urlref: route, - urlref_ts: time.residenceTime, - }, - type - ) - } - - _pageShow() { - const route = getPageRoute(this) - const routepath = getRoute(this) - this._navigationBarTitle.config = - (titleJsons && titleJsons[routepath]) || '' - if (this.__licationShow) { - getFirstTime() - this.__licationShow = false - this._lastPageRoute = route - return - } - - getLastTime() - const time = getResidenceTime('page') - // 停留时间 - if (time.overtime) { - let options = { - path: route, - scene: this.statData.sc, - } - this._sendReportRequest(options) - } - getFirstTime() - } - - _pageHide() { - if (!this.__licationHide) { - getLastTime() - const time = getResidenceTime('page') - let route = getPageRoute(this) - if (!this._lastPageRoute) { - this._lastPageRoute = route - } - this._sendPageRequest({ - url: route, - urlref: this._lastPageRoute, - urlref_ts: time.residenceTime, - }) - this._lastPageRoute = route - this._navigationBarTitle = { - config: '', - page: '', - report: '', - lt: '', - } - return - } - } - - _login() { - this._sendEventRequest( - { - key: 'login', - }, - 0 - ) - } - - _share() { - this._sendEventRequest( - { - key: 'share', - }, - 0 - ) - } - _payment(key) { - this._sendEventRequest( - { - key, - }, - 0 - ) - } - _sendReportRequest(options) { - this._navigationBarTitle.lt = '1' - this._navigationBarTitle.config = - (titleJsons && titleJsons[options.path]) || '' - let query = - options.query && JSON.stringify(options.query) !== '{}' - ? '?' + JSON.stringify(options.query) - : '' - this.statData.lt = '1' - this.statData.url = options.path + query || '' - this.statData.t = getTime() - this.statData.sc = getScene(options.scene) - this.statData.fvts = getFirstVisitTime() - this.statData.lvts = getLastVisitTime() - this.statData.tvc = getTotalVisitCount() - if (getPlatformName() === 'n') { - this.getProperty() - } else { - this.getNetworkInfo() - } - } - - _sendPageRequest(opt) { - let { url, urlref, urlref_ts } = opt - this._navigationBarTitle.lt = '11' - let options = { - ak: this.statData.ak, - uuid: this.statData.uuid, - lt: '11', - ut: this.statData.ut, - url, - tt: this.statData.tt, - urlref, - urlref_ts, - ch: this.statData.ch, - usv: this.statData.usv, - t: getTime(), - p: this.statData.p, - } - this.request(options) - } - - _sendHideRequest(opt, type) { - let { urlref, urlref_ts } = opt - let options = { - ak: this.statData.ak, - uuid: this.statData.uuid, - lt: '3', - ut: this.statData.ut, - urlref, - urlref_ts, - ch: this.statData.ch, - usv: this.statData.usv, - t: getTime(), - p: this.statData.p, - } - this.request(options, type) - } - _sendEventRequest({ key = '', value = '' } = {}) { - const route = this._lastPageRoute - let options = { - ak: this.statData.ak, - uuid: this.statData.uuid, - lt: '21', - ut: this.statData.ut, - url: route, - ch: this.statData.ch, - e_n: key, - e_v: typeof value === 'object' ? JSON.stringify(value) : value.toString(), - usv: this.statData.usv, - t: getTime(), - p: this.statData.p, - } - this.request(options) - } - - getNetworkInfo() { - uni.getNetworkType({ - success: (result) => { - this.statData.net = result.networkType - this.getLocation() - }, - }) - } - - getProperty() { - plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => { - this.statData.v = wgtinfo.version || '' - this.getNetworkInfo() - }) - } - - getLocation() { - if (statConfig.getLocation) { - uni.getLocation({ - type: 'wgs84', - geocode: true, - success: (result) => { - if (result.address) { - this.statData.cn = result.address.country - this.statData.pn = result.address.province - this.statData.ct = result.address.city - } - - this.statData.lat = result.latitude - this.statData.lng = result.longitude - this.request(this.statData) - }, - }) - } else { - this.statData.lat = 0 - this.statData.lng = 0 - this.request(this.statData) - } - } - - request(data, type) { - let time = getTime() - const title = this._navigationBarTitle - data.ttn = title.page - data.ttpj = title.config - data.ttc = title.report - let requestData = this._reportingRequestData - if (getPlatformName() === 'n') { - requestData = uni.getStorageSync('__UNI__STAT__DATA') || {} - } - if (!requestData[data.lt]) { - requestData[data.lt] = [] - } - requestData[data.lt].push(data) - if (getPlatformName() === 'n') { - uni.setStorageSync('__UNI__STAT__DATA', requestData) - } - if (getPageResidenceTime() < OPERATING_TIME && !type) { - return - } - let uniStatData = this._reportingRequestData - if (getPlatformName() === 'n') { - uniStatData = uni.getStorageSync('__UNI__STAT__DATA') - } - // 时间超过,重新获取时间戳 - setPageResidenceTime() - let firstArr = [] - let contentArr = [] - let lastArr = [] - - for (let i in uniStatData) { - const rd = uniStatData[i] - rd.forEach((elm) => { - const newData = getSplicing(elm) - if (i === 0) { - firstArr.push(newData) - } else if (i === 3) { - lastArr.push(newData) - } else { - contentArr.push(newData) - } - }) - } - - firstArr.push(...contentArr, ...lastArr) - let optionsData = { - usv: STAT_VERSION, //统计 SDK 版本号 - t: time, //发送请求时的时间戮 - requests: JSON.stringify(firstArr), - } - - this._reportingRequestData = {} - if (getPlatformName() === 'n') { - uni.removeStorageSync('__UNI__STAT__DATA') - } - - if (data.ut === 'h5') { - this.imageRequest(optionsData) - return - } - - if (getPlatformName() === 'n' && this.statData.p === 'a') { - setTimeout(() => { - this._sendRequest(optionsData) - }, 200) - return - } - this._sendRequest(optionsData) - } - _sendRequest(optionsData) { - this.getIsReportData().then(() => { - uni.request({ - url: STAT_URL, - method: 'POST', - data: optionsData, - success: () => {}, - fail: (e) => { - if (++this._retry < 3) { - setTimeout(() => { - this._sendRequest(optionsData) - }, 1000) - } - }, - }) - }) - } - /** - * h5 请求 - */ - imageRequest(data) { - this.getIsReportData().then(() => { - let image = new Image() - let options = getSgin(GetEncodeURIComponentOptions(data)).options - image.src = STAT_H5_URL + '?' + options - }) - } - - sendEvent(key, value) { - // 校验 type 参数 - if (calibration(key, value)) return - - if (key === 'title') { - this._navigationBarTitle.report = value - return - } - this._sendEventRequest( - { - key, - value: typeof value === 'object' ? JSON.stringify(value) : value, - }, - 1 - ) - } -} - -class Stat extends Util { - static getInstance() { - if (!this.instance) { - this.instance = new Stat() - } - return this.instance - } - constructor() { - super() - this.instance = null - } - - report(options, self) { - // TODO 需要确认如果不用 $vm ,其他平台会不会出错 - setPageResidenceTime() - this.__licationShow = true - this._sendReportRequest(options, true) - } - - load(options, self) { - this.self = self - this._query = options - } - - show(self) { - this.self = self - if (getPageTypes(self)) { - this._pageShow(self) - } else { - this._applicationShow(self) - } - } - ready(self) {} - hide(self) { - this.self = self - if (getPageTypes(self)) { - this._pageHide(self) - } else { - this._applicationHide(self, true) - } - } - error(em) { - if (this._platform === 'devtools') { - if (process.env.NODE_ENV === 'development') { - console.info('当前运行环境为开发者工具,不上报数据。') - } - } - let emVal = '' - if (!em.message) { - emVal = JSON.stringify(em) - } else { - emVal = em.stack - } - let options = { - ak: this.statData.ak, - uuid: this.statData.uuid, - lt: '31', - 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: getTime(), - p: this.statData.p, - } - this.request(options) - } -} -export default Stat -- GitLab