成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

問題記錄:iOS用戶行為統計代碼的剝離

移動開發
這兩天在搞一個統計模塊,把碰到的問題和一些討論記錄下來,所以本文沒有答案,沒有解決方案,僅是討論而已。拿來和眾位討論一下這個該怎么辦!

 [[140437]]

這兩天在搞一個統計模塊,把碰到的問題和一些討論記錄下來,所以本文沒有答案,沒有解決方案,僅是討論而已。

我要做什么?

我現在做的是一個 app 里面的用戶行為統計,簡單來說就是記錄下用戶從哪個頁面跳轉到哪個頁面,在頁面上都點擊了哪些按鈕,點擊了幾次等等之類的東西。

統計工具用的是現成的 Google Analytics,Flurry,MixPanel,我要做的就是將他們集成進我的統計模塊代碼,并進行各種業務事件的統計。

以Flurry為例,當點擊登錄按鈕clickShootButtonAction被調用要做一條用戶行為統計,統計代碼是這樣的

 
  1. -?(IBAction)clickShootButtonAction 
  2. ????//?執行下面這句話,在?Flurry?的后臺就能看到這個事件的記錄 
  3. ????[Flurry?logEvent:@"點擊拍照按鈕"]; 

或者

  1. -?(IBAction)clickShootButtonAction 
  2. ????//?執行下面這句話,在?Flurry?的后臺就能看到這個事件的記錄 
  3. ????//?與上面不同的是,這邊記錄的是用戶的一條行為路徑 
  4. ????//?表示:用戶拍照后,在照片分享頁,將照片分享到了?Facebook 
  5. ????[Flurry?logEvent:@"保存分享照片"?withParameters:{@"分享到":@"Facebook"}]; 

而在應用里面記錄上百個用戶行為是很正常的事情。也就說類似上面的這種代碼在 Controller 里面可能要出現幾百次,還散落在各處。

這是正常的嗎?

如果這些代碼遍布我們的工程,使得統計模塊和業務代碼耦合度極高,造成剝離困難,無法重用等等各種的問題,寫起來手累心也累。

對我們來說,最理想的情況下,Controller 里面這種代碼越少越好,***是一行都沒有,包含個頭文件就能自動統計那該多好。因為如果要剝離統計代碼,或者更換統計方式,都是非常方便。

但實際情況不容樂觀!!!

有解嗎?

根據統計的事件,我們把需要統計的方法大致歸類為以下三種,統計剝離的難度也逐級遞增

  • 類似 viewDidLoad、viewWillAppear 這種 ViewController 的生命周期的方法;
  • 調用就進行一次事件統計的方法;
  • 在方法內,滿足條件才統計的方法;

那么問題來了,如果我們不希望在 Controller 里面直接添加統計代碼,應該怎么統計上面的三種方法?

剝離統計 ViewController 生命周期的統計代碼

這類方法的統計比較簡單,寫個 UIViewController 的 category,hook UIViewController 的中需要統計的方法,然后將頭文件塞到要統計的 ViewController 即可。

剝離調用一次就統計的統計代碼

這個統計代碼的剝離比較麻煩,麻煩的點在于這些方法是根據業務邏輯產生的,每個 ViewController 中的方法都不一致,沒法用統一的方式來處理。

關于這類代碼的剝離,我查了一些資料,請教一些同學,又在一些技術群討論了下,確實可以剝離,但方法都不太可靠,所以不建議使用,以下一一列舉。

  • 方法一:AOP + SPOC 配置文件?

這個方法來自最近上傳的《禪與 Objective-C 編程藝術》***一小節 面向切面編程 中。通過在 SPOC 配置文件中添加類名和方法,hook 類里面的方法,然后進行統計。

乍看之下,這個思路非常不錯,寫起來爽歪歪,要添加統計代碼時,只要在配置文件中加一下就 OK,嗨到不行。但后來一想這種方式實際執行起來是會有問題的。

首先統計模塊代碼和業務代碼是分散在兩個地方,統計是根據具體的類名和方法名的字符串來 hook 后進行統計操作。因為統計模塊比較獨立,由一個單獨的人來寫,其他人去寫業務代碼。業務開發的同學隨意修改個方法名還是比較正常的。當業務開發的同學改了個方法名,一般不會想到統計這邊也要改;統計這邊的同學也不知道業務的同學改了什么。所以這種只有調試時,碰到統計異常才會去檢查這里,可維護性太差。

