微信小程序记录用户行为浏览记录和停留时间以及小程序全局分享

微信小程序记录用户行为浏览记录和停留时间以及小程序全局分享
项目需求
1、后台统计一个用户在我们小程序的每个页面的停留时间
2,前台用户可以在个人中心看到自己的分享记录以及多少人查看

需求分析
需求一:想要记录用户在每个页面的停留时间,无非就是记录用户进来的时间和退出页面的时间,获取时间差。
需求二:每个页面在分享的时候做记录(附带用户的唯一标识openid或者其他跟后端对接)我的分享例

相信大家在看到这个需求之后都会有这样的思路,但是如果在每一个页面都这样操作重复代码太多,后期维护也过于麻烦,因此如果可以做一个全局函数,就可以避免这些问题,下面就是我的代码和具体操作,代码有不足欢迎指正优化,如果有更好的方法我们可以互相share学习一下(▽)。

在app.js中
添加一个重写分享的方法(记录用户行为的操作也放在里面了,代码里面有注释),在onLaunch中调用

  //重写分享方法
  overShare: function () {
    var that = this
    //监听路由切换
    //间接实现全局设置分享内容
    wx.onAppRoute(function (res) {
      //获取加载的页面
      let pages = getCurrentPages(),
          //获取当前页面的对象
          view = pages[pages.length - 1],
          data;
          data = view.data;
          data.timeStart = Date.now() //在当前页面的data中,记录进入页面的时间
      if(!data.addonHide) {
        var oldOnHide = view.onHide  // 记录单独在某些页面onhide里做的一些操作,防止全局覆盖原有页面操作
        data.addonHide = true
        view['onHide'] = function(view) {  //全局添加的一些操作
          // 做一些我们自己想做的事情
          let timeEnd = Date.now()  // 记录onhide时候的时间戳(用户离开页面的操作有两种(跳转页面走的是onhide,直接关闭小程序走的是onUnload )下面onUnload 不做解释,同样的操作)
          var stayTime = timeEnd - data.timeStart // 获取停留时间
          var stayArray = wx.getStorageSync('record') || [] // 这里我获取到当前页面的停留时间之后没有直接调用接口上报,而是先存起来(10条后上报,特殊情况除外(不够十条,用户关闭了小程序)),防止多次提交
          stayArray.push({ //具体数据和相关参数跟后端对接
            userId: wx.getStorageSync('tokenAdmin').frontUserId,
            openId: wx.getStorageSync('tokenAdmin').openId,
            type: data.shareType || '',
            sourceId: data.id || '', // 资源id,(对于需要id的详情页)
            page: res.path,
            stay: stayTime,
            timeStart: data.timeStart,
            timeEnd: timeEnd
          })
          wx.setStorageSync('record', stayArray)
          if(wx.getStorageSync('record').length == that.globalData.recordNumber) { // that.globalData.recordNumber即你规定的条数(多少条后上报)
            that.setRecordBatch() // 调用上报的函数(根据自己接口编写,这里不展示)
          }
           // 调用原来的onHide方法
          oldOnHide.call(that, res) 
        }
        var oldOnUnload = view.onUnload 
        view['onUnload'] = function(view) {
          // 做一些我们自己想做的事情
          let timeEnd = Date.now()
          var stayTime = timeEnd - data.timeStart
          var stayArray = wx.getStorageSync('record') || []
          stayArray.push({
            userId: wx.getStorageSync('tokenAdmin').frontUserId,
            openId: wx.getStorageSync('tokenAdmin').openId,
            type: data.shareType || '',
            sourceId: data.id || '',
            page: res.path,
            stay: stayTime
          })
          wx.setStorageSync('record', stayArray)
          if(wx.getStorageSync('record').length == that.globalData.recordNumber) {
            that.setRecordBatch()
          }
          // 调用原来的onUnload 方法
          oldOnUnload.call(that, res)
        }
      }
      //到此处 记录用户轨迹的操作结束,下面是针对全局分享的操作 (下面注释的这部分代码:统计用户是通过哪种方式查看的小程序,用户用户个人中心我的分享展示,如图一)
      // var scene = '?' + decodeURIComponent(res.query.scene) 
      // var rid =  getUrlParams(scene, 'rid') || ''
      // if (view) {
       //  if(res.query.openid) {
         //  that.setClickRecord(res)
        // }
       //  if(wx.getStorageSync('tokenAdmin')) {
         //  if(rid) {
           //  that.setPosterRecord(rid)
          // }
        // }
        // console.log('是否重写分享方法', data.isOverShare)
        if (data.isOverShare) { // isOverShare参数为是否需要需要重写分享方法,在需要的页面加上该变量
          view.onShareAppMessage = function () {
            if(wx.getStorageSync('tokenAdmin')) { //防止用户在该页面多次分享给不同的人记录成条分享记录,看需求
              if(!data.isShareRecord) {
                that.getshareRecord(res, data)
              }
            }
            if(data.id) { //带id的页面分享参数和不带区分()
              // console.log(data)
              return {
                title: data.shareTitle,
                imageUrl: data.shareImage,
                path: `${view.route}?id=${data.id}&openid=${wx.getStorageSync('tokenAdmin').openId}&ts=${Date.parse(new Date())}`,
              }
            } else {
              return {
                title: data.shareTitle,
                path: `${view.route}?openid=${wx.getStorageSync('tokenAdmin').openId}&ts=${Date.parse(new Date())}`,
                imageUrl: data.shareImage
              }
            }
          }
        }
      }
    })
  },


