支付寶小程序從手動(dòng)埋點(diǎn)到自動(dòng)埋點(diǎn)的實(shí)現(xiàn)過程
手動(dòng)埋點(diǎn)
現(xiàn)在小程序埋點(diǎn)需要手動(dòng)添加埋點(diǎn)事件觸發(fā),
// axml <view onTap="track" data-ilog="xxx">這只是一個(gè)展示view</view> //js track(e) { ...業(yè)務(wù)代碼 // 埋點(diǎn)代碼 app.sentEventCustom("click", this, this.query, e.target.dataset.ilog); }
會(huì)有以下幾個(gè)問題:
- 業(yè)務(wù)代碼和埋點(diǎn)代碼寫在一起,影響代碼的閱讀體驗(yàn)
- 埋點(diǎn)代碼散落在各個(gè)地方,不方便管理。比如運(yùn)營要增加刪除埋點(diǎn)時(shí),統(tǒng)一管理會(huì)更方便
需要埋點(diǎn)的場(chǎng)景
1.普通點(diǎn)擊事件
// axml <view onTap="track" class="ilog" data-ilog="xxx">這只是一個(gè)展示view</view> //js track(e) { // 埋點(diǎn)代碼 report() }
- 下拉刷新時(shí),沒有觸發(fā)點(diǎn)擊,可以選擇對(duì)該事件進(jìn)行埋點(diǎn)
/** * @description: 下拉刷新 * @param {*} * @return {*} */ onPullDownRefresh() { // 埋點(diǎn)代碼 report() },
- 埋點(diǎn)要在promise事件上
//js async onAuthPhone() { await app.getUserPhone() // 埋點(diǎn)代碼 report() }
總結(jié):我們要實(shí)現(xiàn)頁面元素點(diǎn)擊時(shí)觸發(fā)埋點(diǎn),也要能在事件執(zhí)行后觸發(fā)埋點(diǎn)
自動(dòng)埋點(diǎn)
1、通過事件冒泡監(jiān)聽元素是否被點(diǎn)擊
方案一:在axml最外層綁定catchTap事件,獲取點(diǎn)擊元素的ilog信息
- 缺點(diǎn):捕獲的目標(biāo)元素為最里層,該層不一定添加了ilog
方案二:在需要發(fā)送埋點(diǎn)的元素增加樣式類'.ilog',點(diǎn)擊時(shí)最外層catchTap獲取點(diǎn)擊位置的X,Y軸值,同時(shí)通過queryselectAll獲取'.ilog'元素的位置,判斷點(diǎn)擊位置是否在'.ilog'內(nèi),如果是的話,發(fā)送埋點(diǎn)信息。如下圖:
2、擴(kuò)展Page方法
由于最外層綁定catchTap事件方法需要在Page中定義以供wxml調(diào)用,如果每個(gè)頁面手動(dòng)編寫就過于繁瑣了,可以通過改寫Page來實(shí)現(xiàn)自動(dòng)擴(kuò)展,代碼如下
// 記錄原Page方法 const originPage = Page; // 重寫Page方法 Page = (page) => { // 給page對(duì)象注入三個(gè)方法 page.elementTracker = function() {} page.methodTracker = function() {} page.isClickTrackArea = function() {} return originPage(page); };
3、對(duì)頁面函數(shù)埋點(diǎn)
有些場(chǎng)景我們除了對(duì)頁面元素點(diǎn)擊埋點(diǎn),還要對(duì)頁面函數(shù)進(jìn)行埋點(diǎn),例如用戶下拉刷新的時(shí)候,可以對(duì)原方法進(jìn)行包裝,插入埋點(diǎn)代碼,方案和第二點(diǎn)差不多。
const originPage = Page; // 重寫Page方法 Page = (page) => { // 給onShow方法插入埋點(diǎn) const originMethod = page['onShow']; page['onShow'] = function() { report() // 記錄埋點(diǎn) return originMethod(); } return originPage(page); };
4、通過配置表設(shè)置埋點(diǎn)
上面介紹了頁面元素和函數(shù)的埋點(diǎn)方式,下面講一下如何管理埋點(diǎn)信息解決代碼入侵問題,可以把埋點(diǎn)信息以配置表的方式聲明,以后還可以做到動(dòng)態(tài)配置,在服務(wù)端配置完畢下發(fā)到客戶端。
const tracks = { path: 'pages/film/detail', elementTracks: [ { element: '.buy-now', // 聲明需要監(jiān)聽的元素 dataKeys: ['film.filmId'], // 聲明需要獲取Data下的film對(duì)象下的filmId字段 }, ], methodTracks: [ { method: 'toBannerDetail', // 聲明需要監(jiān)聽的函數(shù) dataKeys: ['imgUrls'], // 聲明需要獲取Data下的imgUrls數(shù)據(jù) }, ], };
總結(jié)
到此這篇關(guān)于支付寶小程序從手動(dòng)埋點(diǎn)到自動(dòng)埋點(diǎn)的文章就介紹到這了,更多相關(guān)支付寶小程序自動(dòng)埋點(diǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從歷史講起JavaScript基因里的函數(shù)式編程實(shí)例
這篇文章主要為大家介紹了從歷史講起JavaScript基因里的函數(shù)式編程實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10JSChart輕量級(jí)圖形報(bào)表工具(內(nèi)置函數(shù)中文參考)
JSChart是一個(gè)輕量級(jí)的在線圖表生成工具,本身十分小巧,簡(jiǎn)單易用,相對(duì)來講功能也不是特別強(qiáng)大,但是對(duì)于一些要求不高的應(yīng)用來講已經(jīng)夠用了,最近兩天在做一個(gè)監(jiān)控系統(tǒng),想到了它。2010-10-10JS中使用cavas截圖網(wǎng)頁并解決跨域及模糊問題
這篇文章主要介紹了JS中使用cavas截取網(wǎng)頁并解決跨域以及模糊問題 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11JavaScript實(shí)現(xiàn)點(diǎn)擊改變圖片形狀(transform應(yīng)用)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊改變圖片形狀,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)(前端部分)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)的前端部分代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09JavaScript中事件流冒泡的原理與實(shí)現(xiàn)
在JavaScript中,事件流冒泡是一種非常重要的概念,它是指事件從最內(nèi)層的元素開始,逐級(jí)向外傳播到最外層元素的過程,下面我們就來了解下JavaScript中事件流冒泡的原理與實(shí)現(xiàn)吧2023-11-11