在android(UUID)中生成唯一ID

mon*_*xas 5 android

几个月来,我一直在使用一个类来生成一个在reintalls之间稳固的UUID.我的应用程序是关于折扣,所以我依靠这个UUID来限制每台设备的优惠券数量.

protected void getDeviceId(){
    try {
        Context context = cordova.getActivity().getApplicationContext();
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        String uuid;
        String androidID = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
        String deviceID = tm.getDeviceId();
        String simID = tm.getSimSerialNumber();

        if ("9774d56d682e549c".equals(androidID) || androidID == null) {
            androidID = "";
        }

        if (deviceID == null) {
            deviceID = "";
        }

        if (simID == null) {
            simID = "";
        }

        uuid = androidID + deviceID + simID;
        uuid = String.format("%32s", uuid).replace(' ', '0');
        uuid = uuid.substring(0, 32);
        uuid = uuid.replaceAll("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5");

        this.callbackContext.success(uuid);
    }catch(Exception e ) {
        this.callbackContext.error("Exception occurred: ".concat(e.getMessage()));
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我如何生成我的uuid的核心.事情是这个周末有人使用XT1032和Android 5.1能够在每次安装应用程序后重新生成不同的UUID,获得免费优惠券.我使用的这种方法可以以某种方式欺骗?也许用扎根手机?我在盲人中射击.我需要能够在安装之间创建可靠的UUID.

vid*_*laJ 13

我以前用过这个,对我来说工作正常.

public String createTransactionID() throws Exception{
    return UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)

  • 我需要始终生成相同的 ID。我认为这只提供了一个随机块?问题是,当人们删除我的应用程序时,重新安装后,我必须为同一部手机重新生成相同的 ID,以便能够识别它。我认为这行不通? (3认同)
  • 我很惊讶这个答案竟然得到了 19 票赞成,却没有人理解 OP 的问题。 (2认同)

Abb*_*bas 9

UUID依赖于三个不同的 ID,所有这些 ID 都可以轻松更改。没有办法确定是否是这个原因,但看看这里的代码:

SSN(SIM 序列号) getSimSerialNumber()获取所附 SIM 卡的 SSN。为同一设备生成不同的 SIM 卡的一个简单方法UUID是插入不同的 SIM 卡。我知道这很麻烦,但仍然可行。

IMEI/MEID getDeviceId()返回 IMEI 或 MEID。所以另一种方法是改变IMEI设备的。如果你只用谷歌搜索“无需 root 即可更改手机 IMEI”,你会得到大量可行的结果。这可能是一种更简单的方法(如果是自动化的)。

Android 设备 ID ANDROID_ID根据文档,每次手机恢复时都会发生变化。因此,用户只需恢复手机即可进行更改UUID

由于您的 UUID 是基于三个唯一 ID 的链,因此欺骗系统就像链中最薄弱的环节一样容易。ANDROID_ID作为这个链条中最坚固的一环,我建议您只使用它。请参阅此链接作为替代方案


编辑:

虽然ANDROID_ID它仍然是识别以前用户的最佳方式,但自奥利奥以来,它的使用和独特性已经有了一些更新。访问#ANDROID_ID页面了解更多详细信息。

变更摘要如下:

每个ANDROID_ID面向Android Oreo或更高版本的应用程序以及安装于Android Oreo或更高版本的应用程序对于安装该应用程序的用户、应用程序的签名(对于不同的应用程序来说本质上不同,但不一定)和设备都是唯一的。因此,虽然在大多数情况下您仍会获得相同的 id,但以不同用户身份安装应用程序仍会生成不同的ANDROID_ID. 这些更改是为了保护用户的隐私。

ANDROID_ID 的权限也有更新。