我正在开发一个应用程序,我需要在其中使用设备的唯一 ID。
这篇文章:Is there a unique Android device ID?首先让我考虑使用 ANDROID_ID
。但是我需要一个适用于平板电脑和手机的可靠解决方案,有或没有任何谷歌帐户/软件,比如在中国,它的大部分服务都被屏蔽了。因此我正在寻找其他解决方案.
重要提示:出于安全原因,此 ID 必须是安全的,不会发生任何更改。当然,当设备被 root 或有人真的想弄乱应用程序时,这是不可能的,但至少对于普通用户来说是不可能的。此外,Mac 地址
和 TelephonyManager.getDeviceId()
也不可靠。
由于我的目标是手机和平板电脑,有或没有谷歌,是否有一种方法可以为每台设备获取不可修改的唯一设备 ID?
最佳答案
很抱歉,我在完全理解之前就标记了这个问题。就像@Johann 所说的那样,将有根用户纳入等式将使识别设备变得更加困难。
假设您的应用程序使用网络服务,用户必须以某种方式连接到互联网,即通过数据计划(使用 SIM 卡的用户)或通过 wifi。
因此,结合来自硬件的 id 并生成结果字符串的唯一哈希码,您应该能够唯一地标识设备(理论上即)。但我尚未测试此代码,因此请检查是否适合您。
final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
final String tmDevice, tmSerial, androidId, wifi;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi = ""+ manager.getConnectionInfo().getMacAddress();
String unique_id = makeSHA1Hash(tmDevice + tmSerial + androidId + wifi);
生成 SHA1Hash
public String makeSHA1Hash(String input)
throws NoSuchAlgorithmException, UnsupportedEncodingException
{
MessageDigest md = MessageDigest.getInstance("SHA1");
md.reset();
byte[] buffer = input.getBytes("UTF-8");
md.update(buffer);
byte[] digest = md.digest();
String hexStr = "";
for (int i = 0; i < digest.length; i++) {
hexStr += Integer.toString( ( digest[i] & 0xff ) + 0x100, 16).substring( 1 );
}
return hexStr;
}
希望对你有帮助...
关于android - Android 设备的唯一且不可修改的设备 ID(包括没有谷歌的设备),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563852/