几个月以来,我一直在使用一个类来生成在两次交互之间保持稳定的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。
您UUID
依赖三个不同的ID,所有这些ID都可以轻松更改。无法确定这是否是原因,但请查看此处的代码:
SSN(SIM序列号) getSimSerialNumber()使您获得所附加SIM卡的SSN。UUID
为同一设备产生不同信号的一种简单方法是简单地插入不同的SIM卡。我知道这很麻烦,但是仍然可行。
IMEI / MEID getDeviceId()返回IMEI或MEID。因此,另一种方法是更改IMEI
设备的。如果您只用谷歌“无根更改手机IMEI”,您将获得许多可行的结果。这可能是更简单的方法(如果是自动化的)。
每次恢复手机时,根据docs更改的Android设备ID ANDROID_ID。因此,用户UUID
只需恢复手机即可更改。
由于您的UUID是基于三个唯一ID的链环,因此欺骗系统就像链接中最弱的链接一样容易。ANDROID_ID
作为此链中最牢固的链接,我建议您仅使用它。请参阅此链接作为替代。
编辑:
ANDROID_ID
自从奥利奥(Oreo)以来,虽然仍然是识别以前的用户的最佳方法,但其用途和独特性有所更新。访问#ANDROID_ID页面以获取更多详细信息。
更改的摘要是:
每个ANDROID_ID
上应用定位Android Oreo
或更高版本以及安装Android Oreo
或更新是通过谁安装的应用程序,该应用程序的签名(对于不同的应用程序本质上的不同,但不一定)的用户和设备的独特。因此,尽管在大多数情况下您仍然会获得相同的ID,但以其他用户身份安装应用仍会产生不同的ANDROID_ID
。进行这些更改是为了保护用户的隐私。
还更新了ANDROID_ID的权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句