个人中心我的分享

在这里插入图片描述

都看到这儿了,如果帮到了你,留下你的小心心吧~~ (^-^)V
 

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 需求背景 随着社会的发展,越来越多的人开始拥有宠物。宠物不仅是人们的伙伴,更是家庭的一员。因此,宠物的健康、食物、生活习惯等信息都需要被记录分享,以方便宠物主人了解和掌握宠物的情况。 微信小程序作为一种新型应用平台,拥有广泛的用户群体和便捷的使用方式,因此可以为宠物主人提供一种便捷的宠物分享记录平台。 2. 功能需求 (1)用户注册与登录功能:用户需要注册一个账号并登录才能使用平台的所有功能。 (2)宠物信息管理功能:用户可以添加、删除、修改宠物的基本信息,如品种、年龄、性别、体重、疾病史等。 (3)宠物饮食管理功能:用户可以记录宠物的饮食情况,如喂食的种类、数量、时间等,并可以设置提醒功能,以便及时喂食宠物。 (4)宠物健康管理功能:用户可以记录宠物的健康情况,如打疫苗、看病、生病等,并可以设置提醒功能,以便及时带宠物去看医生。 (5)宠物活动管理功能:用户可以记录宠物的活动情况,如散步、玩耍、训练等,并可以设置提醒功能,以便及时带宠物出去活动。 (6)宠物分享功能:用户可以将宠物的照片、视频等分享给好友,同时也可以浏览其他用户分享的宠物信息。 3. 技术需求 (1)前端技术:使用微信小程序的前端技术,如HTML、CSS、JavaScript等。 (2)后端技术:使用Java等后端技术,实现用户信息的存储、宠物信息的管理、分享功能的实现等。 (3)数据库技术:使用MySQL等数据库技术,存储用户信息、宠物信息等。 (4)云存储技术:使用腾讯云等云存储技术,存储用户上传的宠物照片、视频等。 4. 安全需求 (1)用户隐私保护:用户的个人信息需要得到严格的保护。 (2)数据安全保障:用户的数据需要得到保密,防止数据泄露。 (3)应用程序安全保障:应用程序需要得到安全保障,防止黑客攻击等安全问题。 5. 总结 基于微信小程序的宠物分享记录功能,可以帮助宠物主人更好地管理自己的宠物,同时也可以实现用户之间宠物信息的分享与交流,提高用户之间的交互和沟通。在实现过程中需要考虑到功能需求、技术需求和安全需求等方面,以保障应用程序的可靠性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值