如果他们伪造位置,我将阻止用户使用我的应用程序。所以我使用 isFromMockProvider
来检查位置是否是假的(按照 这里)。但是 isFromMockProvider()
在某些情况下可能会为伪造的位置返回 false。
public void onLocationChanged(Location location) {
textView.append("long:"+location.getLatitude()+" - lat:"+location.getLongitude()+" - isMock :"+location.isFromMockProvider() + "\n");
}
我的情况是:我使用应用程序 假 GPS 位置 来伪造一个位置,然后我禁用假位置并转到我的应用程序。然后 onLocationChanged 返回假位置 isFromMockProvider() = false
录像机: https ://www.youtube.com/watch?v=rWVvjOCaZiI(在这个视频中,我的当前位置是16.06、108.21,假位置是36.26、138.28。你可以在上一个视频中看到位置是36.26, 138.28 但 isFromMockProvider=false)
在这种情况下,有什么方法可以检测用户是否使用了虚假位置?任何帮助或建议将不胜感激。
原文由 Linh 发布,翻译遵循 CC BY-SA 4.0 许可协议
冒着现实答案的风险
我想提供一个答案,帮助开发人员理解产品设计的公共关系方面,冒着批评的风险。坦率地说,一个人无法在计算机科学真空中编写出色的应用程序。满足用户需求并将其与安全性相平衡是当今软件界面和行为设计中的主要问题之一,尤其是在移动领域。
从这个角度来看,您的问题“在这种情况下,有没有办法检测用户是否使用了虚假位置?”可能不是您面临的最相关的问题。我并不是在回避这个可能对您有更大帮助的问题,而且我可以很好地回答这个问题:“有没有什么方法可以安全地从用户设备的地理坐标固件中获取数据,使其不会被欺骗?”
这个问题的答案是“不”。
Android HTTP 客户端合约
保证用户设备位置信息不是 Android 客户端-服务器合同或其竞争对手的合同的一部分。
实际理性
实际上有一种市场力量可能会无限期地反对这种保证。出于隐私和家庭安全原因,许多设备所有者(和您的用户)希望控制人们是否知道他们的真实位置。
解决方案
作为软件设计者,您可以问自己的下一个问题是,“应用程序或库如何工作并满足我使用今天(或明天)的位置欺骗软件来满足一定比例的用户社区的需求? “
如果您正在编写商业智能软件或您的系统有一些其他的统计方面,那么您需要与错误栏等效的软件。如果您显示统计数据,那么错误栏将是一个合适的图形功能。估计用户群体中位置欺骗者的百分比需要进一步研究。