页面埋点H5 大数据uniapp 按需要更改代码就行

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 页面埋点H5 大数据uniapp 按需要更改代码就行

页面埋点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) return
  if (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.token
      openid = res.data.openId
      uni.getSystemInfo({
        success: function(res) {
        sysTemInfo = res
        const 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'] = token
        uni.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/login
  const options = currentPage.options; //url里面的参数json类型
  const title = currentPage.$holder.navigationBarTitleText //当前页面的navigationBarTitleText
  /拼接路由url字符串开始///
  let urlWithArgs = `/${route}?`; //将url里面的参数拼接成字符串  /pages/login/login?a=1
  for (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 * 1000
  var 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
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
1月前
|
机器学习/深度学习 供应链 大数据
【2023Mathorcup大数据】B题 电商零售商家需求预测及库存优化问题 python代码解析
本文提供了2023年MathorCup大数据竞赛B题的电商零售商家需求预测及库存优化问题的Python代码解析,涉及数据预处理、特征工程、时间序列预测、聚类分析以及模型预测性能评价等步骤。
93 0
|
29天前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
54 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
30天前
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
|
1月前
|
机器学习/深度学习 数据采集 大数据
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题二建模方案及代码实现详解
本文详细介绍了2022年第三届MathorCup高校数学建模挑战赛大数据竞赛赛道B的问题二的建模方案和Python代码实现,包括数据预处理、特征工程、模型训练以及预测结果的输出,旨在通过数据分析与建模方法帮助中国移动北京公司提升客户满意度。
45 2
|
1月前
|
机器学习/深度学习 算法 大数据
【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A:基于计算机视觉的坑洼道路检测和识别 python 代码解析
本文提供了2023年MathorCup高校数学建模挑战赛大数据竞赛赛道A的解决方案,涉及基于计算机视觉的坑洼道路检测和识别任务,包括数据预处理、特征提取、模型建立、训练与评估等步骤的Python代码解析。
52 0
【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A:基于计算机视觉的坑洼道路检测和识别 python 代码解析
|
1月前
|
机器学习/深度学习 数据采集 大数据
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解
本文详细介绍了2022年第三届MathorCup高校数学建模挑战赛大数据竞赛赛道B的题目——北京移动用户体验影响因素研究,提供了问题一的建模方案、代码实现以及相关性分析,并对问题二的建模方案进行了阐述。
37 0
2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解
|
1月前
|
机器学习/深度学习 数据采集 算法
【 2021 MathorCup杯大数据挑战赛 A题 二手车估价】初赛复赛总结、方案代码及论文
总结了2021 MathorCup杯大数据挑战赛A题“二手车估价”的初赛和复赛经验,包括题目要求、解题思路、所用方法和结果,提供了详细的数据分析、模型构建、论文撰写和工具使用技巧,并展示了初赛和复赛的论文。
35 2
|
1月前
|
移动开发 开发框架 JavaScript
在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
|
1月前
|
移动开发 JavaScript 前端开发
【绝技揭秘】从零到英雄:解锁UniApp H5项目中的二维码生成与扫描秘籍,让你的应用瞬间变身扫码达人!
【8月更文挑战第20天】二维码在移动应用中无处不在。本文详述了在UniApp H5项目中实现二维码生成与扫描的方法。通过对比插件`uni-app-qrcode`和JavaScript库`qrcode-generator`生成二维码的方式,以及使用插件`@juggle/resize-observer`和HTML5的MediaDevices API进行扫描的技术方案,帮助开发者挑选最佳实践。无论是插件的便捷性还是原生JavaScript的灵活性,都能满足不同项目需求。
57 0
|
2月前
|
存储 分布式计算 DataWorks
MaxCompute产品使用合集之如何在代码中解析File类型的文件内容
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
68 11