我正在开发一款需要实时定位的应用程序,因此我使用了
但对于 iOS 11 模拟器: 当应用程序处于后台或前台模式时,服务器会更新用户的实时位置,但当应用程序被强制退出时,这种情况就不再存在。
服务器没有收到更新的位置信息,我甚至在
我还更新了 info.plist 中适用于 iOS 11 的相应值,并确认我已授予“始终”权限。 我正在使用位置管理器对象的单例模式,代码如下:
这是iOS 11已知的问题吗?当用户强制关闭程序后,位置功能会失效吗?我搜索了一些相关的资料,发现类似的蓝牙问题,但没有针对位置变化的重要信息。
例如:这个链接。 编辑:此外,这篇文章提到更新速度“缓慢”,但我根本就没有收到更新。
startMonitoringSignificantLocationChanges
,在 iOS 10 模拟器上一切正常,即使用户从应用程序切换器中强制退出应用程序也是如此。同时,在调试模式下使用高速公路行驶选项,以保持位置变化。但对于 iOS 11 模拟器: 当应用程序处于后台或前台模式时,服务器会更新用户的实时位置,但当应用程序被强制退出时,这种情况就不再存在。
服务器没有收到更新的位置信息,我甚至在
didFinishLaunching
中设置了一个断点,并使用了“等待可执行文件启动”的设置来检查是否有回调,但在 iOS 11 中没有,而在 iOS 10 中有。我还更新了 info.plist 中适用于 iOS 11 的相应值,并确认我已授予“始终”权限。 我正在使用位置管理器对象的单例模式,代码如下:
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已知的问题吗?当用户强制关闭程序后,位置功能会失效吗?我搜索了一些相关的资料,发现类似的蓝牙问题,但没有针对位置变化的重要信息。
例如:这个链接。 编辑:此外,这篇文章提到更新速度“缓慢”,但我根本就没有收到更新。
startMonitoringSignificantLocationChanges
和geoFencing
是为此目的而设计的。当应用程序被用户终止时,您应该在didFinishLaunching
中获得一个带有“Locations”键的回调。 - Rikh