Подтвердить что ты не робот

Как поддержка iBeacon ДЕЙСТВИТЕЛЬНО изменилась в iOS 7.1?

Я видел утверждения в сети, что недавно выпущенная iOS 7.1 iBeacon поддерживает.

В частности:

  • Система должна по-прежнему уведомлять ваше приложение о didEnterRegion/didExitRegion, даже если пользователь явно убивает ваше приложение. Уведомления
  • didEnterRegion/didExitRegion должен быть быстрее с заднего фона и/или с устройством заперта.

Я не смог подтвердить ни одно из этих требований своим собственным тестированием. Фактически, мне кажется, что меньше может получить уведомления didEnterRegion/didExitRegion с заблокированного устройства. (точнее, мне кажется, что didEnterRegion замечает, но не сделал ExitRegion). Это может быть связано с тем, что Apple заставила меня удалить записи в фоновом режиме BLE в моем info.plist - я не совсем уверен. Я все еще пытаюсь разобраться в этом.

4b9b3361

Ответ 1

У меня возникли проблемы с настройкой моих тестов, но я стал свидетелем обратных вызовов ввода в фоновом регионе после убийства приложения в iOS 7.1 на моделях iPhone 4 и iPhone 5. См. Комментарии ниже для проверки деталей и инструкций по воспроизведению.

Я также провел тесты по времени обнаружения фона на iPhone 4S, и я все еще вижу задержки на 15 минут на iOS 7.1. Ниже приведены мои полные результаты и методология тестирования.

Наконец, я также провел некоторые тесты на флуктуации измерения "точность" (расстояние в метрах) на том же устройстве до и после обновления до iOS 7.1. Я не вижу явной разницы в шуме оценки. На приведенных ниже графиках показаны результаты до и после обновления с iBeacon на расстоянии 0,5 метра в течение 60 секунд, а затем переместились на 3 метра в течение 60 секунд. В обоих случаях передатчик был правильно откалиброванным iPhone 4S w/iOS 7.1, а приемник был iPhone 5S.

iOS 7.0.6

iOS 7.0.6 Расчетное расстояние

iOS 7.1

iOS 7.1 Оценочное расстояние

Ответ 2

Как уже упоминалось в нескольких статьях, распространяющихся по интернету, зондирование маяка доступно даже тогда, когда вы удаляете приложение из многозадачного представления. Однако в моих экспериментах событие ввода/выхода области не вызывает непосредственно didDetermineState: (возможно, потому, что я не использовал AppDelegate для запуска любого маяка, но вместо этого запускал мониторинг на основе событий пользовательского интерфейса). Вместо этого, если вы зарегистрировались для обновлений фонового местоположения, ваш метод AppDelegate didFinishLaunchingWithOptions: будет вызван со значением для ключа UIApplicationLaunchOptionsLocationKey в параметре launchOptions.

Вы можете сделать простую проверку, например, чтобы проверить, действительно ли это обновление местоположения, которое купило ваше приложение в фоновом режиме для выполнения какой-либо задачи.

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey])

Затем вы можете либо зарегистрировать свои контролируемые регионы, либо сразу начать ранжирование.

P.S. CLLocationManager сохраняет ваши ранее проверенныеРегионы при восстановлении приложений, но без повторного запуска повторного использования с использованием того же UUID и идентификатора, вы не получите событие региона ввода/выхода в CLLocationManagerDelegate (которое вернуло вашу резервную копию)

Ответ 3

Дэвид сделал замечательную работу над этим, поэтому я пишу это осторожно... но я вижу в своих тестах что-то совершенно отличное от него.

Я использую два телефона: iPhone 4S с iOS 7.1 (11D167) и iPhone 5S с iOS 7.0.6 (11B651). Мои iBeacons производятся и продаются Bluecats (www.bluecats.com), хотя я еще не использую их SDK (то есть, я просто использую CoreLocation), и я не думаю, что производитель имеет большое значение.

Я получаю время отклика примерно на 1-2 секунды на обоих устройствах, когда приложение работает на переднем плане, а также при работе в фоновом режиме. Единственное отличие заключается в том, что я удаляю приложение из коммутатора приложений: iOS 7.0.6 никогда не отвечает (или, может быть, будет делать через 15 минут), но iOS 7.1 отвечает примерно в одно и то же время. Когда я говорю "отвечаю", я имею в виду, что ядро ​​CLLocationManager locationManager: didDetermineState: forRegion: delegate вызывается iOS.

Я тестирую, фактически блуждая по моему офису с телефонами в руке, поэтому я физически перемещаюсь и выхожу за пределы диапазона. Странно (?), В моем раннем тестировании, где я сидел за своим столом и симулировал перемещение и выход из диапазона, удаляя и повторно вставляя батареи, я видел гораздо медленнее время отклика. Возможно, это часть различия?

Ответ 4

В моем тестировании я видел, что присутствие маяка не замечено приложением в течение 15 минут, но я нашел что-то интересное. Я использую датчики RedBearLabs mini BTLE в качестве ibeacons и их приложения для программирования маяков, http://redbearlab.com/ibeacon/ (http://redbearlab.com/s/MiniBeacon_v1.zip), похоже, что-то в нем, которое сразу же запускает сканирование/обновление маяков. Если я запустил маяк, и в моем приложении это останется незамеченным, отпустив приложение MiniBeacon, приложение немедленно сообщит мне, что есть новые маяки. Это тот же результат при входе или выходе. Их приложение использует CBCentralManager, которого нет у моего приложения, поэтому, может быть, смесь между CBCentralManager и CLBeaconRegion - это путь? Я предполагаю, что CLBeaconRegion запускает/перезапускает bluetooth-радио, поэтому, возможно, это и есть причина этого. Просто принимая удар в него в надежде, что кто-то с более полным пониманием может помочь решить эту проблему.

Спасибо

Ответ 5

Мое тестирование также воспроизводит 15 минут, чтобы начать сканирование, когда мое приложение находится в фоновом режиме на iOS7.1.1. Просто немного любопытно, что я видел довольно много видеороликов из разных компаний, показывающих, что приложение было пробуждено из фонового режима, как только они приближаются к своим маякам. Это трюк продаж?