頁面埋點H5 大數據uniapp 按需要更改代碼就行

邏輯思路 跳轉頁面前,記錄當前頁面的信息停留的時長以及各種信息,然后等走的時候再將記錄的信息發送出去

1.記錄當前頁面信息的函數

//  埋點通用接口
// triggerType: 必傳 類型 entryStr(進入) || leaveStr(離開) || String:自定義事件描述
// pageUrl:非必傳,頁面路徑,不穿默認獲取當前路徑
//再洗一個觸發事件
async function myMta(triggerType = "", pageUrl = '') {console.log('埋點', triggerType, pageUrl)let entryTime, leaveTime, stayTime, nowTime;// entryTime 進入頁面時間// leaveTime 離開頁面時間// stayTime  停留時長// nowTime   進行當前函數的時間if (!triggerType) returnif (triggerType == 'entryStr') {entryTime = new Date().getTime();nowTime = new Date().getTime();leaveTime = null;uni.setStorageSync('entryTime', entryTime)} else {entryTime = uni.getStorageSync('entryTime');leaveTime = new Date().getTime();stayTime = leaveTime - entryTime;nowTime = new Date().getTime();}//異步請求當前網絡信息是wifi還是啥uni.getNetworkType({success: function(res) {let networkType = res.networkType;let token, openid, sysTemInfo;try {uni.getStorage({key: 'storage_key',success: function(res) {token = res.data.tokenopenid = res.data.openIduni.getSystemInfo({success: function(res) {sysTemInfo = resconst urlArgs =getCurrentPageUrlWithArgs(); //通過這個函數獲取當前頁面的信息 如果想返回更多自己去函數里面更改var data = {token: token,openid: openid,triggerType: triggerType,networkType: networkType,pageInfo: {pageUrl: pageUrl,route: urlArgs.route,params: urlArgs.options,title: urlArgs.title,},entryTime: toDateDetail(entryTime),leaveTime: toDateDetail(leaveTime),nowTime: toDateDetail(nowTime),stayTime: stayTime,sysTemInfo: sysTemInfo,// ip: ip[0]}data = {token: token,openid: openid,triggerType: triggerType,networkType: networkType,pageInfo: JSON.stringify({pageUrl: pageUrl,route: urlArgs.route,params: urlArgs.options,title: urlArgs.title,}),entryTime: toDateDetail(entryTime),leaveTime: toDateDetail(leaveTime),nowTime: toDateDetail(nowTime),stayTime: stayTime,sysTemInfo: JSON.stringify(sysTemInfo),// ip: ip[0]}var headers = {};headers['X-Token'] = tokenuni.request({url: 'https://lingzhuang.gengduoke.com/adminapi/customtrajectory/save',data: data,header: headers,method: 'post',success: (res) => {console.log('res', res)},fail: (err) => {console.log('err', err)}})},fail(error) {sysTemInfo = 'null'}})},fail(error) {token = "null"}})} catch (e) {}}})
}// 獲取當前頁面鏈接和參數
function getCurrentPageUrlWithArgs() {const pages = getCurrentPages();const currentPage = pages[pages.length - 1]; //當前頁面的全部信息const route = currentPage.route; //當前路由的路徑 pages/login/loginconst options = currentPage.options; //url里面的參數json類型const title = currentPage.$holder.navigationBarTitleText //當前頁面的navigationBarTitleText/拼接路由url字符串開始///let urlWithArgs = `/${route}?`; //將url里面的參數拼接成字符串  /pages/login/login?a=1for (let key in options) {const value = options[key];urlWithArgs += `${key}=${value}&`;}urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1);/拼接路由url字符串結束///return {options, //當前頁面的參數urlWithArgs, //當前頁面的參數route,title};
}function toDateDetail(number) {if (!number) number = new Date();// var n = number * 1000var date = new Date(number);var Y = date.getFullYear() + "-";var M =(date.getMonth() + 1 < 10 ?"0" + (date.getMonth() + 1) :date.getMonth() + 1) + "-";var D = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();var h = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();var mm = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();var s = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();return Y + "" + M + "" + D + " " + h + ":" + mm + ":" + s;
}/***   appId            ->      小程序ID             類型:String*   appToken         ->      自定義               類型:String*   token            ->      當前用戶token        類型:String*   openid           ->      當前用戶openid       類型:String*   triggerType      ->      事件類型             類型:String*   pageInfo {       ->      當前頁面信息         類型:Object*     pageUrl:       ->      不帶參數             類型:String*     url:           ->      帶參數               類型:String*     ...params      ->      當前頁面所有參數       類型:Object*   }*   entryTime        ->      進入頁面時間          類型:Number*   leaveTime        ->      離開當前頁面時間      類型:Number*   stayTime         ->      停留時長             類型:Number   單位:ms*   sysTemInfo       ->      設備信息             類型:Object*/
export default {myMta
};

