Реализация мониторинга iBeacon ios7.1

У меня проблема с реализацией мониторинга iBeacon. Я запускаю локальное уведомление, когда вызывается метод locationManager:didDetermineState:forRegion:. Когда приложение переходит в фоновый режим, я вообще не получаю никаких локальных уведомлений, но они приходят все сразу, когда я активирую экран, нажимая кнопку «Домой». В зависимости от времени, когда я выхожу из сна, устройство всегда может получать уведомления до десятков, когда я его просыпаю. Как это возможно? У кого-нибудь была такая же проблема?

Я использую iPhone 5S и 5C с iOS 7.1. Локальное уведомление устанавливается таким образом:

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{

    UILocalNotification *localNot = [[UILocalNotification alloc] init];
    localNot.alertBody = [NSString stringWithFormat:@"Region state %d determined", state];
    localNot.alertAction = @"Go for it!";
    localNot.soundName = UILocalNotificationDefaultSoundName;
    localNot.fireDate = nil;

    [[UIApplication sharedApplication] presentLocalNotificationNow:localNot];
}

person user422688    schedule 17.03.2014    source источник


Ответы (1)


Я подозреваю, что на самом деле вы вообще не выполняете какие-либо фоновые обнаружения, и причина, по которой вы видите уведомления, когда нажимаете кнопку «Домой», заключается в том, что у вас установлен флаг notifyEntryStateOnDisplay, который заставляет вас получать дополнительный обратный вызов didDetermineState: forRegion: всякий раз, когда появляется экран. для каждого региона, который вы отслеживаете с установленным флагом.

Почему вы не получаете обратные вызовы в фоновом режиме? Возможно, вам придется подождать до 15 минут, чтобы обнаружить iBeacon в фоновом режиме, даже на iOS 7.1. См. здесь.

person davidgyoung    schedule 17.03.2014
comment
Как я могу проверить, выполняю ли я фоновый мониторинг? Я включил как уведомления, так и службы определения местоположения в настройках. Я запускаю мониторинг и ранжирование следующим кодом: _beaconManager = [[CLLocationManager alloc] init]; _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:REGION_UUID] основной:ОСНОВНОЙ идентификатор:REGION_ID]; _beaconManager.delegate = сам; _beaconRegion.notifyEntryStateOnDisplay = ДА; [_beaconManager startMonitoringForRegion:_beaconRegion]; [_beaconManager startRangingBeaconsInRegion:_beaconRegion]; - person user422688; 18.03.2014
comment
Фоновый мониторинг автоматический. Вам не нужно делать ничего особенного. Просто нажмите кнопку «Домой» и держите экран включенным во время тестирования, а затем наберитесь терпения, поскольку вы ждете слишком 15 минут, чтобы получить обнаружение фона. Включение экрана позволяет избежать дополнительных уведомлений, которые вы получаете от _beaconRegion.notifyEntryStateOnDisplay = YES; в качестве альтернативы вы можете изменить это на NO для тестирования. - person davidgyoung; 18.03.2014