【问题标题】:Preventing Cheaters: Is it really a mobile device, or is an emulator?防止作弊者:它真的是移动设备,还是模拟器?
【发布时间】:2011-06-16 20:22:39
【问题描述】:

我正在同时在 android 和 iPhone 上开发一个应用程序。由于我的地理定位应用程序的性质,重要的是信息真的来自手机,而不仅仅是恰好安装了该应用程序的模拟器。

我可以从设备中提取某种值来确定它是否是模拟器吗?我不希望用户通过简单地为其纬度/经度坐标设置自己的值来欺骗系统。我知道没有什么是万无一失的,但我至少希望尽可能多地消除欺诈行为。

我计划使用算法来验证接收到的数据,例如跳跃 n。 n英里距离您上一个位置只有几秒钟的时间 - 但这在某些情况下可能会导致误报 - 特别是在某些 Android 上,您可以神奇地被放置在世界各地移动 2 英尺。

这适用于 Android 和 iOS。任何一部手机都可以接听。

【问题讨论】:

    标签: android objective-c ios cocoa-touch


    【解决方案1】:

    您可以使用 [UIDevice currentDevice].model 来获取 iOS 的当前设备型号。 UIDevice class reference 将为您提供可以比较的可能的常量字符串。向下滚动到模型属性以了解更多信息。

    对android没有太多经验,但是this应该可以。

    【讨论】:

      【解决方案2】:

      事实证明,使用 Android 时,如果能够在“开发设置”下允许模拟位置(例如,参见this app,它允许用户设置一个模拟位置,然后其他应用程序可以使用该位置)。

      根据您用于检索位置提供程序的方法(例如,使用来自LocationManager.getBestProvider() 的返回值调用LocationManager.getProvider()),您最终可能会使用模拟提供程序。我一直无法找到任何确定的方法来确定提供程序是否为 Mock(例如,没有 LocationProvider 的属性表明它是 Mock,没有 Location 的属性表明它是假的,等等)。但是,您可以做的是阅读Secure Settings 以确定是否启用了 ALLOW_MOCK_LOCATION 并且在这种情况下不允许您的应用程序运行;由于该设置是安全设置之一,因此无法以编程方式对其进行更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 2017-07-10
        • 1970-01-01
        相关资源
        最近更新 更多