2.跳轉進行路由攔截然后讓他進行第一個里面的函數的操作

import Mta from "./myMta.js";
var nav = {navigateTo: ({url}) => {var link = getCurrentPages()[getCurrentPages().length - 1].route;Mta.myMta('leaveStr', link)console.log('navigateTo', link, '-', url)uni.navigateTo({url: url,success: function(res) {Mta.myMta('entryStr', url)}});},redirectTo: ({url}) => {var link = getCurrentPages()[getCurrentPages().length - 1].route;Mta.myMta('leaveStr', link)console.log('redirectTo', link, '-', url)uni.redirectTo({url: url,success: function(res) {Mta.myMta('entryStr', url)}});},reLaunch: ({url}) => {var link = getCurrentPages()[getCurrentPages().length - 1].route;Mta.myMta('leaveStr', link)console.log('reLaunch', link, '-', url)uni.reLaunch({url: url,success: function(res) {Mta.myMta('entryStr', url)}});},switchTab: ({url}) => {var link = getCurrentPages()[getCurrentPages().length - 1].route;Mta.myMta('leaveStr', link)console.log('switchTab', link, '-', url)uni.switchTab({url: url,success: function(res) {Mta.myMta('entryStr', url)}});},navigateBack: ({num}) => {var link = getCurrentPages()[getCurrentPages().length - 1].route;Mta.myMta('leaveStr', link)console.log('navigateBack', link, '-', num)uni.navigateBack({delta: num});},share:()=>{Mta.myMta('share')}
}
export default {...nav
}

3.調用頁面跳轉以及函數監聽和發送

this.nav.navigateTo({url:'/pages/login/login'
})

4.可以封裝全局

頁面埋點/
import nav from '@/utils/navRoute.js'
Vue.prototype.nav = nav
//1.navigateTo
//2.reLaunch
//3.switchTab
//4.navigateBack

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12028.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12028.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12028.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序支付教程

微信小程序支付教程 Person&#xff1a; 微信小程序支付有幾種版本&#xff0c;分別是什么&#xff0c;寫一個詳細教程介紹下 ChatGPT&#xff1a; 微信小程序支付主要有兩種版本&#xff0c;分別為&#xff1a;JSSDK版本&#xff08;v1.0&#xff09;和WeixinJSBridge版本&…

超寬輸送帶耐熱性能怎么樣

超寬輸送帶耐熱性能解析 隨著工業領域的不斷發展和技術革新&#xff0c;超寬輸送帶的應用越來越廣泛。這種輸送帶在冶金、建筑、化工等多個行業中發揮著至關重要的作用&#xff0c;特別是在高溫環境下&#xff0c;其耐熱性能更是備受關注。那么&#xff0c;超寬輸送帶的耐熱性…

解釋下泛型擦除

在Java中&#xff0c;泛型擦除&#xff08;Type Erasure&#xff09;是Java泛型實現的一個重要概念。由于Java的泛型是在編譯時實現的&#xff08;稱為編譯時類型檢查&#xff09;&#xff0c;而在運行時&#xff0c;Java虛擬機&#xff08;JVM&#xff09;并不支持泛型&#x…

HDFS小文件優化方法

1、HDFS小文件弊端 HDFS上每個文件都要在namenode上建立一個索引&#xff0c;這個索引的大小約為150byte&#xff0c;這樣當小文件比較多的時 候 &#xff0c;就會產生很多的索引文件&#xff0c;一方面會大量占用namenode的內存空間 &#xff0c;另一方面就是索引文件過大是的…

Linux —— 線程控制

Linux —— 線程控制 創建多個線程線程的優缺點優點缺點 pthread_self進程和線程的關系pthread_exit 線程等待pthread_ join線程的返回值線程分離pthread_detach 線程取消pthread_cancel pthread_t 的理解 我們今天接著來學習線程&#xff1a; 創建多個線程 我們可以結合以前…

【離散數學】偏序關系中蓋住關系的求取及格論中有補格的判定(c語言實現)

實驗要求 求n的因子函數 我們將n的因子存入數組中&#xff0c;n的因子就是可以整除n的數&#xff0c;所以我們通過一個for循環來求。返回因子個數。 //求n的因子,返回因子個數 int factors(int arr[], int n) {int j 0;for (int i 1; i < n; i){if (n % i 0){arr[j] i…

C++反向迭代器

C反向迭代器 反向迭代器是用正向迭代器適配實現的&#xff0c;本質是寫一個反向迭代器的類模板&#xff0c;給編譯器傳不同的容器的正向迭代器實例化&#xff0c;編譯器去實例化出各種類模板對應的反向迭代器。 #pragma once namespace my_reverse_iterator {template<cla…

