小程序模板網(wǎng)

小程序自動(dòng)埋點(diǎn)教程

發(fā)布時(shí)間:2018-12-04 11:51 所屬欄目:小程序開發(fā)教程

在這個(gè)大數(shù)據(jù)的時(shí)代里,數(shù)據(jù)是一個(gè)互聯(lián)網(wǎng)發(fā)展的核心,除了對客戶分析重要之外,公司對自己的產(chǎn)品能否客觀的掌控也十分重要。

埋點(diǎn)的意思是在項(xiàng)目關(guān)鍵位置注入代碼,代碼會向服務(wù)器發(fā)送設(shè)備信息、用戶操作、時(shí)間點(diǎn)等信息。

代碼埋點(diǎn)

最簡單實(shí)現(xiàn)埋點(diǎn)的方法,是讓開發(fā)者在需要的地方添加一句代碼,用來向服務(wù)器發(fā)起請求,匯報(bào)情況

自動(dòng)埋點(diǎn)

埋點(diǎn)的代碼和業(yè)務(wù)邏輯的代碼是沒有直接聯(lián)系的,如果讓開發(fā)者手動(dòng)的在項(xiàng)目中添加代碼,會增加項(xiàng)目耦合。不僅開發(fā)者麻煩,后期維護(hù)也增加了難度。所以能通過引入外部代碼,自動(dòng)在最常用的位置注入埋點(diǎn),是更合理的一種手段。

就web端而言,一般選擇的注入點(diǎn)有:頁面加載完成、用戶點(diǎn)擊鏈接、登錄登出等場景。

小程序生命周期

小程序App函數(shù)有:onLaunch、onShow、onHide、onError、onPageNotFound五個(gè)周期方法,小程序啟動(dòng)時(shí)會走onLaunch方法。

小程序有后臺機(jī)制,當(dāng)用戶關(guān)閉當(dāng)前小程序,回到微信頁面時(shí),小程序不會直接結(jié)束進(jìn)程,而是到內(nèi)存占用到了一定量后,微信會自動(dòng)對小程序進(jìn)行銷毀。

onShow與onHide兩個(gè)方法對應(yīng)的就是小程序前后臺轉(zhuǎn)換,當(dāng)用戶從微信到小程序時(shí),onShow會被調(diào)用;反之,用戶從小程序到微信界面時(shí),會調(diào)用onHide。

小程序每個(gè)頁面都是一個(gè)Page,每個(gè)Page有:onLoad/onReady/onShow/onHide/onUnload/onShareAppMessage/onPullDownRefresh等等周期方法。

小程序埋點(diǎn)

在小程序各個(gè)生命周期埋點(diǎn),可以有效的收集到用戶操作數(shù)據(jù),正常小程序開發(fā)者,這些周期方法都是由開發(fā)者聲明的。開發(fā)者可以在周期方法中寫入?yún)R報(bào)服務(wù)器代碼,但就像之前說的,通過外部代碼實(shí)現(xiàn)這一功能會是更好的選擇。

所以我們需要一些功能代碼,實(shí)現(xiàn)自動(dòng)注入埋點(diǎn)。

App與Page函數(shù)

小程序像是一個(gè)定制的webview,打開App時(shí),小程序首先會調(diào)用聲明的App函數(shù),所以我們可以通過劫持App函數(shù),注入埋點(diǎn)。

var oldApp = App
App = function(args) {
    ... // 改寫周期方法
    oldApp(args)
}
復(fù)制代碼

如以上代碼所示,劫持App函數(shù)后,進(jìn)行改寫周期函數(shù),最后運(yùn)行真正的App函數(shù)。 args及為小程序app.js中配置的模型,包含了App的周期函數(shù)和globalData對象,例如,要在onLaunch方法中注入埋點(diǎn):

其他的周期方法,也可以用這種方式進(jìn)行改寫。

function customLaunch(opt) {
    track() // 向服務(wù)器匯報(bào)
}
var oldLaunch = args.onLaunch
args.onLaunch = function(opt) {
    if (oldLaunch) { // 如果小程序開發(fā)者有聲明
        oldLaunch.call(this, opt)
    }
    customLaunch.call(this, opt) // 自定義周期方法
}
復(fù)制代碼

擴(kuò)展自動(dòng)埋點(diǎn)

每個(gè)應(yīng)用的需求都會不一樣,所以也需要給自動(dòng)埋點(diǎn)賦予自定義埋點(diǎn)的能力。 在每個(gè)page的index.js中,我們可以用 getApp() 方法獲取到小程序全局對象,App函數(shù)中的this指向的就是這個(gè)全局對象,所以我們可以在上面代碼塊中定義自定義埋點(diǎn)方法:

--- app.js
args.onLaunch = function(opt) {
    this[track] = function() {
        ... // 自定義埋點(diǎn)代碼
    }
    ...
}

--- Page的index.js
var app = getApp()
app.track(name) // 發(fā)送自定義報(bào)文
復(fù)制代碼

小程序天然的生命周期相對于web應(yīng)用來說,對埋點(diǎn)需求友好很多,如何控制和實(shí)現(xiàn)可視化埋點(diǎn)是我們需要努力的方向。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://22321a.com/wxmini/doc/course/24993.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