我们正试图通过某种优惠券来奖励,无论何时在设备上进行新安装,都可以在实体店兑换。我们对此进行了一些试验,并验证它是基于IMEI&amp ;;的新设备。 IMSI。但我们发现人们在一些模拟器上进行操作,这些模拟器可以操作这些ID并模仿新设备。如何避免这种情况?
我们目前正在使用这样的
TelephonyManager m_telephonyManager = (TelephonyManager) context.getSystemService(serviceName);
String IMEI, IMSI;
IMEI = m_telephonyManager.getDeviceId();
IMSI = m_telephonyManager.getSubscriberId();
return IMEI + ":" + IMSI;
我确信有一种方法,因为广告网络的驱动器安装只能正确地为每个设备归属一次。
答案 0 :(得分:2)
您可以使用以上任何方法检查您的应用程序是否在模拟器中运行。但这些并非100%可靠,但这些方法的结合可能会对您有所帮助。
方法1
if (android.os.Build.MODEL.equals(“sdk”)) {
// emulator
} else {
//not emulator
}
方法2
尝试将清单设置为依赖于模拟器中通常不支持的某些硬件。例如:
<uses-feature android:name="android.hardware.sensor.accelerometer"
android:required="true" />
方法3
尝试使用
Build.FINGERPRINT.contains("generic")
这些是查找应用程序是否在模拟器中运行的一些方法。希望这会有所帮助。
答案 1 :(得分:0)
让他们在商店中的设备上显示应用+生成的代码。这似乎是您当前方案防水的唯一方式。或者只是不要将设备ID作为标识,但要找出其他一些促销方案;)
答案 2 :(得分:0)
这不是您问题的答案,但建议您如何获得唯一身份证明。使用用户移动电话号码作为唯一ID。 问题是,获取电话号码并非易事,如下所示:
因此,您可以执行的是实施基本握手过程,用户通过该过程输入发送到您服务器的电话号码。然后,您的服务器会将一条文本消息发送到您的应用程序可以收听的给定号码。收到确认文本后,会将成功消息发送回服务器,并且您知道该电话号码有效且唯一。
希望这对你的项目来说是最有意义的。