(iOS 11, Swift 4.1)
Я написал плагин Cordova в Swift для управления мониторингом региона, но он не работает должным образом, когда мое приложение приостановлено или убито.Вот мой класс с соответствующими функциями:
class GeofenceManager : NSObject, CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) {
switch state {
case .inside:
log ("Did Enter Region: " + region.identifier)
self.postGeofenceTransition(region: region, transitionType: 1)
break
case .unknown:
log ("Unknown Transition for region: " + region.identifier)
// self.postGeofenceTransition(region: region, transitionType: 1)
break
default:
break
}
}
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
log ("Did Exit Region: " + region.identifier)
self.postGeofenceTransition(region: region, transitionType: 2)
}
func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {
log("Did start monitoring region: " + region.identifier)
self.locationManager.requestState(for: region)
}
}
(я делаю это таким образом, чтобы обрабатывать кого-то, кто уже находится в регионе, когда мы начинаем мониторинг)
У меня также есть didChangeAuthorizationStatus"который выбирает и устанавливает все геозоны, работает нормально.
В моем AppDelegate (objc) я пытаюсь запустить Location Services, если приложение открывается из события региона, с
if([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
_locationManager = [[CLLocationManager alloc] init];
[_locationManager setDelegate:self];
[_locationManager setDistanceFilter:kCLHeadingFilterNone];
//change the desired accuracy to kCLLocationAccuracyBest
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
//SOLUTION: set setPausesLocationUpdatesAutomatically to NO
[_locationManager setPausesLocationUpdatesAutomatically:NO];
[_locationManager startUpdatingLocation];
}
У меня вопрос: если мое приложение открывается из события, то есть "didEnterRegion", я немедленно запускаю службы определения местоположения, но удастся ли мне снова попасть в мой делегат "didEnterRegion"?И я здесь что-то делаю совершенно неправильно?
Я думаю, что мне не хватает некоторого понимания состояний приложений iOS, я копался в документах, но пока не нажал.Любое понимание очень ценится.