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