Android - 独特且持续的设备ID

时间:2015-09-25 10:20:36

标签: android

我需要在服务器上注册用户设备,其唯一标识符是一个固定值,并且将来不会发生变化。

我无法找到一个很好的解决方案来获取所有设备的唯一ID(有/无SIM卡)。

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

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

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

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

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

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

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

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

Instance id :当用户卸载并重新安装应用时,instance_id会发生变化。并且它不是一个恒定的值。

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

另请阅读Is there a unique Android device ID?