目录
article
设备标识获取方式
设备标识获取方式
IMEI
描述:
- Android版本 < 6.0,只需要READ_PHONE_STATE静态权限(安装App时即可获取到该权限),即可通过系统API TelephonyManager#getDeviceId API获取准确值;
- 6.0 <= Android版本 <= 9.0,READ_PHONE_STATE升级为动态权限,安装App时不会获得该权限,需要在App运行时用户在弹窗确认授权后才可以获取
- Android版本 >= 10.0,设备不可变ID的隐私保护得到进一步升级,需要READ_PRIVILEGED_PHONE_STATE权限才可以获取IMEI,而该权限只有系统级别的应用才可以获得,因此一般App无法获取到IMEI。
原始数据获取:
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
deviceId = tm.getDeviceId();
// android版本>=10.0 不获取
@SuppressLint({"MissingPermission", "HardwareIds"})
public static String getImei(Context context) {
String imei = "";
try {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
imei = tm.getDeviceId();
} catch (Exception e) {
e.printStackTrace();
}
return imei;
}
IDFA
描述:
目前iOS系统主流的广告获取设备标识符方式。用户可开启、关闭,每次切换会改变为新的取值。 10以下的版本关闭时也能取到唯一值, >=10的iOS版本关闭时取到的值为00000000000 ;系统大版本升级(如11 到 12) IDFA也会发生变化
原始数据获取:
idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
Android ID
描述:
Android版本 = 8.0,应用签名、用户(即系统上的用户账号)和设备的每个组合都具有唯一的 ANDROID_ID值,即使系统升级也不变。
原始数据获取:
Settings.System.getString(context.getApplicationContext().getContentResolver(), Settings.System.ANDROID_ID);
OAID
描述:
移动安全联盟(简称MSA)制定的匿名设备标识符,保留原始值,不需要MD5编码。可用于android系统的补充设备标示,通常android10以上的国内主流设备都可以获取。具体OAID介绍以及最新覆盖厂商范围请详见 MSA官网
原始数据获取:
使用MSA官网提供的sdk