1. 程式人生 > >淺談移動端裝置標識碼:DeviceID、IMEI、IDFA、UDID和UUID

淺談移動端裝置標識碼:DeviceID、IMEI、IDFA、UDID和UUID

【心路歷程】 最近剛好在思考工作中統計資料所用的標識碼產生的資料誤差到底有多大,藉此機會幾番搜尋資料+請教大神,整理出此文。

因為自己是產品經理,所以出發點是整理知識點、理解個大概、知道什麼不能用、什麼標識是靠譜的,並不研究太深入。畢竟非專業開發,有時候若瞭解知識點太深入,反倒會更困惑(關聯知識點太多)。即使研究清楚了,工作中碰到和自己研究相悖的情況,也不好丟個文件告訴開發應該怎麼做(除非很熟,但次數多了也傷感情)。

此外,不同公司、不同開發可能對同一個詞的釋義/實現方式有略微不同,但基本上是這樣。 歡迎大家指正~

【先說結論】 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裝置標識碼

  1. device ID。 又叫裝置ID。可以用系統提供的TelephonyManager服務來獲取,具有唯一性。其中又包括IMEI和MEID/ESN。
  2. IMEI:GSM裝置返回的,並且是寫在主機板上的,重灌APP不會改變IMEI。Android 6.0以上系統需要使用者授予read_phone_state許可權,如果使用者拒絕就無法獲得。
  3. mac地址:硬體識別符號,包括WiFi mac地址和藍芽mac地址。Android 6.0之後被禁止,若獲取則會被判定為有害應用。
  4. MEID/ESN:CDMA裝置返回的,一般不使用。
  5. UDID:用來標示裝置的唯一性。獲取UUID後,寫入.so檔案生成UDID。即使APP重灌,值也不變,除非root手機(普通使用者做不到)
  6. UUID:APP重灌後會改變。

iOS裝置標識碼

  1. device ID。
  2. IMEI:iOS 5 之後被禁止。寫在主機板上,重灌APP不會改變。
  3. IDFA:於iOS 6 時面世,可以監控廣告效果,同時保證使用者裝置不被APP追蹤的折中方案。可能發生變化,如系統重置、在設定裡還原廣告識別符號。使用者可以在設定裡開啟“限制廣告跟蹤”。
  4. mac地址:硬體識別符號,包括WiFi mac地址和藍芽mac地址。iOS 7 之後被禁止(同時禁止的還有OpenUDID)。
  5. UDID:用來標示裝置的唯一性 。iOS 6 之後被禁止獲取系統原生的UDID,但可以通過uuid,寫入到鑰匙串中,從而獲得自定義的UDID(非系統原生),即使使用者重灌APP,只要每次都取這個鑰匙串返回,就是不變的。
  6. UUID:APP重灌後會改變。

【總結】 若想用於資料統計,使用UDID是最靠譜的。