如何防止在Swift中伪造GPS应用程序的模拟GPS定位(欺骗)?

时间:2018-03-20 04:23:05

标签: ios swift gps

我正在制作一个使用CLLocationManager的应用程序,此应用程序将用于记录员工的与会者。为了验证员工的参与者,我们将获得GPS坐标。

据我所知,有一个应用程序,通常用于获取假GPS。我想阻止这个模拟GPS在用户使用我的应用程序时处于活动状态。

如果我使用Android,我可以下载假的GPS应用程序。当我说使用火种时,我可以伪造我的位置。实际上,我说我在曼谷,但因为我使用假GPS应用程序,我可以将我的火种位置设置在伦敦,而不是在曼谷。

所以基本上我想防止当用户使用我的应用程序时来自假GPS的虚假位置。说实话,我真的不知道iOS是否允许虚假位置

我可以在Swift中获得该功能吗?

这是我用来获取坐标

的类LocationManager
import 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
    }
}

2 个答案:

答案 0 :(得分:3)

您可以检查该应用是否已越狱。如果它已经越狱,您可以阻止用户使用该应用程序显示永久对话框或其他内容。 如果您想知道如何检测设备是否越狱,您可以自己找到它。有太多的文献会告诉你如何。

干杯:)

答案 1 :(得分:2)

我只能告诉你并且我遇到过类似情况,你需要有一个备份方法来获取用户位置。使用IP位置API /服务(不是100%可靠)并在您的应用中创建逻辑以比较数据。

PS:这不是解决您问题的方法这只是您可以尝试使用的一个想法。但是,如果使用不同的城市/州进行欺骗,因为IP位置不是高精度的,这只会起到最佳效果。如果GPS说你在圣地亚哥但你的IP说你在旧金山,那么你可以阻止用户界面/请求直到用户确认某事。

PS2:在iOS中,我知道用户可以欺骗它的唯一方法就是通过XCode运行应用程序,使用位置功能,然后打开你的应用程序。 (过去常常用口袋妖怪去#notproud:))