用意
- 保護用戶隱私
- 限制第三方APP 訪問到超出 APP使用期間的數據(device id、meid等)
- 導致10之後DeviceID不可用,推薦使用AndroidID
Android 10系統
針對un-resetable(刷機都不會重置 的id數據) 數據讀取,新增限制。
影響的方法
- Build
- getSerial()
- TelephonyManager
- getImei()
- getDeviceId()
- getMeid()
- getSimSerialNumber()
- getSubscriberId()
DeviceId
需要權限
READ_PHONE_STATE
READ_PRIVILEGED_PHONE_STATE
- 新增權限
- 在GooglePlay中不允許第三方應用持有。
app target >= Android 10(29)
拋出異常 SecurityException
app target < Android 10
- 有
READ_PHONE_STATE
權限,return null - 無
READ_PHONE_STATE
權限, 拋出異常 SecurityException
官方推薦可行的解決方案
String uniqueID = UUID.randomUUID().toString();
其他和google的廣告、推送相關,不可用
AndroidId
系統 >= Android 8.0
- 64bit數(用十六進制表示)
- 與app-signing key, user, and device(相當於主鍵) 唯一綁定
- 變更: 恢復出廠設置,或開發者更改 簽名key,還有user切換
系統升級至Android 8.0 (API level 26)
AndroidID會發生變化
Android 8.0之前
- 設備第一次啓動時,隨機生成
- 在之後保持不變