iOS 7.1 Geofencing и iBeacons перестают работать

Я работаю над приложением службы определения местоположения и обнаруживаю странное поведение. Как только пользователь подтвердит использование служб определения местоположения, в строке состояния появится значок геозоны. Все работает отлично, и я получаю события входа и выхода из региона независимо от того, работает ли приложение, в фоновом режиме или нет. Но в какой-то момент значок геозоны исчезает, и мое устройство становится нечувствительным к Маяку. Существуют ли какие-либо условия, при которых геозона отключается, пока я не выключу и не выключу устройство? И езда на велосипеде возвращает его.


person Scott Sarnikowski    schedule 10.04.2014    source источник
comment
Я сделал такой же опыт. К сожалению, простой перезапуск приложения не решил проблему. Мне просто нужно было отключить и снова включить Bluetooth, чтобы iBeacons работали как раньше. Тогда мне пришлось перезапустить приложение. До сих пор это происходило только на iOS7.1 для меня, не смог найти такое поведение на iOS7.0   -  person Lepidopteron    schedule 10.04.2014


Ответы (2)


Это недавно появившаяся ошибка в CoreLocation. К сожалению, не существует известного автоматизированного способа исправить это. Для решения проблемы требуется цикл включения/выключения питания или последовательность включения/выключения Bluetooth.

См. здесь.

person davidgyoung    schedule 10.04.2014

У меня была аналогичная проблема. Мое приложение будет работать и находить маяки при первом запуске. Когда я перезагрузился, приложение открылось для 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 минуты, чтобы увидеть, обнаружит ли ваше приложение маяки. Надеюсь, это поможет.

person user3337849    schedule 06.05.2014