所以這種方法是寫的人爽,維護的人非常非常的不爽!?

所以這種不推薦使用!

  • 方法二:約定方法名?

從開發的開始就約定好,比如需要統計的函數(例如 IBAction 之類的,按照約定命名),然后 hook objc-sendmessage 函數,統計所需的方法。這個方法其實和方法一類似,所以也有同樣的問題。而且人為約定沒有特別強的約束力,稍不留神就忘了方法名的約定,而且也沒有編譯器警告、錯誤的提示,根本就不會想到這時候要按照約定的規則命名。再且需求是經常變動的,有些原先不需要統計的內容,后來突然又要統計了,按照這種規則就要改方法名,整體的感覺就是場面太混亂了。

所以這種也不推薦使用!

剝離滿足條件才統計的統計代碼

無解!

想過去真真是無解啊!因為我們前面所用的方法和思路基本離不開 AOP,而 AOP 本身是 hook 一整個方法,在方法前后添加一些自定義的操作。AOP 是沒有辦法了解方法內部是什么樣的,更何談去統計方法內滿足了一定條件再統計事件。

怎么辦?

老老實實的將統計代碼寫到相關的方法里面吧,真沒轍了!

***的憂傷

折騰了這么些來回,結果還是沒法將統計代碼和業務代碼分開。原以為統計模塊應該是一個獨立的模塊,結果卻捅到各個Controller代碼里面去,實在令人憂傷。

那么到底是什么原因造成了這樣一個結局?

回頭看看,我們一開始就默認了統計模塊是一個獨立的模塊,應該與業務邏輯分開來。但實際上統計是和業務緊密結合的一個模塊,所以是不是可以這么想。統計模塊的代碼也屬于業務邏輯呢?

不管怎樣,這么想就可以心安理得的把統計代碼寫進 Controller 了~

責任編輯:倪明
相關推薦

2014-05-06 09:44:54

MySQL LogsMySQL

2011-07-20 17:22:26

iPhone Flurry

2012-05-03 10:13:56

FlexSSHJava

2017-06-12 16:10:05

MySQL表名

2010-08-13 15:37:53

密碼重置行為生物統計

2023-03-28 07:12:21

開源IoT平臺源碼

2022-09-28 11:34:27

用戶行為數據業務

2013-07-15 15:47:35

App用戶行為

2017-11-06 16:00:05

iOS安卓發送原圖

2011-10-28 13:26:09

Win7

2021-11-16 11:45:03

推薦協同過濾相似性推薦

2013-09-05 09:33:25

大數據盧東明SAP

2016-10-21 14:17:13

大數據技術大數據行為分析

2014-03-13 10:45:40

大數據

2017-11-06 10:52:36

大數據

2011-03-02 15:35:15

Oracle分組統計

2013-11-25 11:35:44

產品設計社交化用戶心理

2016-11-27 19:21:05

2013-01-14 16:10:06

2017-05-02 10:30:46

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产91久久综合桃花 | 日韩中文一区二区三区 | 国产福利在线播放 | 亚洲国产成人精品久久久国产成人一区 | 亚洲国产精品久久久 | 亚洲精品一区在线观看 | 91在线最新| 欧美亚洲成人网 | 毛片网站在线观看 | 黄色大片免费观看 | 欧美日韩网站 | 亚洲一区二区三区免费在线 | 在线观看亚洲专区 | 在线一区二区三区 | 亚洲精品久久久一区二区三区 | 亚洲va欧美va人人爽午夜 | 日日久| 精品久久久一区二区 | 亚洲精品国产第一综合99久久 | 亚洲综合色网站 | 午夜激情影院 | 中文字幕高清免费日韩视频在线 | 日韩免费1区二区电影 | 99久久免费观看 | 91佛爷在线观看 | 夜夜骑av | 亚洲精选一区二区 | 欧美亚洲国产一区二区三区 | 国产中文在线 | 国产精品久久久久久久久久久免费看 | 亚洲精品一区二区三区蜜桃久 | 国产精品久久久久无码av | 日韩精品无码一区二区三区 | 国产免费av在线 | 亚洲激情在线观看 | 欧美婷婷 | 欧美成人一区二免费视频软件 | 丁香婷婷久久久综合精品国产 | 国产精品久久久久无码av | 精品不卡| 欧美精品一区二区三区四区 在线 |