Android開發全埋點技術 Jesseliu

從去年和朋友一起做小程序開始,我開始對于產品的運營有了一個新的認知,今年又買了一本《數據化運營:系統方法與實踐案例》讓我的思維開始從原來的技術型和交互設計型開始慢慢接觸數據運營的概念。關于整體的方案還正在寫,這個是其中關于統計數據收集關于埋點技術的一部分。

由于我自身只接觸過iOS的Swift開發,但對于Android開發不太了解,而市場上關于埋點開發的書籍只找到了一本神策數據出的《Android全埋點解決方案》一書,而且是今年剛剛出版的,只好買了這本書去請教了Android開發同事,大致對于埋點開發的原理做了基礎的調研,也讓自己對于實現有了一點了解。

下文內容即來自于對書中內容的總結和從開發人員了解到的解釋,對于代碼實現部分不涉及而且我也只能以其他語言的基礎去理解Android,難免會露怯。

首先先解釋一下View

這是我的小程序的其中一個界面

圖片發自簡書App

這個頁面的所有內容都是由控件組成的,所有可點擊的控件都對應一個事件處理代碼,埋點統計即是對所有這些事件的監控。


Android的四種事件

----

$AppStart事件:應用程序啟動,同時包括冷熱啟動

$AppEnd事件:應用程序退出,包括正常退出、進入后臺、被強殺、崩潰

$AppViewScreen事件:頁面瀏覽,對于Android應用程序來說,就是指切換Activity或Fragment

$AppClick事件:控件的點擊,即View被點擊,包括Button、ListView等

這四個事件中,前三個比較簡單,而圍繞AppClick事件,全埋點即對AppClick事件進行攔截或者插入相關埋點代碼,按照攔截或者插入的時間的不同,分為兩種方式,每種方式有四個方案,也即是有八種不同的埋點方案AspectJ\ASM\Javassist\AST\View.OnClickListener代理\Window.Callback代理\View.AccessibilityDelegate代理\透明層。

靜態代理AspectJ\ASM\Javassist\AST

------------

Android的開發周期

1、編寫代碼

2、編譯代碼得到Package

3、安裝App

4、運行App

其中編譯代碼期間的流程是javaCode->.java->.class->.dex,AspectJ\ASM\Javassist\AST即是對這個編譯過程不同階段的處理,大致的處理方式就是開發者只需要對于代碼塊進行簡單的注解或者說由SDK遍歷去自動添加注解,然后在編譯過程中通過插件的形式對于開發者代碼進行改寫加入自己的統計代碼,這樣不會對源碼產生污染,又可以獲得比動態代理更好的性能。

動態代理

------------

動態代理即是在App運行過程中對于系統的方法進行代理,比如App中的控件點擊都會調用View.OnClickListener,動態代理就相當于接管了這個系統方法,然后在其中加入自己的統計代碼,每一次控件點擊調用View.OnClickListene的同時也會運行統計代碼來上傳用戶行為數據。

AppStart和AppEnd事件的判定

----------------

首先注冊一個Appication.ActivityLifecycleCallbacks回調用來監聽Activity的生命周期,頁面退出時啟動一個倒計時,如果沒有新頁面進來則觸發AppEnd事件,當頁面啟動時,判斷與上個頁面的退出事件間隔是否超過倒計時定義的時間,如果沒超過則觸發AppViewScreen事件,如果超過,首先判斷之前是否觸發了AppEnd事件,如果沒有則先觸發AppEnd事件,然后再觸發AppStart和AppViewScreen事件

AppViewScreen事件的判定

-------------

通過Application的內部接口ActivityLifeycleCallbacks提供的一些回調方法。

AppClick事件的判定

--------------

在這里只列出一種動態代理方法View.OnClickListener,其他的還是各自買書看吧。

在應用程序自定義的Application對象的OnCreate()方法中初始化埋點SDK,并傳入當前Application對象,在拿到Application對象后,通過registerActivityLifecycleCallback方法來注冊Appication.ActivityLifecycleCallbacks回調,在Appication.ActivityLifecycleCallbacks的onActivityResumed回調方法中,拿到當前正在顯示的Activity實例,通過activity.findViewById(android.R.id.content)方法就可以拿到整個內容區域對應的View,然后再逐層遍歷這個RootView,并判斷當前View是否設置了mOnClickListener對象,如果已設置mOnClickListener對象并且mOnClickListener又不是我們自定義的WrapperOnClickListener類型,則通過WrapperOnClickListener代理當前View設置的mOnClickListener,WrapperOnClickListener是統計SDK自定義的一個類,它實現了View.OnClickListener接口,在WrapperOnClickListener的onClick方法里會先調用View的原有mOnClickListener處理邏輯,然后再調用埋點代碼,既可以實現自動埋點的效果。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容