前言
本文針對 Android 各種標識符做了統(tǒng)一收集,方便大家比對,以供選擇適合大家的唯一標識符。
標識符
IMEI
- 從 Android 6.0 開始獲取 IMEI 需要權(quán)限,并且從 Android 10+ 開始官方取消了獲取 IMEI 的 API,無法獲取到 IMEI 了
void getIMEI() {
val telephonyManager = context
.getSystemService(TELEPHONY_SERVICE) as TelephonyManager
return telephonyManager.deviceId
}
Android ID(SSAID)
- 無需任何權(quán)限
- 卸載安裝不會改變,除非刷機或重置系統(tǒng)
- Android 8.0 之后簽名不同的 APP 獲取的 Android ID 是不一樣的
- 部分設(shè)備由于制造商錯誤實現(xiàn),導(dǎo)致多臺設(shè)備會返回相同的 Android ID
- 可能為空
void getAndroidID(context: Context) {
return Settings.System.getString(context.contentResolver,Settings.Secure.ANDROID_ID)
}
MAC 地址
-
需要申請權(quán)限,Android 12 之后
BluetoothAdapter.getDefaultAdapter().getAddress()需要動態(tài)申請android.permission.BLUETOOTH_CONNECT權(quán)限 - MAC 地址具有全局唯一性,無法由用戶重置,在恢復(fù)出廠設(shè)置后也不會變化
- 搭載 Android 10+ 的設(shè)備會報告不是設(shè)備所有者應(yīng)用的所有應(yīng)用的隨機化 MAC 地址
- 在 Android 6.0 到 Android 9 中,本地設(shè)備 MAC 地址(如 WLAN 和藍牙)無法通過第三方 API 使用 , 會返回
02:00:00:00:00:00,且需要ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION權(quán)限
Widevine ID
- DRM 數(shù)字版權(quán)管理 ID ,訪問此 ID 無需任何權(quán)限
- 對于搭載 Android 8.0 的設(shè)備,Widevine 客戶端 ID 將為每個應(yīng)用軟件包名稱和網(wǎng)絡(luò)源(對于網(wǎng)絡(luò)瀏覽器)返回一個不同的值
- 可能為空
fun getWidevineID(): String {
try {
val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L)
val mediaDrm = MediaDrm(WIDEVINE_UUID)
val widevineId = mediaDrm.getPropertyByteArray(MediaDrm.PROPERTY_DEVICE_UNIQUE_ID);
val sb = StringBuilder();
for (byte in widevineId) {
sb.append(String.format("%02x", byte))
}
return sb.toString();
} catch (e: Exception) {
} catch (e: Error) {
}
return ""
}
AAID
- 無需任何權(quán)限
- Google 推出的廣告 ID ,可由用戶重置的標識符,適用于廣告用例
- 系統(tǒng)需要自帶 Google Play Services 才支持,且用戶可以在系統(tǒng)設(shè)置中重置
重置后,在未獲得用戶明確許可的情況下,新的廣告標識符不得與先前的廣告標識符或由先前的廣告標識符所衍生的數(shù)據(jù)相關(guān)聯(lián)。
還要注意,Google Play 開發(fā)者內(nèi)容政策要求廣告 ID“不得與個人身份信息或任何永久性設(shè)備標識符(例如:SSAID、MAC 地址、IMEI 等)相關(guān)聯(lián)。”
在支持多個用戶(包括訪客用戶在內(nèi))的 Android 設(shè)備上,您的應(yīng)用可能會在同一設(shè)備上獲得不同的廣告 ID。這些不同的 ID 對應(yīng)于登錄該設(shè)備的不同用戶。
OAID
- 無需任何權(quán)限
- 國內(nèi)移動安全聯(lián)盟出臺的“拯救”國內(nèi)移動廣告的廣告跟蹤標識符
- 基本上是國內(nèi)知名廠商 Android 10+ 才支持,且用戶可以在系統(tǒng)設(shè)置中重置
UUID
- 生成之后本地持久化保存
- 卸載后重新安裝、清除應(yīng)用緩存 會改變
如何選擇
同個開發(fā)商需要追蹤對比旗下應(yīng)用各用戶的行為
- 可以采用 Android ID(SSAID),并且不同應(yīng)用需使用同一簽名
- 如果獲得的 Android ID(SSAID)為空,可以用 UUID 代替【 OAID / AAID 代替也可,但需要引入第三方庫】
- 在 Android 8.0+ 中, Android ID(SSAID)提供了一個在由同一開發(fā)者簽名密鑰簽名的應(yīng)用之間通用的標識符
希望限制應(yīng)用內(nèi)的免費內(nèi)容(如文章)
- 可以采用 UUID ,作用域是應(yīng)用范圍,用戶要想規(guī)避內(nèi)容限制就必須重新安裝應(yīng)用
用戶群體主要是大陸
- 可以采用 OAID ,低版本配合采用 Android ID(SSAID)/ UUID
- 可以采用 Android ID(SSAID),空的時候配合采用 UUID 等
用戶群體在海外
- 可以采用 AAID
- 可以采用 Android ID(SSAID),空的時候配合采用 UUID 等