对不起,我在充分理解它之前标记了此问题。就像@Johann所说,考虑将根植用户纳入等式将会使识别设备变得更加困难。
使用假设您的应用程序使用web服务,用户必须以某种方式连接到互联网,即通过数据计划(用户使用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);
makeSHA1Hash
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;
}
希望它可以帮助你...
几乎所有从您的应用访问的任何内容都可以使用root修改。 –
这个ID并不是按照原样使用,它将与其他参数混合并加密。我知道如果有人真的想要它可能,但对于普通用户,我希望有最安全的解决方案 – Virthuss
@FabinPaul我'要求一个安全的解决方案,包括非谷歌设备以及。我看到这个话题的人,它实际上是关于这个话题最有名的一个。但它对我的情况没有帮助。 – Virthuss