Android 設備唯一標識

IMEI

IMEI 國際移動設備身份碼 目前GSM/WCDMA/LTE手機終端需要使用IMEI號碼,在單卡工程中一個手機號對應一個IMEI號,雙卡手機則會對應兩個IMEI號,一張是手機卡對應一個。
需要權限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

TelephonyManager tm = (TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE); 
String imei = tm.getDeviceId();

缺點

  • 由以上可以看出使用IMEI來作爲Android的設備唯一標識符存在一定的弊端, Android 6.0以上需要動態授權READ_PHONE_STATE權限才能訪問,可能涉及隱私問題,如果用戶禁用掉相關權限,將獲取不到。

  • Android-Q以後 需要READ_PRIVILEGED_PHONE_STATE權限才能訪問,這個權限爲廠商擁有的權限,普通app沒有這個權限,所以取到的爲null

Mac地址

Mac 指的就是我們設備網卡的唯一設別碼,該碼全球唯一,一般稱爲物理地址,硬件地址用來定義設備的位置,硬件標識,刷機和恢復出廠設置不擦除,並且大多數android都有wifi模塊

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

一般是指wifi模塊或者藍牙模塊的mac地址。

缺點:

  • 不穩定,有時候獲取不到,有時候獲取到了,卻是“假的”MAC地址(02:00:00:00:00:00);
  • 基於隱私考慮,官方不建議獲取;6.0之後通過WifiManager 獲取不到真正的mac地址,7.0之後訪問不了/sys/class/net/wlan0/address;
  • 不同的廠商有不同的限制,比如同樣是7.0,一加3可以訪問,小米6不可以訪問(至少當前是這樣的,以後怎麼發展就不知道了)。


Android-Q以後 有新的Api獲取mac地址,SDK未開放Api,暫不能測試

Android_Id

在設備首次運行的時候,系統會隨機生成一64位的數字,並把這個數值以16進制保存下來,這個16進制的數字就是ANDROID_ID,但是如果手機恢復出廠設置這個值會發生改變,如果設備被root,這個值可以任意改變。

String androidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

缺點

  • 手機恢復出廠設置以後該值會發生變化
  • 在國內Android定製的大環境下,有些設備是不會返回ANDROID_ID的

Android 8.0 以後

  • 只要軟件包名稱和簽名密鑰相同,在軟件包卸載或重新安裝時,Android_Id 的值不會改變。應用可以依靠此值保持每次重新安裝之後的狀態。
  • 如果應用安裝在運行更早版本 Android 的設備上,則除非卸載並重新安裝該應用,否則,在設備更新至 Android O 之後,應用的 Android ID 將保持不變。

Serial Number, SN(設備序列號)

String SerialNumber = android.os.Build.SERIAL

Android 8.0以前

  • 獲取序列號不需要權限,但是有一定的侷限性,在有些手機上會出現垃圾數據,比如紅米手機返回的就是連續的非隨機數
    也是不穩定的唯一標識,依賴廠商是否提供。

Android 8.0以後

  • 對於針對 Android O 或更新版本的應用,現已棄用 android.os.Build.SERIAL。它們可以改爲使用新的 Android O API,即Build.getSerial(),只要調用方擁有 PHONE 權限,該函數將返回實際序列號。在未來版本的 Android 中,針對 Android O 的應用所查詢到的 Build.SERIAL 將顯示爲“UNKNOWN”。

UUID

UUID(Universally Unique Identifier)全局唯一標識符,是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。
每次調用都會生成一個全新的標識符

String uuid =  UUID.randomUUID().toString();

因爲每次調用都生成新的,通常使用UUID都會存儲下來或者和其它字段拼接使用,CUID庫就使用了 uuid來拼接device_id字段

Advertising Id 需要手機支持Google 服務以及引入Google庫

Advertising ID(廣告ID)是由Google Play服務提供的用戶特定的,唯一的,可重置的廣告ID,適用於廣告用例。如果你應用程序想要使用廣告ID,你的設備就必須安裝Google Play Service

缺點:

  • 用戶可以隨意重置,如上圖點擊重置按鈕

Instance Id 需要手機支持Google 服務以及引入Google庫

Instance ID的作用域爲創建它的應用,這樣可以防止他人利用該標識符跟蹤用戶在不同應用中的行爲。此外,此標識符還可以輕鬆地進行重置,因爲用戶可以清除應用數據或重新安裝應用後重置。

缺點:

  • 用戶輕易重置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章