作者:峰吹云飞_974 | 来源:互联网 | 2023-01-05 13:47
我正在开发一个需要实时位置跟踪的应用程序,所以我正在使用startMonitoringSignificantLocationChanges
,即使应用程序已被用户从应用程序切换器强制退出,我的iOS 10模拟器上的一切正常.通过模拟器进行调试时,我正在使用高速公路驱动器选项,以便位置不断变化.
但是对于iOS 11模拟器:
当应用程序处于后台或前台模式时,服务器会根据用户的实时位置进行更新,但是当应用程序强行退出时,这不会发生.
服务器没有获得更新的位置,我甚至设置断点didFinishLaunching
并使用该wait for executable to be launched
设置来检查我是否得到回调,但我不适用于iOS 11而且适用于iOS 10.
我还使用iOS 11所需的适当值更新了info.plist,并确认我正在给予"始终"权限.我使用代码使用单例作为位置管理器对象:
func setupLocationManager(){
locatiOnManager= CLLocationManager()
locationManager.delegate = self
locationManager.pausesLocatiOnUpdatesAutomatically= false
locationManager.allowsBackgroundLocatiOnUpdates= true
locationManager.requestAlwaysAuthorization()
locationManager.distanceFilter = 100.0
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
locationManager.startMonitoringSignificantLocationChanges()
locationManager.startUpdatingLocation()
}
并在应用程序委托:
if let _ = launchOptions?[UIApplicationLaunchOptionsKey.location] {
ChatSocketHelper.sharedInstance.socket.on("connect") { data, ack in
if let coordinate = LocationManager.shared.currentLocation?.coordinate{
ChatSocketHelper.sharedInstance.updateLocation([coordinate.longitude, coordinate.latitude])
}
}
}
并在位置代表:
extension LocationManager : CLLocationManagerDelegate{
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let locatiOnObject= locations.last else {return}
//update to closest accuracy
currentLocation = locationObject
if ChatSocketHelper.sharedInstance.socket != nil{
ChatSocketHelper.sharedInstance.updateLocation([locationObject.coordinate.longitude, locationObject.coordinate.latitude])
}
}
}
这是iOS 11的一个已知问题,当用户强行杀死时,位置会被破坏吗?当我做了一些挖掘并发现类似的蓝牙问题,但没有重要的位置变化否则.
例如这个链接.
编辑:另外这个关于更新为"慢",但我完全不接收更新帖子会谈.