2015-09-25 66 views
11

我需要在服务器上注册具有唯一标识符的用户设备,该唯一标识符为常量值,将来不会更改。Android - 唯一且恒定的设备ID

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

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

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

IMEI:IMEI是依赖于设备的simcard的插槽,所以它是不可能得到的IMEI对于不使用simcard的设备。

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

WLAN MAC地址:如果设备不具备WiFi硬件,然后返回null 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:当用户卸载并重新安装应用程序实例ID将发生变化。这不是一个常数值。

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

+0

请注意,没有SIM卡和WiFi的平板电脑不能存在或远程使用。你有没有考虑过两者的组合? –

+0

@STTLCU no。但用户可以更改设计的MAC地址。 –

+0

@STTLCU我不确定你身边有哪些平板电脑,但几乎没有人知道平板电脑拥有SIM卡。 –

回答

3

我发现Secure.ANDROID_ID是最好的选择。这是设备第一次引导时生成并存储的64位数量。但它重置设备的工厂重置。

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

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

2

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

+0

** ANDROID_ID **在重置时会被重置设备出厂重置。因此,这不是持久的。 –