SDK數(shù)據(jù)采集那點(diǎn)事

文章已發(fā)布微信公眾號(hào):知識(shí)點(diǎn)梳理:聊聊iOSSDK數(shù)據(jù)采集那點(diǎn)事兒

1. 背景

隨著互聯(lián)網(wǎng)的發(fā)展蜜葱,我們無(wú)時(shí)無(wú)刻不在主動(dòng)或被動(dòng)接收著大量的信息,早晚上下班坐公交耀石、擠地鐵牵囤,行色匆匆、各行各業(yè)的精英分子都不忘打開(kāi)手機(jī)瀏覽新聞動(dòng)態(tài)滞伟,追看喜愛(ài)的電影揭鳞、電視劇,網(wǎng)上購(gòu)物梆奈,瀏覽各種訂閱號(hào)野崇,打打小游戲等等,當(dāng)然還有些同學(xué)閱讀紙質(zhì)書(shū)籍或使用kindle閱讀鉴裹。

通過(guò)上面的觀察可以發(fā)現(xiàn)舞骆,移動(dòng)電子設(shè)備占用了我們大量的時(shí)間钥弯,不論購(gòu)物径荔、吃飯、出行脆霎、租賃等等总处,而移動(dòng)設(shè)備主要通過(guò)App來(lái)操作,比如購(gòu)物會(huì)使用淘寶睛蛛、京東等鹦马,出行會(huì)使用滴滴、摩拜忆肾,美食會(huì)使用餓了么荸频、美團(tuán)等。

那么為了更好為自己的用戶提供更優(yōu)質(zhì)客冈、更加人性化的服務(wù)旭从,企業(yè)或公司往往都會(huì)采集用戶的一些信息,以便以后簡(jiǎn)化用戶操作或方便營(yíng)銷等。比如記錄登錄用戶經(jīng)常購(gòu)買(mǎi)某個(gè)品牌的化妝品和悦,購(gòu)買(mǎi)價(jià)格通常在300-500元區(qū)間退疫,那么企業(yè)可能會(huì)將該品牌在這個(gè)區(qū)間的化妝品放到App最明顯的位置;還比如公司做活動(dòng)鸽素,但由于活動(dòng)頁(yè)面比較深褒繁,導(dǎo)致用戶很難發(fā)現(xiàn),因此觸發(fā)次數(shù)特別少馍忽,沒(méi)有起到營(yíng)銷效果棒坏,那么企業(yè)可能就會(huì)根據(jù)采集回的數(shù)據(jù)信息進(jìn)行實(shí)時(shí)調(diào)整,將該模塊放到明顯位置遭笋、或減少操作路徑等等俊抵。

SDK數(shù)據(jù)采集的作用就在于此,既能方便用戶操作坐梯,又能起到幫助企業(yè)自我調(diào)整的作用徽诲。

2. SDK 具備的“素質(zhì)”

image.png

上圖為一款SDK本身及所采集數(shù)據(jù)需要具備的一些基本“素質(zhì)”,下面將對(duì)每個(gè)模塊逐一介紹吵血。

2.1 SDK 本身具備的“素質(zhì)”

2.1.1 穩(wěn)定性

作為App重要的組成部分盐肃,穩(wěn)定性是SDK的重中之重语卤,因?yàn)橐豢頢DK可能會(huì)被多個(gè)App使用,而每個(gè)App又有N個(gè)用戶在使用,如果某行代碼出現(xiàn)crash儒搭,后果將可想而知。
對(duì)于可能出現(xiàn)crash的代碼適當(dāng)添加try catch進(jìn)行異常捕獲凝危,對(duì)于常用的NSMutableDictionary/NSMutableArray等控件在插入或訪問(wèn)時(shí)經(jīng)常出現(xiàn)數(shù)組越界军俊、nil數(shù)據(jù)插入等,可使用Category添加自定義安全方法褒傅,也可以在Category中使用方法交換弃锐,先調(diào)用自定義方法進(jìn)行數(shù)據(jù)校驗(yàn),校驗(yàn)無(wú)誤再執(zhí)行系統(tǒng)方法殿托。

  • try catch異常捕獲

    image.png

  • Category方法交換

image.png
image.png

2.1.2 安全性

安全性目前主要使用代碼混淆方式霹菊,為防止他人通過(guò)class-dump(下載后將文件復(fù)制到/usr/local/bin目錄下)反編譯后,根據(jù)源代碼中的方法名就可以推斷出其功能支竹。

  • 特定標(biāo)識(shí)方法混淆
    對(duì)工程中所有方法使用特定標(biāo)識(shí)開(kāi)頭旋廷,將所有帶有標(biāo)識(shí)的方法都使用隨機(jī)生成字符串方式替換。具體使用方式可參考:HSKConfuse

