我正在制作一个使用CLLocationManager的应用程序,此应用程序将用于记录员工的与会者。为了验证员工的参与者,我们将获得GPS坐标。
据我所知,有一个应用程序,通常用于获取假GPS。我想阻止这个模拟GPS在用户使用我的应用程序时处于活动状态。
如果我使用Android,我可以下载假的GPS应用程序。当我说使用火种时,我可以伪造我的位置。实际上,我说我在曼谷,但因为我使用假GPS应用程序,我可以将我的火种位置设置在伦敦,而不是在曼谷。
所以基本上我想防止当用户使用我的应用程序时来自假GPS的虚假位置。说实话,我真的不知道iOS是否允许虚假位置
我可以在Swift中获得该功能吗?
这是我用来获取坐标
的类LocationManagerimport UIKit
import CoreLocation
class LocationManager: NSObject {
let manager = CLLocationManager()
var didGetLocation: ((Coordinate?) -> Void)?
override init() {
super.init()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestLocation()
}
func getPermission() {
// to ask permission to the user by showing an alert (the alert message is available on info.plist)
if CLLocationManager.authorizationStatus() == .notDetermined {
manager.requestWhenInUseAuthorization()
}
}
}
extension LocationManager : CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
manager.requestLocation()
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print(error.localizedDescription)
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.first else {
didGetLocation?(nil)
return
}
let coordinate = Coordinate(location: location)
if let didGetLocation = didGetLocation {
didGetLocation(coordinate)
}
}
}
private extension Coordinate {
init(location: CLLocation) {
latitude = location.coordinate.latitude
longitude = location.coordinate.longitude
}
}
答案 0 :(得分:3)
您可以检查该应用是否已越狱。如果它已经越狱,您可以阻止用户使用该应用程序显示永久对话框或其他内容。 如果您想知道如何检测设备是否越狱,您可以自己找到它。有太多的文献会告诉你如何。
干杯:)
答案 1 :(得分:2)
我只能告诉你并且我遇到过类似情况,你需要有一个备份方法来获取用户位置。使用IP位置API /服务(不是100%可靠)并在您的应用中创建逻辑以比较数据。
PS:这不是解决您问题的方法这只是您可以尝试使用的一个想法。但是,如果使用不同的城市/州进行欺骗,因为IP位置不是高精度的,这只会起到最佳效果。如果GPS说你在圣地亚哥但你的IP说你在旧金山,那么你可以阻止用户界面/请求直到用户确认某事。
PS2:在iOS中,我知道用户可以欺骗它的唯一方法就是通过XCode运行应用程序,使用位置功能,然后打开你的应用程序。 (过去常常用口袋妖怪去#notproud:))