知识学堂 > 课程 > 小程序强制更新 页面停留时间 访问时间

小程序强制更新 页面停留时间 访问时间

发布日期:2020/8/27 来源:聚恒【返回】

小程序强制更新 getUpdateManager wx.canIUse
//app.js
import router from '/utils/router.js'

App({
  onLaunch: function () {
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs'|| []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    var that = this;

    // 获取当前版本号 进行强制更新
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager();
      updateManager.onCheckForUpdate(function (res) {
      
        if (res.hasUpdate{
          // 弹出提示框,提示用户更新并重启小程序
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              showCancel: false,
              confirmText: '马上重启',
              content: '新版本已经上线,需要您重启小程序以应用新版本。',
              success: function (res) {
                if (res.confirm{
                  // 调用 applyUpdate 应用新版本并重启
                  updateManager.applyUpdate();
                }
              }
            });
          });
          // 新版本下载失败时弹出提示框
          updateManager.onUpdateFailed(function () {
            wx.showModal({
              title: '更新失败',
              content: '新版本下载失败,请删除当前小程序,重新搜索打开。',
            });
          });
        }
      });
    } else { // 如果用户微信版本过低,则弹出提示框
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。',
      });
    }

    // 登录
    wx.login({
      success: res => {
        console.log("登录向后台发送数据");
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        wx.request({
          url: 'https://*******************/WX_XCX_openId.ashx',
          data: {
            code: res.code,
          },
          method: 'GET',
          success: function (xxx) {
            //存起来后面要用的
            console.log(xxx);
            console.log("unionId:" + xxx.data.unionId);
            console.log("第2步:" + xxx.data.openId);
            console.log("session_key:" + xxx.data.session_key)
            wx.setStorageSync('openId', xxx.data.openId)
            wx.setStorageSync('session_key', xxx.data.session_key)

            that.globalData.checkLogin = true;
            //由于这里是网络请求,可能会在 Page.onLoad 之后才返回
            // 所以此处加入 callback 以防止这种情况
            if (that.checkLoginReadyCallback{
              that.checkLoginReadyCallback(res);
            }
          },
          fail: function (res) {
            console.log("向后台发送数据失败")
          }
        })
      }
    })

    //监听路由切换
    //间接实现全局设置分享内容
    wx.onAppRoute(function (res) {
      console.log(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 // 获取停留时间
        console.log("输出2:" + res.path)
        console.log("输出3:" + stayTime)
        console.log("输出4:" + data.timeStart)
        console.log("输出5:" + timeEnd)
        console.log("输出6:" + JSON.stringify(res.query))


        wx.request({
          url: 'https://*******************/API/app.ashx',
          method: 'post',
          data: {
            types: "jiankong",
            yemian: res.path,
            chuancan: JSON.stringify(res.query),
            shijian: stayTime,
            openId: wx.getStorageSync('openId'),
          },
          header: {
            'content-type': 'application/x-www-form-urlencoded'
          },
          success: function (res) {

          },
          fail: function (e) {
            wx.showToast({
              title: '网络异常!',
              duration: 2000
            });
          },
          complete: function () {

          }
        });


        // 调用原来的onHide方法
        // oldOnHide.call(that, res) 
      }
      var oldOnUnload = view.onUnload
      view['onUnload'= function (view) {
        // 做一些我们自己想做的事情
        let timeEnd = Date.now()
        var stayTime = timeEnd - data.timeStart
        console.log("输出2:" + res.path)
        console.log("输出3:" + stayTime)
        console.log("输出4:" + data.timeStart)
        console.log("输出5:" + timeEnd)
        console.log("输出6:" + JSON.stringify(res.query))

        wx.request({
          url: 'https://*************************/API/app.ashx',
          method: 'post',
          data: {
            types: "jiankong",
            yemian: res.path,
            chuancan: JSON.stringify(res.query),
            shijian: stayTime,
            openId: wx.getStorageSync('openId'),
          },
          header: {
            'content-type': 'application/x-www-form-urlencoded'
          },
          success: function (res) {

          },
          fail: function (e) {
            wx.showToast({
              title: '网络异常!',
              duration: 2000
            });
          },
          complete: function () {

          }
        });
        // 调用原来的onUnload 方法
        //  oldOnUnload.call(that, res)
      }
      // }
    })
  },
  router,
  globalData: {
    checkLogin: false,
    systemInfo: {
      ...wx.getSystemInfoSync(),
    },
  },

})