不進(jìn)行APP埋點(diǎn)的情況下,SDK可以收集到哪些數(shù)據(jù)?
本文將于大家分享一下,僅接入了統(tǒng)計平臺的SDK,而沒有進(jìn)行代碼埋點(diǎn)的情況下,SDK可以收集到哪些信息。
產(chǎn)品經(jīng)理的能力模型中,有一項(xiàng)是“數(shù)據(jù)分析”能力,在日常工作中,也會有意識地培養(yǎng)“數(shù)據(jù)思維”,而建立“數(shù)據(jù)思維”的第一步就是“數(shù)據(jù)采集”。
“數(shù)據(jù)采集”需要產(chǎn)品經(jīng)理或者數(shù)據(jù)分析師,在APP發(fā)版前,提供非常詳細(xì)的代碼埋點(diǎn)文檔(PS:現(xiàn)在可視化埋點(diǎn)技術(shù)也比較成熟,可作為代碼埋點(diǎn)的有效補(bǔ)充),本文將分享下,僅接入了統(tǒng)計平臺的SDK,而沒有進(jìn)行代碼埋點(diǎn)的情況下,SDK可以收集到哪些信息。
市面上主流的2個APP統(tǒng)計平臺為友盟和TalkingData(以下簡稱TD),本文以友盟和TD為例,在只接入這2家的SDK接入,SDK可以收集到哪些數(shù)據(jù),并上報到各自的數(shù)據(jù)分析平臺,形成可視化操作頁面。
(順便提下,比較優(yōu)秀的APP統(tǒng)計平臺還有:growingIO、神策數(shù)據(jù)、MTA、百度統(tǒng)計、諸葛IO)
一、不埋點(diǎn),也可以統(tǒng)計得到用戶數(shù)
在APP的數(shù)據(jù)指標(biāo)中,首先想到和用戶數(shù)相關(guān)的指標(biāo)為:新增、活躍和累計。
先簡單介紹下這3個指標(biāo)的定義:
- 新增用戶:第1次啟動應(yīng)用的用戶(以設(shè)備號作為判斷標(biāo)準(zhǔn)),卸載后重新安裝,不會重新計算。
- 活躍用戶:當(dāng)日活躍用戶指當(dāng)日啟動過應(yīng)用的用戶(去重)。
- 累計用戶:指截止到當(dāng)前,啟動過應(yīng)用的所有獨(dú)立用戶(以設(shè)備號的判斷作為標(biāo)準(zhǔn))。
以上3個指標(biāo),友盟和TD均采用設(shè)備號作為唯一標(biāo)識。
友盟的設(shè)備號為UMID,定義如下:
新增用戶以UMID作為唯一設(shè)備識別,UMID是基于友盟+自己的設(shè)備ID生產(chǎn)算法,在APP的生命周期保持穩(wěn)定性和唯一性。
TD的設(shè)備號為TDID,定義如下:
TalkingData根據(jù)TDID來標(biāo)識一臺設(shè)備的,TDID是基于SDK獲取的設(shè)備信息以及常量參數(shù)并結(jié)合TD的加密方案生成一臺設(shè)備的標(biāo)識,以便持久化來保持設(shè)備的唯一性。
PS:友盟的UMID和TD的TDID,都是1個稱謂而已。
用戶數(shù),是以當(dāng)前手機(jī)的設(shè)備號為依據(jù),因此不需要埋點(diǎn)就可以收集得到。
拋出1個問題:用戶數(shù),準(zhǔn)確么?
答案是:不準(zhǔn)確。
簡單介紹一下,不管友盟還是TD,都是采集手機(jī)的設(shè)備號作為主要參數(shù),生成對應(yīng)的UMID和TDID。在少數(shù)情況下,手機(jī)的設(shè)備號會發(fā)生變化,隨之帶來的就是用戶數(shù)的不準(zhǔn)確,比如:這里最讓人抓狂的iPhone機(jī)型。
iPhone曾經(jīng)可使用的設(shè)備號包括:UDID、MAC地址、openUDID、IDFA、IDFV、UUID。目前可使用的設(shè)備號,僅剩IDFA、IDFV和UUID了,而這個標(biāo)識。在某些情況下,可能讀取不到,或者會發(fā)生變化。
已有的老用戶的設(shè)備號發(fā)生變化,系統(tǒng)會生產(chǎn)新的UMID或TDID,導(dǎo)致老用戶被系統(tǒng)識別為1個新用戶,新增用戶+1,累計用戶+1。
二、不埋點(diǎn),也可以收集得到收集的系統(tǒng)信息
先給大家示意一小段SDK報過來的數(shù)據(jù):
{
“devId”: “xxx0f2cb6f863e32b4944246e57913xxx”,
“productId”: “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
“AppProfile”: {
“appPackageName”: “xxx.xxxx.xxx”,
“appVersionName”: “APP名稱”,
“appVersionCode”: “5.4.3”,
“startTime”: “1537085493000”,
“sdkVersion”: “SDKversion_ios_V1.2.7”,
“partnerId”: “Appstore”,
“isCracked”: true,
“installationTime”: “1499306536000”,
“purchaseTime”: “0”,
“appStoreID”: “0”
}
第1行中的 devId,即為加工后的設(shè)備號,友盟稱為UMID,TD稱為TDID。用于唯一標(biāo)識1臺設(shè)備。
第2行中的productId,即為APPID,用戶標(biāo)識1個APP;比如今日頭條iOS端接入了友盟的SDK,那么友盟在系統(tǒng)上給今日頭條iOS這個APP分配1個專屬APPID。
示例數(shù)據(jù)其他各行的數(shù)據(jù),依次為:APP的包名、APP名稱、APP版本號、APP啟動時間(1537085493000為Unix時間戳,轉(zhuǎn)成北京時間為:2018/9/16 16:11:33)、渠道號(這里的渠道號,是工程師在打包的時候,為了區(qū)分渠道來源,“寫死”在安裝包中的信息。比如:上傳到應(yīng)用寶應(yīng)用市場的包,渠道號可以命名為“yingyongbao”,也可命名為“yyb123”),APP包是否被破解,APP啟動時間,APP的購買時間。
除了以上數(shù)據(jù)外,SDK還會上報的數(shù)據(jù)有:
機(jī)型(如:iPhone 6s puls)、操作系統(tǒng)的版本號(如:iOS 11.4.1)、屏幕分辨率,當(dāng)前手機(jī)的名稱(如:張三的iPhone,李四的安卓華為P20手機(jī)),是否越獄,設(shè)備號(Android上報IMEI,iOS上報IDFA或者IDFV)。
經(jīng)緯度,地區(qū)(CN、中國),電信運(yùn)營商(如:中國移動、中國聯(lián)通、中國電信、中國香港移動……),網(wǎng)絡(luò)類型(如:2G、3G、4G、wifi、離線),wifi名稱(如:CMCC、隔壁老王的wifi);
不知道你注意到了沒有,手機(jī)連過的wifi名稱,SDK是可以收集得到的,方不方?
三、寫在后面,用戶隱私的考慮
說明下,在APP數(shù)據(jù)收集這個鏈條中,有3個角色:用戶、APP開發(fā)商、SDK統(tǒng)計平臺。
SDK統(tǒng)計平臺收集了這么多信息,或者說APP開發(fā)商借助SDK,收集了這么多信息,對用戶來說,是不是侵犯了用戶隱私?
現(xiàn)實(shí)是,APP開發(fā)商知道張三在APP里的一舉一動,知道你每個行為的含義(比如:在2018年9月18日購買了1臺iPhone x,支付方式為支付寶,在購買頁面猶豫了2秒)。而,SDK統(tǒng)計平臺,也知道用戶的一舉一動。
一般情況下,它不知道這個用戶是誰,更不知道這些動作的含義,就醬紫。
四、附,系統(tǒng)平臺設(shè)備號的生成方法
友盟的設(shè)備號稱為UMID,TD的設(shè)備號稱為TDID。
在這里,補(bǔ)充描述系統(tǒng)平臺設(shè)備號的計算方法,我們自命名為DeviceID。
(1)Android平臺
統(tǒng)計SDK可直接讀取到Android設(shè)備的IMEI號,用該IMEI號,即可生成DeviceID。
XXID可以通過以下公式獲?。?/p>
DeviceID=x1+MD5(android_imei_mac)
(2)IOS平臺
UDID:
UDID(設(shè)備唯一標(biāo)識符,Unique Device Identifier),之前一直是設(shè)備唯一標(biāo)識的神器,各大應(yīng)用和統(tǒng)計SDK均通過獲取UDID標(biāo)識設(shè)備。不過,2013年5月1日后,讀取UDID的應(yīng)用,將被拒絕上架,相當(dāng)于把這條路封死了。
MAC地址:
IOS7.0以前的設(shè)備,可讀取MAC地址,通過該MAC地址,即可生成DeID。
DeviceID可以通過以下公式獲?。?/p>
DeviceID=x2+MD5(ios_mac)
IOS7.0及以后的設(shè)備,MAC地址返回的是一個固定值,因此對于IOS7.0及以后的設(shè)備,將無法通過MAC地址來標(biāo)識設(shè)備的唯一性。
openUDID:
openUDID,是通過第一個帶有OpenUDID SDK包的App生成的,在下列2種情況下,openUDID會重新生成:
- 用戶卸載了全部帶有OpenUDID SDK包的App后,并重新啟動設(shè)備后,openUDID將會重新生成;
- 用戶更新了iOS系統(tǒng),或者選擇了恢復(fù)出廠設(shè)置是,openUDID將會重新生成。
考慮到90%以上的用戶在IOS系統(tǒng)更新后,均會重新生成openUDID,采用openUDID方法標(biāo)識用戶唯一性也慢慢被棄用。
IDFA&IDFV:
IDFA(廣告標(biāo)識符,Advertising Identifier),是蘋果公司提供的用于追蹤用戶的廣告ID,同一手機(jī)的不同APP對應(yīng)著相同的IDFA,IDFA可通過以下步驟重置:設(shè)置-隱私-廣告-還原廣告標(biāo)識符。
如DeviceID可以通過以下公式獲取:
DeviceID=x2+MD5(IDFA)
因?yàn)镮DFA會存在取不到的情況,因此需要選用其他的ID作為DeviceID。在取不到IDFA的情況下,我們選用IDFV。
IDFV(Vindor標(biāo)示符,IdentifierForVendor),一般用于追蹤用戶在應(yīng)用內(nèi)的行為,每個設(shè)備在所屬同一個Vender的應(yīng)用里值是相同的。如果用戶刪掉了該vender的所有APP,IDFV將會被重置。
DeviceID可以通過以下公式獲?。?/p>
DeviceID=x2+MD5(IDFV)
UUID:
UUID(通用唯一標(biāo)識碼,Universally Unique Identifier),通用唯一識別碼,每次生成均不一樣;第1次生成后UUID后,需要保存到鑰匙串(keyChain)中;應(yīng)用被刪除再重裝時,仍然可以從鑰匙串得取到UUID;在一臺設(shè)備上,同一個開發(fā)者賬號的所有APP,可獲取到相同的UDID;刷機(jī)或者重新安裝系統(tǒng)后,UUID將重新生成。
DeviceID可以通過以下公式獲?。?/p>
DeviceID=x2+MD5(UUID)
綜上可知,iOS的DeviceID的獲取方法可以概括為:IOS7.0以前的設(shè)備,DeviceID=x2+MD5(ios_mac)
IOS7.0及以后的設(shè)備,DeviceID=x2+MD5(IDFA/IDFV/UUID),即先取IDFA的值,取不到IDFA時去取IDFV的值,再取不到時IDFA時,則生成UUID。
備注:這里用x1和x2這個前綴,是用來區(qū)分Android和iOS的設(shè)備號;如:可以用數(shù)字“1”來作為Android的前綴,用數(shù)字“2”作為iOS的前綴;后面在進(jìn)行數(shù)據(jù)分析時,看到1開頭的,就知道這是Android的設(shè)備了。
本文由 @十三先 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
你好,請問易觀方舟第三方數(shù)據(jù)分析平臺是什么原理?
關(guān)注微信公眾號:產(chǎn)品者也,回復(fù)關(guān)鍵字【原始數(shù)據(jù)】,獲得原始數(shù)據(jù)的查看方式。
很棒,感謝分享。
敢問作者發(fā)際線?
學(xué)習(xí)了,謝謝老板