本文將會介紹Android端非侵入式數(shù)據(jù)采集框架EMonitor
手機客戶端作為重要的流量入口,經(jīng)常會肩負著用戶數(shù)據(jù)監(jiān)測和數(shù)據(jù)采集的重任。待采集的數(shù)據(jù)包括用戶何時啟動應(yīng)用,瀏覽了哪些頁面,點擊了哪些按鈕等等,對于此類需求,比較簡單粗暴的做法就是手動埋點,在需要采集數(shù)據(jù)的位置添加相應(yīng)的代碼。這種做法不僅工作量巨大,而且會增加代碼的耦合度,后期維護成本高。
EMonitor是一款非侵入式的數(shù)據(jù)采集框架,開發(fā)者不需要改動任何代碼,只要引入EMonitor庫并調(diào)用相關(guān)接口就可以實現(xiàn)全量的數(shù)據(jù)采集,代碼耦合度低,易于后期維護。
1.引入EMonitor庫
在project下的build.gradle文件中添加依賴:
maven {url 'https://dl.bintray.com/jnzhang/EMonitor'}
classpath 'com.emonitor.core:emonitorplugin:1.4.8'
在module下的build.gradle文件中添加引用和插件:
apply plugin: 'emplugin'
implementation 'com.emonitor.core:emonitorcore:1.3.1'
2.初始化EmBaseTask
在應(yīng)用程序的入口初始化EmBaseTask:
EmBaseTask.getInstance().init(context);
初始化成功后,EMonitor將會對應(yīng)用的各種行為進行統(tǒng)計,并將統(tǒng)計到的數(shù)據(jù)保存在應(yīng)用目錄下的emonitor_log.log文件中,開發(fā)者可以獲取log中的內(nèi)容進行相應(yīng)的處理,log文件中數(shù)據(jù)的樣式:
2018-11-02 16:38:41 onPause/MainActivity:
2018-11-02 16:38:41 onResume/TaskActivity:
2018-11-02 16:38:43 onClick/TaskActivity: AppCompatButton[0]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:39:25 onClick/TaskActivity: AppCompatButton[1]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:39:29 onClick/TaskActivity: AppCompatButton[2]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:39:32 onClick/TaskActivity: AppCompatButton[0]LinearLayout[3]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:40:18 onClick/TaskActivity: AppCompatButton[1]LinearLayout[3]LinearLayout[0]ConstraintLayout[0]ContentFrameLayout[0]ActionBarOverlayLayout[0]FrameLayout[1]LinearLayout[0]
2018-11-02 16:45:11 onResume/MainActivity:
2018-11-02 16:45:11 onPause/MainActivity:
2018-11-02 16:45:11 onResume/TaskActivity:
2018-11-02 16:45:13 onClick/TaskActivity: LinearLayout[0]FrameLayout[1]ActionBarOverlayLayout[0]ContentFrameLayout[0]ConstraintLayout[0]LinearLayout[0]AppCompatButton[0]
2018-11-02 16:45:47 onClick/TaskActivity: LinearLayout[0]FrameLayout[1]ActionBarOverlayLayout[0]ContentFrameLayout[0]ConstraintLayout[0]LinearLayout[0]AppCompatButton[1]
2018-11-02 16:47:02 onPause/TaskActivity:
2018-11-02 16:47:02 onResume/MainActivity:
3.實現(xiàn)相關(guān)接口
很多時候EMonitor自帶的Log文件并不能滿足開發(fā)者的需求,EMonitor也提供了一些接口,開發(fā)者可以調(diào)用這些接口來實現(xiàn)自己的業(yè)務(wù)邏輯。
3.1調(diào)用用戶點擊某個控件的監(jiān)聽:
EmBaseTask.getInstance().setEmClickListener(new EmClickListener() {
@Override
public void onClick(SingleClickBean singleClickBean) {
//業(yè)務(wù)邏輯
}
});
3.2調(diào)用用戶進出某個頁面的監(jiān)聽:
EmBaseTask.getInstance().setEmEventListener(new EmEventListener() {
@Override
public void EmOnResume(EmEventBean emEventBean) {
//業(yè)務(wù)邏輯
}
@Override
public void EmOnPause(EmEventBean emEventBean) {
//業(yè)務(wù)邏輯
}
});
EMonitor框架接下來將會逐步添加列表瀏覽事件監(jiān)測和用戶地理位置監(jiān)測等功能。