CLRegion фоновый мониторинг не происходит
В настройках моего проекта> target > Capabilities у меня включено фоновые режимы с проверкой "Обновления местоположения".
AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.storyController = [StoryController sharedController];
self.storyController.locationManager.delegate = self;
... etc initializing VC ...
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"entered region, %@", region.identifier);
[self handleRegionEvent:region];
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
NSLog(@"exited region, %@", region.identifier);
[self handleRegionEvent:region];
}
- (void)handleRegionEvent:(CLRegion *)region {
NSLog(@"handle region");
if ([UIApplication sharedApplication].applicationState ==
UIApplicationStateActive) {
NSLog(@"handle region local");
UILocalNotification *n = [[UILocalNotification alloc] init];
n.alertBody = @"LOCAL";
n.soundName = @"Default"; //Coffee Man?
[[UIApplication sharedApplication] presentLocalNotificationNow:n];
} else {
if ([[StoryController sharedController] readyForNextChapter]) {
UILocalNotification *n = [[UILocalNotification alloc] init];
n.alertBody = @"New ☕ Story";
n.soundName = @"Default"; //Coffee Man?
[[UIApplication sharedApplication] presentLocalNotificationNow:n];
}
}
}
StoryController
+ (id)sharedController {
static StoryController *myController = nil;
static dispatch_once_t token;
dispatch_once(&token, ^{
myController = [[StoryController alloc] init];
});
return myController;
}
- (id)init {
self = [super init];
self.locationManager = [[CLLocationManager alloc] init];
NSLog(@"monitored regions: %@", self.locationManager.monitoredRegions);
Позже я наблюдаю за регионом с:
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:g.coordinate radius:1000 identifier:"My Store"];
region.notifyOnEntry = true;
region.notifyOnExit = true;
NSLog(@"%d", [CLLocationManager authorizationStatus]);
[[[StoryController sharedController] locationManager] startMonitoringForRegion:region];
Я не получаю никаких уведомлений, когда я ухожу или вхожу в 1-километровый диапазон с приложенным фоном.
Как мне сделать эту работу? Когда я выхожу из контролируемых регионов, я вижу, что последние значения правильны.
1 ответ
Две вещи, которые вы должны убедиться, что вы делаете.
проверка доступности мониторинга региона
убедитесь, что ваш locationManager.authorizationStatus == .authorizedAlways
Некоторые системы просто не поддерживают мониторинг региона, и мониторинг региона никогда не будет работать, если ваш authorizationStatus не является.authorizedAlways, только тогда он может осуществлять мониторинг в фоновом режиме.