我正在开发一个应用程序,其中我将需要设备的唯一ID。
这篇文章:Is there a unique Android device ID?首先让我考虑使用ANDROID_ID
。但我需要一个可靠的平板电脑和手机解决方案,有或没有任何谷歌帐户/软件,就像在中国大多数服务被阻止。我正在寻找其他解决方案
重要提示:出于安全原因,此ID必须是安全的,不会有任何更改。当然,当设备植根或有人真的想弄乱应用程序时,这是不可能的,但至少对普通用户而言。此外,Mac address
和TelephonyManager.getDeviceId()
不可靠。
由于我的目标是手机和平板电脑,无论是否有Google,是否可以让每台设备都无法修改独特的设备ID?
答案 0 :(得分:1)
对不起,我在完全理解之前标记了这个问题。就像@Johann所说的那样,考虑根系用户进入等式会使识别设备变得更加困难。
假设您的应用程序使用webservice,用户必须以某种方式连接到Internet,即通过数据计划(使用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;
}
希望它对你有所帮助......
答案 1 :(得分:0)
您可以使用wifi mac地址:
private String getWifiMacAddress() {
WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
return info.getMacAddress();
}
答案 2 :(得分:0)
您可以使用设备imei号码。
你想打电话 -
android.telephony.TelephonyManager.getDeviceId().
您需要在AndroidManifest.xml中获得以下权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
答案 3 :(得分:0)
我认为使用Mac地址或Wi-Fi模块识别设备会很好。即使在廉价的中国设备上,它也非常独特。 看看WifiInfo类: http://developer.android.com/reference/android/net/wifi/WifiInfo.html
应该适用于设备识别。
答案 4 :(得分:0)
设备植根后,可以修改IMEI号和MAC / WiFi地址。此外,从Android Marshmallow,用户可以撤销对WiFi / MAC地址和蓝牙地址的许可。如果您尝试检索这些值,您将看到一个简单的虚拟ID,这在所有Marshmallow设备中都很常见。
检查this link