美文网首页
识别应用程序安装

识别应用程序安装

作者: 寒冬_腊月 | 来源:发表于2018-03-12 15:05 被阅读9次

跟踪应用程序安装

第一次启动的时候,随机生成一个UUID,并创建一个文件来保存起来,也可以存相关安装的数据. 不用TelephonyManager.getDeviceId()的原因有两个:

  • 不是手机:没有电话硬件的Wifi专用设备或音乐播放器没有这种唯一标识符
  • 持久性:在具有此功能的设备上,它会持续存在设备数据擦除和出厂重置。目前还不清楚,在这种情况下,您的应用应该将此视为同一设备。
  • 特权:它需要READ_PHONE_STATE权限,如果您不使用或需要电话,这会很刺激
  • 错误:我们已经看到了一些生产型手机的实例,其中的实现有问题并返回垃圾,例如零或星号。
public class Installation {
    private static String sID = null;
    private static final String INSTALLATION = "INSTALLATION";

    public synchronized static String id(Context context) {
        if (sID == null) {  
            File installation = new File(context.getFilesDir(), INSTALLATION);
            try {
                if (!installation.exists())
                    writeInstallationFile(installation);
                sID = readInstallationFile(installation);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        return sID;
    }

    private static String readInstallationFile(File installation) throws IOException {
        RandomAccessFile f = new RandomAccessFile(installation, "r");
        byte[] bytes = new byte[(int) f.length()];
        f.readFully(bytes);
        f.close();
        return new String(bytes);
    }

    private static void writeInstallationFile(File installation) throws IOException {
        FileOutputStream out = new FileOutputStream(installation);
        String id = UUID.randomUUID().toString();
        out.write(id.getBytes());
        out.close();
    }
}

返回的格式

7bebb30f-fb61-429e-9022-2caf57f55efa

Mac Address

可以从设备的WiFi或蓝牙硬件中检索Mac地址。我们不建议将此用作唯一标识符。首先,并非所有设备都具有WiFi。另外,如果WiFi未打开,硬件可能不会报告Mac地址。

Serial Number

由于Android 2.3(“姜饼”),这是可以通过android.os.Build.SERIAL。没有电话的设备需要在这里报告唯一的设备ID;有些手机也可能这样做。

ANDROID_ID

更具体地说,Settings.Secure.ANDROID_ID。这是设备第一次引导时生成并存储的64位数量。设备被擦拭时会重置。

ANDROID_ID似乎是唯一设备标识符的不错选择。有缺点:首先,它在2.2之前的Android版本(“Froyo”)上不是100%可靠的。

ANDROID_ID似乎是唯一设备标识符的不错选择。有缺点:首先,它在2.2之前的Android版本(“Froyo”)上不是100%可靠的。此外,主流制造商的流行手机中至少有一个广泛观察到的错误,其中每个实例具有相同的ANDROID_ID。

String android_id = Settings.Secure.getString(mContext.getContentResolver(),
                Settings.Secure.ANDROID_ID);

结论

避免识别特定设备的尝试有很多很好的理由。对于那些想要尝试的人来说,最好的方法可能是在任何合理现代的情况下使用ANDROID_ID

参考

Android Developers Blog

相关文章

网友评论

      本文标题:识别应用程序安装

      本文链接:https://www.haomeiwen.com/subject/rxvnfftx.html