最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

小程序統(tǒng)計(jì)來(lái)源信息的方案與具體代碼

 更新時(shí)間:2022年09月03日 09:55:50   作者:HullQin  
微信小程序數(shù)據(jù)統(tǒng)計(jì),現(xiàn)在有很多的統(tǒng)計(jì)方法和統(tǒng)計(jì)工具,下面這篇文章主要給大家介紹了關(guān)于小程序統(tǒng)計(jì)來(lái)源信息的方案與具體代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

背景

從用戶認(rèn)知的角度看,廣義的小程序啟動(dòng)可以分為兩種情況,一種是冷啟動(dòng),一種是熱啟動(dòng)。

  • 冷啟動(dòng):如果用戶首次打開(kāi),或小程序銷毀后被用戶再次打開(kāi),此時(shí)小程序需要重新加載啟動(dòng),即冷啟動(dòng)。
  • 熱啟動(dòng):如果用戶已經(jīng)打開(kāi)過(guò)某小程序,然后在一定時(shí)間內(nèi)再次打開(kāi)該小程序,此時(shí)小程序并未被銷毀,只是從后臺(tái)狀態(tài)進(jìn)入前臺(tái)狀態(tài),這個(gè)過(guò)程就是熱啟動(dòng)。

統(tǒng)計(jì)小程序來(lái)源信息并不容易,為什么?

  • 小程序初次啟動(dòng)時(shí),會(huì)調(diào)用App的onLaunch生命周期。里面有來(lái)源信息。
  • 小程序有熱啟動(dòng)和冷啟動(dòng)機(jī)制。冷啟動(dòng)時(shí),并不會(huì)調(diào)用onLaunch這一生命周期,所以不能依賴onLoad做來(lái)源統(tǒng)計(jì)。
  • 小程序每個(gè)頁(yè)面都有onLoad生命周期,但是無(wú)論內(nèi)部跳轉(zhuǎn)、還是外部跳轉(zhuǎn),都會(huì)執(zhí)行這一生命周期,我們無(wú)法區(qū)分,所以不能依賴onLoad做來(lái)源統(tǒng)計(jì)。

這樣看,統(tǒng)計(jì)來(lái)源似乎是不可能的事情。

但是,如果你閱讀過(guò)這篇文章《如何全局重寫(xiě)小程序 Page函數(shù) wx對(duì)象?》和這篇文章《小程序安全指南:如何禁止外部直接跳轉(zhuǎn)到小程序某頁(yè)面》,也許你能自己想到最佳方案。

方案

區(qū)分「內(nèi)部跳轉(zhuǎn)」還是「外部跳轉(zhuǎn)」

先用一種方式,區(qū)分「內(nèi)部跳轉(zhuǎn)」還是「外部跳轉(zhuǎn)」。

具體方案:全局改寫(xiě)內(nèi)部跳轉(zhuǎn)API(wx.redirectTo、wx.navigateTo),每次內(nèi)部跳轉(zhuǎn)時(shí),都帶個(gè)特殊參數(shù),在onLoad中,判斷有沒(méi)有這個(gè)特殊參數(shù),就知道是來(lái)自內(nèi)部還是外部了。

來(lái)源信息如何獲得?

  • 通過(guò)wx.getLaunchOptionsSync可以獲得。
  • 可以在App.onShow時(shí)獲得。但這種方式需要把來(lái)源信息先保存到某個(gè)全局變量中(如app.globalData.xxx),才能方便的使用。

主要來(lái)源信息有什么?

  • scene場(chǎng)景值,這是小程序官方定義的來(lái)源場(chǎng)景,還是比較全面的。參考場(chǎng)景值列表,場(chǎng)景值指南。
  • referrerInfo.appId。來(lái)源的公眾號(hào)APPID或者小程序APPID。

在onLoad中統(tǒng)計(jì)來(lái)源

在每個(gè)頁(yè)面onLoad時(shí),如果沒(méi)有特殊參數(shù),就上報(bào)來(lái)源信息。

但是不能傻乎乎的給所有頁(yè)面都手動(dòng)加這些上報(bào)邏輯,我們要用《如何全局重寫(xiě)小程序 Page函數(shù) wx對(duì)象?》的方法,一次性給所有頁(yè)面加上。

具體代碼

全局修改跳轉(zhuǎn)API增加特殊參數(shù)

function addFromInner(url) {
  const app = getApp();
  const symbol = url.includes('?') ? '&' : '?';
  return `${url}${symbol}fromInner=1`;
}

export function redirectToProxy(redirectTo) {
  return function (object) {
    return redirectTo({
      ...object,
      url: addFromInner(object.url),
    });
  };
}

function wxProxy(wx) {
  const newWx = { ...wx };
  newWx.navigateTo = redirectToProxy(wx.navigateTo);
  newWx.redirectTo = redirectToProxy(wx.redirectTo);
  return newWx;
}

wx = wxProxy(wx);

全局修改onLoad自動(dòng)上報(bào)外部跳轉(zhuǎn)

function onLoadProxy(onLoad) {
  return function (options) {
    // 如果沒(méi)有參數(shù)fromInner,表明是外部跳轉(zhuǎn)來(lái)的,就上報(bào)一次來(lái)源
    if (!options.fromInner) {
      const launchOptions = wx.getLaunchOptionsSync();
      // 這里上報(bào)launchOptions
      // 可以通過(guò)this.route 獲得當(dāng)前頁(yè)面的路由信息,一并上報(bào)
    }
    if (onLoad) {
      return onLoad.call(this, options);
    }
  };
}

const PageProxy = (Page) => function (options) {
  const newOptions = {
    ...options,
    onLoad: onLoadProxy(options.onLoad),
  };
  Page(newOptions);
};

Page = PageProxy(Page);

總結(jié)

到此這篇關(guān)于小程序統(tǒng)計(jì)來(lái)源信息的方案與具體代碼的文章就介紹到這了,更多相關(guān)小程序統(tǒng)計(jì)來(lái)源信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

乌海市| 郓城县| 泰兴市| 九龙县| 台东县| 淄博市| 河曲县| 焦作市| 宾阳县| 克拉玛依市| 德令哈市| 札达县| 开封县| 建始县| 什邡市| 莎车县| 兴化市| 徐州市| 敦化市| 郧西县| 嘉定区| 浑源县| 娱乐| 宿迁市| 宝清县| 乐都县| 渭南市| 丰宁| 安顺市| 岳池县| 盖州市| 太保市| 锦屏县| 怀远县| 合阳县| 锡林郭勒盟| 津南区| 商水县| 五家渠市| 剑河县| 崇信县|