運(yùn)行程序后礼搁,找到工程 Products -> Show in Finder -->顯示包內(nèi)容 找到工程執(zhí)行文件饶碘,使用以下命令反編譯文件:

class-dump -H 執(zhí)行文件路徑 -o 導(dǎo)出的.h文件存放文件夾路徑

可發(fā)現(xiàn)反編譯后的.h文件的方法名稱已被混淆。

2.1.3 易用性

易用性主要是指用戶在使用時(shí)只需要部分代碼即可完成相應(yīng)功能馒吴。

易觀SDK對(duì)外提供了頁(yè)面自動(dòng)跟蹤功能扎运、頁(yè)面自定義采集卑雁、事件采集、通用屬性配置绪囱、用戶屬性测蹲、消息推送跟蹤及Hybrid混合頁(yè)面等模塊化的接口,用戶可根據(jù)需要自行選擇鬼吵,并且接口均為類方法扣甲,可以簡(jiǎn)便的調(diào)用。同時(shí)還提供了React Native齿椅、Weex琉挖、PhoneGap三個(gè)跨平臺(tái)移動(dòng)應(yīng)用開(kāi)發(fā)框架的接口文件,開(kāi)發(fā)者無(wú)需再次進(jìn)行封裝涣脚。

2.1.4 擴(kuò)展性

對(duì)于程序來(lái)講擴(kuò)展性無(wú)疑非常重要示辈,不能因某個(gè)小小需求的改變而導(dǎo)致代碼重構(gòu),不僅浪費(fèi)人力遣蚀、物力矾麻,更重要的浪費(fèi)了時(shí)間,而時(shí)間可能導(dǎo)致商機(jī)的流失芭梯。

在易觀SDK初始化方法中使用了配置類险耀,可以方便的擴(kuò)展未知的配置信息:


image.png

為了方便用戶對(duì)自定義信息的擴(kuò)展,部分接口也預(yù)留了自定義信息玖喘,如購(gòu)買(mǎi)商品時(shí)后期可能需要分析品牌甩牺、價(jià)格、購(gòu)買(mǎi)時(shí)間段等累奈,那么開(kāi)發(fā)者可通過(guò)track:properties:方法將數(shù)據(jù)放到properties字典中贬派。

2.2 數(shù)據(jù)應(yīng)具備的“素質(zhì)”

2.2.1 準(zhǔn)確性

數(shù)據(jù)采集的準(zhǔn)確性是為后續(xù)數(shù)據(jù)的處理提供基礎(chǔ)保障。

其中可能需要用戶參與澎媒,傳入明確需要計(jì)算或統(tǒng)計(jì)的指標(biāo)以對(duì)其進(jìn)行精準(zhǔn)分析搞乏;為保證數(shù)據(jù)及時(shí)上傳到服務(wù)器,數(shù)據(jù)上傳至少觸發(fā)一次旱幼,若發(fā)生網(wǎng)絡(luò)中斷查描、服務(wù)器無(wú)響應(yīng)等特殊情況突委,SDK需要建立起重試機(jī)制柏卤,保證數(shù)據(jù)準(zhǔn)確送達(dá);由于數(shù)據(jù)產(chǎn)生先后順序會(huì)影響前端的展現(xiàn)和分析匀油,因此在SDK中我們會(huì)使用數(shù)據(jù)處理串行隊(duì)列及網(wǎng)絡(luò)上傳隊(duì)列缘缚,確保數(shù)據(jù)先觸發(fā)先到達(dá)。

image.png

2.2.2 安全性

數(shù)據(jù)安全性主要體現(xiàn)在存儲(chǔ)和網(wǎng)絡(luò)傳輸過(guò)程中敌蚜。

SDK采集的數(shù)據(jù)將首先存儲(chǔ)到本地?cái)?shù)據(jù)庫(kù)中桥滨,為了防止用戶篡改數(shù)據(jù),需要對(duì)數(shù)據(jù)進(jìn)行保護(hù);為了增加數(shù)據(jù)的安全性齐媒,在數(shù)據(jù)上傳時(shí)需要對(duì)數(shù)據(jù)進(jìn)行加密處理蒲每,常用的加密方式有:Base64加密、MD5加密喻括、AES加密邀杏、RSA加密等。目前易觀SDK使用前三種結(jié)合的方式對(duì)數(shù)據(jù)進(jìn)行了加密唬血,每次上傳的數(shù)據(jù)都會(huì)根據(jù)一定的算法產(chǎn)生不同的加密key望蜡,以保證數(shù)據(jù)的安全性。

