android - Android 设备的唯一且不可修改的设备 ID(包括没有谷歌的设备)

标签 android

我正在开发一个应用程序,我需要在其中使用设备的唯一 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/

相关文章:

android - 图像在Android Studio中的Note 10和One Plus设备上旋转

android - ADB 无法识别三星 Galaxy S?

android - 在 Android 版 Google 日历中添加多个事件

android - Android Studio 项目风格的 Java 源目录未以蓝色呈现

android - 如何在抽屉导航 fragment 中放置两个回收 View

Android Studio 2.1 预览版找不到哈希字符串为 'android-N' 的目标

java - 在 android 中设置 TextView 的可见性不起作用

java - 在应用程序中实现 BottomSheet

android - 仅将外部库的 “minifyEnabled”设置为 “false”

java.lang.NullPointerException : uriString