我需要在服务器上注册用户设备,其唯一标识符是一个固定值,并且将来不会发生变化。
我无法找到一个很好的解决方案来获取所有设备的唯一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,它真的是唯一的,不能为空并且在卸载/重新安装应用程序后不会改变?
答案 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都不适用于所有类型的设备。