1.
target-action 是手勢和 uicontrol 的**,一般使用如下**-[uicontrol addtarget:action:events:]
-[uicontrol addtarget:action:events:]
-[uigesturerecognizer initwithtarget:action:]
我們 hook 了
-[uicontrol addtarget:action:events:]
方法,建立了乙個action
物件作為附屬物件,和實際的 target 一同新增到 uicontrol 中。當 uicontrol 觸發了事件,就會同時向業務物件和action
物件傳送訊息,從而產生埋點。故我們可以在-[uicontrol addtarget:action:events:]
方法中獲取到 target、action、event。還能從-[action action:]
方法中獲取實時埋點資料。
在此方法中,我們可以獲取到 uicontrol 類名,target 物件,action 方法名,events 事件名。由於後三個資料在下面的方法中無法獲取,所以會記錄後三個資料到 action 物件中,供 action 物件在觸發下面的方法時獲取對應資料:
// in uicontrol+hook.m
- (void)hook_addtarget:(id)target action:(sel)action forcontrolevents:(uicontrolevents)events
-[action action:]
此方法是實際埋點執行的方法,由於此方法只能獲取 self(action 物件)和 sender(uicontrol 物件),故實際埋點資料還是依賴前乙個方法臨時儲存的資料。
此時我們可以在方法中構成埋點資料。
self.targetname(target 類名)
self.action(action 方法名)
self.events(events 值)
action 物件
此物件是 sdk 內部物件,無任何資訊
sender
控制項物件,大部分按鈕不會繼承,所以也不會有資訊。
self.targetname
響應者類名,此類一般為 vc 的類名,或者某個 view 的類名,故此資訊可用於拼接。
self.action
響應方法名,於前乙個相同,但不同事件一般會有不同方法**,所以方法名也可以作為唯一事件 id。
self.events
事件型別,不同控制項不同事件,但按鈕基本為uicontroleventstouchupinside
,如果要區分不同控制項則可以加入,本文只考慮按鈕情況。故不加入此資訊
最終事件 id 如下:
vcclassname
#targetclassname
#actionname
// in mytargetaction.m
- (void)action:(uicontrol *)sender else if ([responder iskindeofclass:[uiwindow class]])
}nsstringfromclass([responder class]);
});[nsstring stringwithformat:@"%@#%@#%@", viewcontroller, self.targetname, self.actionname];
});[tracker trackevent:event_code];
}
舉例:uiviewcontroller#uiviewcontroller#onclick:
uiviewcontroller#menuitemcell#onclickadd:
第44月第19天 SDK license
1.需要提供的引數 ios 應用bundleid android 包名和簽名資訊 md5 格式小寫無冒號 2.預燒錄預登記動態註冊預燒錄,指的是,我們後台預先生成授權的license檔案,然後預先寫入硬體裝置的儲存檔案中。在裝置首次啟動的時候,就直接調取license檔案進行啟用。這種方式適用於需要...
第28月第11天 vim b
1.首先以二進位制方式編輯這個檔案 vim b datafile 現在用 xxd 把這個檔案轉換成十六進製制 xxd 文字看起來像這樣 0000000 1f8b 0808 39d7 173b 0203 7474 002b 4e49 9.tt.ni 0000010 4b2c 8660 eb9c eca...
第27月第28天 iOS bundle
1.7.如果將自己打包的bundle給別人使用,別人在打包上傳過程中可能會遇到錯誤提示如 或者或者 網上也有很多的解決辦法,這裡提供一種解決方法,就是刪除bundle裡的執行檔案 找到工程中的test.bundle,右鍵單擊後 選擇 顯示包內容 找到裡面黑色的可執行檔案test,刪除掉,然後找到裡面...