几个月来我一直在使用一个类生成一个在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()));
}
}
这是我如何生成我的uuid的核心。事情是这个周末有人使用XT1032和Android 5.1能够在每次安装应用程序后重新生成不同的UUID,获得免费优惠券。我使用的这种方法可以以某种方式欺骗?也许用扎根手机?我在盲人中射击。我需要能够在安装之间创建可靠的UUID。
答案 0 :(得分:9)
我之前使用过它并且对我来说工作正常。
public String createTransactionID() throws Exception{
return UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
}
答案 1 :(得分:2)
您的UUID
取决于三种不同的ID,所有ID都可以轻松更改。无法确定这是否是原因,但请查看此处的代码:
SSN(SIM序列号)
getSimSerialNumber()获取附加的SIM卡的SSN。为同一设备生成不同UUID
的简单方法是插入不同的SIM卡。我所知道的是繁琐的,但仍然可行。
<强> IMEI / MEID 强>
getDeviceId()返回IMEI或MEID。另一种方法是更改设备的IMEI
。如果您只是谷歌&#34;更改手机IMEI没有root&#34;你将获得大量可行的结果。这可能是一种更简单的方法(如果是自动化的)。
Android设备ID
每次手机恢复时,根据文档更改ANDROID_ID。因此,用户只需通过恢复手机即可更改UUID
。
由于您的UUID基于三个独特ID链,因此欺骗系统就像链中最薄弱的环节一样简单。 ANDROID_ID
是此链条中最强大的链接,我建议您仅使用它。 请参阅此link作为替代。
答案 2 :(得分:1)
我需要能够在安装之间创建可靠的UUID。
如果这是唯一的标准,this答案中的提案是您最好的选择。请注意,设备恢复出厂设置后,ANDROID_ID 可能会更改,因此永远不会出现无法欺骗应用的情况。
大多数其他“UUID”可能已经在您注意到的应用安装之间发生了变化。
有关详细信息,请阅读Google Best Practices for Unique Identifiers。这是必读的。