关于Android:Android – 唯一且持续的设备ID

Android - unique and constant device ID

我需要在服务器上注册用户设备,其唯一标识符是一个常量值,并且将来不会更改。

我找不到一个很好的解决方案来获取所有设备的唯一ID(有/没有simcard)。

Secure.ANDROID_ID:Secure.ANDROID_ID不是唯一的,可以为null或在出厂重置时更改。

1
String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

IMEI:IMEI依赖于设备的Simcard插槽,因此无法为不使用Simcard的设备获取IMEI。

1
2
TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String uuid = tManager.getDeviceId();

WLAN MAC地址:如果设备没有wifi硬件,则返回空MAC地址。用户可以更改设备的mac地址。

1
2
WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress();

蓝牙地址字符串:如果设备没有蓝牙硬件,则返回null。

1
2
BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_bluetoothAdd = m_BluetoothAdapter.getAddress();

实例ID:当用户卸载并重新安装应用程序时,instance_id将会更改。而且它不是一个恒定的价值。

您是否有任何想法从所有Android设备(有/没有SIM卡,蓝牙......)获得一个唯一的ID,它真的是唯一的,不能为空并且在卸载/重新安装应用后不会改变?


我发现Secure.ANDROID_ID是最好的选择。 这是在设备首次启动时生成并存储的64位数量。 但它会重置设备出厂重置。

有一些报告显示某些设备在所有实例上都具有相同的Secure.ANDROID_ID。

我们可以向Secure.ANDROID_ID添加额外的项目(如SIM序列,GCM实例ID或...)并生成新的唯一指纹。


可以在Android设备上设置多个用户,并且对于同一Android设备上的每个用户,Secure.ANDROID_ID都是不同的。 因此,使用Secure.ANDROID_ID意味着单个设备将被注册为设备上每个用户设置的不同设备。


Secure.ANDROID_ID是您唯一的朋友。 然而,它在旧(<2.3)设备上存在一些问题(空结果)。 所有其他ID不适用于所有类型的设备。

另请阅读是否有唯一的Android设备ID?