Я работаю над приложением службы определения местоположения и обнаруживаю странное поведение. Как только пользователь подтвердит использование служб определения местоположения, в строке состояния появится значок геозоны. Все работает отлично, и я получаю события входа и выхода из региона независимо от того, работает ли приложение, в фоновом режиме или нет. Но в какой-то момент значок геозоны исчезает, и мое устройство становится нечувствительным к Маяку. Существуют ли какие-либо условия, при которых геозона отключается, пока я не выключу и не выключу устройство? И езда на велосипеде возвращает его.
iOS 7.1 Geofencing и iBeacons перестают работать
Ответы (2)
Это недавно появившаяся ошибка в CoreLocation. К сожалению, не существует известного автоматизированного способа исправить это. Для решения проблемы требуется цикл включения/выключения питания или последовательность включения/выключения Bluetooth.
См. здесь.
У меня была аналогичная проблема. Мое приложение будет работать и находить маяки при первом запуске. Когда я перезагрузился, приложение открылось для ScanViewController, как и ожидалось, но не обнаружило маяк.
Я сослался на статью о StackOverflow, iBeacon: DidRangeBeacons перестает вызываться, необходимо перезагрузить устройство, чтобы оно снова заработало, и проанализировал видеосессию Apple на WWDC 2013 «Что нового в Corelocation» https://developer.apple.com/videos/wwdc/2013/index.php?id=307
Я нашел дополнительные методы делегата CLLocation:
Когда вы инициализируете свой регион-маяк, если вы установили:
notifyEntryStateOnDisplay = YES;
//The following delegate method will be called:
-(void) locationManager: (CLLocationManager *) manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
if (state ==CLRegionStateInside) {
[_locationManager startRangingBeaconsInRegion:region]:
}
//Your alternative code
}
//To help trouble shoot, I added this delegate methods
-(void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *) region withError: (NSError *)error {
}
and
-(void) locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLRegion *) region withError: (NSError *)error {
}
Я запустил приложение. Он не возвращал ошибок сбоя. Я проверил настройки. Bluetooth был включен и обнаружил устройства BT.
Я проверил строку состояния на наличие значка геозоны. Значок геозоны присутствовал.
Я подождал более 2 минут, а затем приложение обнаружило маяки и заработало, как и ожидалось. Вялый — это мягко сказано. Я знал, что перезагрузка должна работать согласно всем статьям об iOS 7.1, которые я читал в StackOverFlow и других ресурсах.
Я перезагрузился и подождал, пока приложение обнаружит маяки. В среднем до обнаружения маяка уходило 2 минуты. Я не уверен, что вызывает этот медленный ответ. Поскольку ответы приложений должны измеряться долями секунд, я уверен, что разработчики могут подумать, что их приложения не работают.
Я предлагаю, если ваше приложение не обнаруживает маяки или возвращает ошибки сбоя, подождать 2 минуты, чтобы увидеть, обнаружит ли ваше приложение маяки. Надеюсь, это поможет.