代碼隨想錄算法訓練營第五十三天| 1143.最長公共子序列,1035.不相交的線,53. 最大子序和

目錄 題目鏈接&#xff1a;1143.最長公共子序列 思路 代碼 題目鏈接&#xff1a; 1035.不相交的線 思路 代碼 題目鏈接&#xff1a; 53. 最大子序和 思路 代碼 總結 題目鏈接&#xff1a;1143.最長公共子序列 思路 ①dp數組&#xff0c;dp[i][j]表示[0,i-1]的text1和…

軟件測試面試78問

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 1、問&#xff1a;你在測試中發現了一個bug&#xff0c;但是開發經理認為這不是一個bug&#xf…

關于使用git拉取gitlab倉庫的步驟(解決公鑰問題和pytho版本和repo版本不對應的問題)

先獲取權限&#xff0c;提交ssh-key 虛擬機連接 GitLab并提交代碼_gitlab提交mr-CSDN博客 配置完成上訴步驟之后&#xff0c;執行下列指令進行拉去倉庫的內容 sudo apt install repo export PATHpwd/.repo/repo:$PATH python3 "實際路徑"/repo init -u ssh://gitxx…

智能優化算法 | Matlab實現成長優化算法(Growth Optimizer,GO)(內含完整源碼)

智能優化算法 | Matlab實現成長優化算法(Growth Optimizer,GO)(內含完整源碼) 文章目錄 智能優化算法 | Matlab實現成長優化算法(Growth Optimizer,GO)(內含完整源碼)文章概述源碼設計文章概述 智能優化算法 | Matlab實現成長優化算法(Growth Optimizer,GO)(內含…

Java的類和對象(一)—— 初始類和對象,this關鍵字,構造方法

前言 從這篇文章開始&#xff0c;我們就進入到了JavaSE的核心部分。這篇文章是Java類和對象的第一篇&#xff0c;主要介紹類和對象的概念&#xff0c;this關鍵字以及構造方法~~ 什么是類&#xff1f;什么是對象&#xff1f; 學過C語言的老鐵們&#xff0c;可以類比struct自定義…

【哈希】Leetcode 383. 贖金信【簡單】

贖金信 給你兩個字符串&#xff1a;ransomNote 和 magazine &#xff0c;判斷 ransomNote 能不能由 magazine 里面的字符構成。 如果可以&#xff0c;返回 true &#xff1b;否則返回 false 。 magazine 中的每個字符只能在 ransomNote 中使用一次。 解題思路 可以使用哈希…

matlab進行濾波處理

在MATLAB中進行濾波處理&#xff0c;你可以使用內置的函數或自定義濾波器。以下是一些常見的方法&#xff1a; 1. 使用內置濾波器函數 MATLAB提供了多種內置濾波器函數&#xff0c;如filter&#xff0c;filtfilt&#xff0c;butter&#xff08;用于設計巴特沃斯濾波器&#x…

spark結課之tip2

spark常用方法總結&#xff1a; 一、從內部創建RDD (1).通過并行化集合&#xff08;Parallelized Collections&#xff09;&#xff1a; 可以使用SparkContext的parallelize方法將一個已有的集合轉換為RDD。 基本語法&#xff1a; parallelize(collection, numSlicesNone)…

AI系列:大語言模型的RAG(檢索增強生成)技術(下)-- 使用LlamaIndex

目錄 前言什么是LlamaIndex?LlamaIndex代碼設置embedding模型設置LLM模型索引查詢機 驗證使用感受參考資料 前言 繼上一篇文章AI系列&#xff1a;大語言模型的RAG&#xff08;檢索增強生成&#xff09;技術&#xff08;上&#xff09;&#xff0c;這篇文章主要以LlamaIndex為…

銀行業數據運營場景下的數據埋點方案

1、引言 隨著金融科技的快速發展&#xff0c;銀行業的數據運營變得日益重要。數據埋點作為數據收集的重要手段&#xff0c;對于銀行業務的精細化運營、風險管理和產品迭代等方面起著至關重要的作用。本方案將針對銀行業數據運營場景&#xff0c;設計一套完整的數據埋點方案&am…

【生信技能樹】GEO數據挖掘全流程

R包的安裝&#xff0c;每次做分析的時候先運行這段代碼把R包都安裝好了&#xff0c;這段代碼不需要任何改動&#xff0c;每次分析直接運行。 options("repos""https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packag…

思源筆記如何結合群暉WebDav實現云同步數據

文章目錄 1. 開啟群暉WebDav 服務2. 本地局域網IP同步測試3. 群暉安裝Cpolar4. 配置遠程同步地址5. 筆記遠程同步測試6. 固定公網地址7. 配置固定遠程同步地址 在數字化時代&#xff0c;信息的同步與共享變得尤為重要。無論是個人用戶還是企業團隊&#xff0c;都渴望能夠實現跨…