統計常規(guī)使用
- 客戶端統計中當要使用統計的時候,普通的寫法是將統計單獨寫一個功能模塊,在工程中引入极舔,并在事件發(fā)生時去調用方法,例如:
-(void)btnClick{
//某按鈕點擊
[StatClass logEvent:eventId message:@"message"];
}
常規(guī)統計造成的問題
- 按照以上方式在客戶端進行統計的話可能會造成以下問題:
- 在客戶端可能很多地方都會有類似冗余的代碼链瓦,侵入式的方式會提高功能模塊間耦合拆魏,代碼上及其不友好。
- 如果測試同學沒有測出來很容易造成漏點慈俯,造成數據統計上出現問題稽揭。
無侵入解決思路
- 思路:
- 總體思路是否可以嘗試將客戶端所需的統計內容通過文件的形式下發(fā)到服務端,客戶端通過解析文件來獲取所需統計內容肥卡,客戶端在進行事件調用的時候再進行打點文件的寫入。
- 代碼層盡量做到在不修改之前代碼的情況下事镣,完成統計功能步鉴。
- 借用 method swizzing 來替換通常的方法,在自己的實現中添加對打點事件的解析璃哟,解析后寫入打點文件氛琢。
- 制定文件協議,盡量通過有限的方法參數來完成多種打點需求随闪。
- 可能出現的問題:
- hook 有的系統原有方法會出現問題阳似。
- 時常打點的統計。
實現過程與問題的解決
- 過程:
- 利用文件铐伴,在服務器配置所需打點文件撮奏,并下發(fā)客戶端俏讹,客戶端獲取文件后進行升級。
- 獲取文件中打點內容畜吊,并進行緩存泽疆。
- 根據 method swizzing 進行方法替換,實現通用打點邏輯玲献,這里實現的是將 class 和 method 一些參數傳入解析類中和文件內容進行匹配殉疼。
- 打點類將結果寫入統計文件中,之后上傳后臺統計服務器捌年。
- 待解決的問題:
- 時常打點可以通過打點時候寫入時間戳瓢娜,后臺進行統計來完成。
- hook 原有方法造成的問題正在解決礼预。