【心路歷程】
最近剛好在思考工作中統計數據所用的標識碼產生的數據誤差到底有多大,借此機會幾番搜索資料+請教大神,整理出此文。
因為自己是產品經理,所以出發點是整理知識點、理解個大概、知道什么不能用、什么標識是靠譜的,并不研究太深入。畢竟非專業開發,有時候若了解知識點太深入,反倒會更困惑(關聯知識點太多)。即使研究清楚了,工作中碰到和自己研究相悖的情況,也不好丟個文檔告訴開發應該怎么做(除非很熟,但次數多了也傷感情)。
此外,不同公司、不同開發可能對同一個詞的釋義/實現方式有略微不同,但基本上是這樣。
歡迎大家指正~
【先說結論】
UDID是移動端相對最靠譜的設備標識碼,不論Android或iOS。
【名詞釋義】
- Device ID:設備ID。
- IMEI:International Mobile Equipment Identity,國際移動設備身份碼的縮寫。是由15位數字組成的“電子串號”,它與每臺手機一一對應,每個IMEI在世界上都是唯一的。
- IDFA:Identifier For Advertising,iOS獨有的廣告標識符。
- UDID:Unique Device Identifier,唯一設備標識碼。
- UUID:Universally Unique Identifier,通用唯一識別碼。目前最廣泛應用的UUID,是微軟公司的全局唯一標識符GUID。其目的是讓分布式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。
【再說過程】
名詞釋義是不是看得一臉懵逼?莫慌,下圖介紹了各個設備標識碼的區別,以及目前的情況。
點擊圖片查看清晰大圖
Android設備標識碼
- device ID。
又叫設備ID。可以用系統提供的TelephonyManager服務來獲取,具有唯一性。其中又包括IMEI和MEID/ESN。 - IMEI:GSM設備返回的,并且是寫在主板上的,重裝APP不會改變IMEI。Android 6.0以上系統需要用戶授予read_phone_state權限,如果用戶拒絕就無法獲得。
- mac地址:硬件標識符,包括WiFi mac地址和藍牙mac地址。Android 6.0之后被禁止,若獲取則會被判定為有害應用。
- MEID/ESN:CDMA設備返回的,一般不使用。
- UDID:用來標示設備的唯一性。獲取UUID后,寫入.so文件生成UDID。即使APP重裝,值也不變,除非root手機(普通用戶做不到)
- UUID:APP重裝后會改變。
iOS設備標識碼
- device ID。
- IMEI:iOS 5 之后被禁止。寫在主板上,重裝APP不會改變。
- IDFA:于iOS 6 時面世,可以監控廣告效果,同時保證用戶設備不被APP追蹤的折中方案。可能發生變化,如系統重置、在設置里還原廣告標識符。用戶可以在設置里打開“限制廣告跟蹤”。
- mac地址:硬件標識符,包括WiFi mac地址和藍牙mac地址。iOS 7 之后被禁止(同時禁止的還有OpenUDID)。
- UDID:用來標示設備的唯一性 。iOS 6 之后被禁止獲取系統原生的UDID,但可以通過uuid,寫入到鑰匙串中,從而獲得自定義的UDID(非系統原生),即使用戶重裝APP,只要每次都取這個鑰匙串返回,就是不變的。
- UUID:APP重裝后會改變。
【總結】
若想用于數據統計,使用UDID是最靠譜的。