2016-03-23 14 views
2

Боюсь, я знаю ответ на этот вопрос.Лимит менеджера местоположения в 20 регионах означает 20 общих зон геозонности и маяка?

Администратор местоположения Apple в отношении методов startMonitoringForRegion говорит, что вы можете контролировать максимум 20 регионов за раз.

У меня есть клиентское приложение, которое активно использует как области геозонности, так и области маяков.

Я предположил, что для областей геозонности и зон маяка существуют отдельные 20 региональных границ, но я боюсь, что предел на самом деле составляет 20 регионов для обоих типов.

Может ли кто-нибудь подтвердить мои опасения на основе фактического опыта?

ответ

3

Да, ограничение по 20 регионам - это максимальное, что CoreLocation позволяет вам отслеживать как для CLBeaconRegion s, так и для CLCircularRegion s (geofences). Когда iOS 7 добавила поддержку маяка, области маяков унаследовали это же ограничение для геообъектов из-за того, как были определены интерфейсы API. И, как вы подозревали, предел применяется к любому типу региона, который вы хотите контролировать. Таким образом, вы можете контролировать 10 CLBeaconRegion с и 10 CLCircularRegion с, но не более 20 в сочетании каждого типа.

+0

Вздох. Я боялся этого. Вы знаете, почему Apple налагает ограничение на 20 регионов? –

+0

Я не знаю, почему яблоко выбрало ровно 20 как предел, но какой-то предел кажется разумным. Чем больше геофотоснимков имеет приложение, тем больше работы ОС приходится делать каждый раз при изменении местоположения, чтобы узнать, сработает ли одна из них. Разница между 20 и 40 может быть небольшой, но представьте себе приложение, в котором было 1000! Для маяков имеется ограниченное количество слотов, доступных на чипе bluetooth для аппаратной фильтрации для быстрого обнаружения маяка. Есть доказательства того, что на некоторых устройствах iOS существует системный предел в 30 слотов, что означает, что два приложения будут больше, чем использовать все эти слоты с 20 регионами маяка. – davidgyoung

+0

@davidgyoung Этот аппаратный предел 30 применяется только для детектируемых маяков одновременно. Представьте, что вы находитесь в магазине и имеете 30 маяков в ближайшей близости - это примерно этот предел. Это жесткий (товарный) предел. И на самом деле нет мягкого (товарного) предела. Подумайте об этом - _every_ Beacon сначала распознается, а _then_ найденный идентификатор проверяется на зарегистрированные маяки на устройстве. Таким образом, на стороне устройства есть только индексированный список зарегистрированных идентификаторов Beacon, которые необходимо искать через. То же самое относится к Geofences. – Darko

1

Предел составляет 20 для каждого типа CLRegion. Это означает, что вы можете контролировать 20 CLCircularRegion и 20 CLBeaconRegion.

Это не задокументировано, но я провел несколько испытаний и добавил более 20 CLBeaconRegion и более 20 CLCircularRegion. Результаты заключались в том, что self.locationManager.monitoredRegions.count был 40, имеющим 20 monitoredRegions типа CLCircularRegion, а другой 20 типа CLBeaconRegion.

После того, как вы достигнете предела для каждого типа CLRegion и вы пытаетесь контролировать новые регионы (этого типа), они игнорируются и locationManager:monitoringDidFailForRegion:withError: вызывается с кодом kCLErrorRegionMonitoringFailure ошибки.

+0

. Ваш ответ не соответствует моему опыту.После публикации этого вопроса я попробовал и нашел, что сообщил Дэвид Янг, - что ваше приложение может отслеживать максимум 20 регионов, а не 20 каждого типа. Если вы попытаетесь добавить более 20, некоторые из них проигнорируются. –

+0

@ DuncanC Я тестировал это на iOS 9, и это было результатом. Убедитесь, что вы тестируете устройство, так как симулятор не поддерживает мониторинг. CLBeaconRegion. – Maikol

+0

. Вы не получите сообщение об ошибке при попытке контролировать более 20 комбинированных областей, но регионы, превышающие 20, игнорируются. В отличие от этого вы получите ошибку, если попытаетесь добавить более 20 регионов одного типа. –