2011-06-16 24 views
1

我正在同时在android和iPhone上开发应用程序。由于我的地理位置应用程序的性质,重要的是信息来自真的来自电话,而不仅仅是恰好安装了应用程序的仿真器。防止骗子:它真的是移动设备,还是仿真器?

是否有某种类型的值可以从设备中获取以确定它是否是仿真器?我不希望用户通过简单地为自己的纬度/经度坐标设置自己的值来欺骗系统。我不知道什么是愚蠢的证据,但我至少希望尽可能多地消除欺诈行为。

我打算有适当的算法来验证正在接收的数据,如跳跃n。英里数n。距离您最近的位置有几秒钟的时间 - 但是这可能会在某些情况下导致误报 - 特别是在某些Android设备上,您可以在世界各地移动2英尺。

这适用于Android和iOS。任何电话的答案都可以。

回答

3

您可以使用[UIDevice currentDevice] .model获取iOS的当前设备型号。 UIDevice class reference会给你可以比较的常量字符串。向下滚动到模型属性以获取更多信息。

没有太多的android经验,但this应该工作。

0

使用Android,事实证明,这要比确定您是否使用模拟器(可以使用上述Peter的链接完成)稍微复杂一点,因为在“Development Settings”下的允许模拟位置(请参阅,例如,this app,允许用户设置一个模拟位置,然后将提供给其他应用程序)。

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

相关问题