2017-11-04 41 views

回答

0

将您的场地位置保存在您的应用程序或服务器端。然后尝试通过获取他们的位置大约100毫秒或您选择的半径来跟踪用户。

添加CoreLocation.framework到BuildPhases - >链接二进制与图书馆(不再需要为7.2.1的XCode的)

进口CoreLocation到你的类 - 可能ViewController.swift

添加CLLocationManagerDelegate上您的课声明

添加NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription到PList INIT位置经理:

locationManager = CLLocationManager() 
locationManager.delegate = self; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest 
locationManager.requestAlwaysAuthorization() 
locationManager.startUpdatingLocation() 
get User Location By: 
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    var locValue:CLLocationCoordinate2D = manager.location.coordinate 
    print("locations = \(locValue.latitude) \(locValue.longitude)") 
} 

看看这个Tracking Location

+0

提供假的位置信息将非常容易。 –

1

简短和通用的答案是你不能真的这样做,但请继续阅读。

您需要回答的问题与您想要保护您的应用的方式不符,您试图减轻的威胁是什么。

您可以在移动应用程序中构建任何保护(例如其他答案中的保护),但请记住客户端完全由用户控制。例如,用户可能伪造应用程序的位置坐标(请参阅Pokemon Go),在仿真器或实际设备中执行操作非常简单。或者更容易,用户可以从任意来源发出请求,而不是您的应用程序。服务器请求必须包含用户的位置 - 但用户可以发送任何他想要的内容。总而言之,客户端上的任何内容都完全由用户控制。

因此,这导致服务器端保护作为实际安全解决方案(合理难以规避的解决方案)的唯一方式。如果客户端告诉服务器,服务器知道客户端的物理位置的唯一来源 - 但我们上面已经看到这是不可靠的。

但是,有一件事客户端不能合理假冒(至少不容易),那就是客户端IP地址。因此,为防止用户不在场内使用您的服务,您可以做的唯一事情就是将其锁定在网络级别上,例如,您的API服务器应仅可从IP范围场地提供(大概是本地地址范围,或者如果您的API在云中,则是公共IP地址或场地的范围)。