2.2.3 合法性

作為數(shù)據(jù)采集模塊拷恨,每天都會(huì)有大量數(shù)據(jù)上傳服務(wù)端脖律,其中必然有部分?jǐn)?shù)據(jù)是不合法的,比如某些頁(yè)面無(wú)網(wǎng)絡(luò)狀態(tài)下無(wú)法獲取商品信息腕侄,由于疏忽導(dǎo)致購(gòu)買(mǎi)按鈕可能觸發(fā)小泉,但數(shù)據(jù)信息無(wú)法獲取,導(dǎo)致調(diào)用SDK的數(shù)據(jù)為無(wú)效數(shù)據(jù)冕杠,這些數(shù)據(jù)可以稱為“垃圾數(shù)據(jù)”膏孟,不僅對(duì)后期分析無(wú)用,還會(huì)增加清洗數(shù)據(jù)的時(shí)間拌汇,浪費(fèi)了磁盤(pán)空間柒桑。

因此SDK中單獨(dú)抽出校驗(yàn)層,對(duì)數(shù)據(jù)進(jìn)行合法性校驗(yàn)噪舀。如:SDK本身預(yù)定義一部分保留字段魁淳,$platform(iOS/Android/java等)、$lib_version(SDK版本號(hào))与倡、$debug(debug/release)等界逛,為防止用戶覆蓋,也是為了后期數(shù)據(jù)分析時(shí)更明確纺座、更具有針對(duì)性息拜,對(duì)傳入?yún)?shù)進(jìn)行校驗(yàn);常用的字符串長(zhǎng)度校驗(yàn)净响,防止輸入字符串過(guò)長(zhǎng)少欺;自定義屬性多層嵌套校驗(yàn),層次嵌套過(guò)多可能導(dǎo)致分析效率下降馋贤,增加復(fù)雜性赞别;屬性總個(gè)數(shù)校驗(yàn)等等。

2.2.4 可控性

作為SDK更新頻率可能沒(méi)有App那么高配乓,所以對(duì)SDK需要一定的策略控制仿滔。我們?cè)赟DK中加入了策略控制模塊惠毁,優(yōu)先級(jí)從高到低依次為:服務(wù)器策略>用戶設(shè)置策略>默認(rèn)策略。

對(duì)正在使用的SDK主要采取服務(wù)器控制策略崎页,比如:服務(wù)器端可以控制數(shù)據(jù)上傳累積條數(shù)及數(shù)據(jù)上傳間隔時(shí)間鞠绰;延遲一段時(shí)間后SDK再進(jìn)行數(shù)據(jù)上傳;更改數(shù)據(jù)上傳服務(wù)器地址飒焦;數(shù)據(jù)上傳失敗后的重試次數(shù)以及達(dá)到最大次數(shù)后下次數(shù)據(jù)上傳的時(shí)間等等洞豁,都可進(jìn)行靈活控制。

3. 總結(jié)

由于SDK模塊很少涉及UI部分荒给,所以基本結(jié)構(gòu)如下如所示:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丈挟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子志电,更是在濱河造成了極大的恐慌曙咽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挑辆,死亡現(xiàn)場(chǎng)離奇詭異例朱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鱼蝉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)洒嗤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人魁亦,你說(shuō)我怎么就攤上這事渔隶。” “怎么了洁奈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵间唉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我利术,道長(zhǎng)呈野,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任印叁,我火速辦了婚禮被冒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轮蜕。我一直安慰自己昨悼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布肠虽。 她就那樣靜靜地躺著幔戏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪税课。 梳的紋絲不亂的頭發(fā)上闲延,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音韩玩,去河邊找鬼垒玲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛找颓,可吹牛的內(nèi)容都是我干的合愈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼击狮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼佛析!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起彪蓬,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寸莫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后档冬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體膘茎,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年酷誓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了披坏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盐数,死狀恐怖棒拂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玫氢,我是刑警寧澤着茸,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站琐旁,受9級(jí)特大地震影響涮阔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灰殴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一敬特、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牺陶,春花似錦伟阔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至狮鸭,卻和暖如春合搅,著一層夾襖步出監(jiān)牢的瞬間多搀,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工灾部, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留康铭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓赌髓,卻偏偏與公主長(zhǎng)得像从藤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锁蠕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容