微信小程序記錄用戶行為瀏覽記錄和停留時間以及小程序全局分享


微信小程序記錄用戶行為瀏覽記錄和停留時間以及小程序全局分享
項目需求
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
              }
            }
          }
        }
      }
    })
  },

 


原文鏈接:https://blog.csdn.net/weixin_42311676/article/details/113308618


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM