дидрангебиакон позвонил без каких-либо маяков.
Я зарегистрировал свой собственный менеджер местоположения для мониторинга и определения дальности действия нескольких маяков:
[self.locationManager startMonitoringForRegion:region];
[self.locationManager startRangingBeaconsInRegion:region];
В моем понимании, когда один или несколько маяков найдены, этот метод делегата называется:
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
Этот метод делегата действительно вызывается, когда я включил свой маяк, но массив beacons пуст. Есть ли какая-то причина, почему мой маяк не указан в этом массиве?
Вот скриншот, иллюстрирующий эту ситуацию:
Другие вещи, чтобы Примечание:
- я использовал MacBeacon для передачи сигнала моего маяка. Позже я попробую использовать настоящий маяк, но MacBeacon отлично работает для меня в iOS 7.
- я пытался отложить ранжирование, пока не получу
didEnterRegion:
илиdidDetermineState:
вызов, но это все равно приводит к тому же самому. - я запросил разрешение на местоположение у моего менеджера местоположения:
[self.locationManager requestWhenInUseAuthorization];
. - у меня есть очень похожий код, прекрасно работающий в Xcode 5/iOS 7 SDK. Это конкретный Xcode 6 / iOS 8 поведение?
- я добавил ключ
NSLocationWhenInUseUsageDescription
в свой plist.
4 ответа:
Оказывается, это потому, что я не использую уникальный идентификатор при создании
CLBeaconRegion
.Особая благодарностьнайосо за помощь в решении этой проблемы.
Попробуйте использовать приложениеLocate на устройстве iOS 8 и убедитесь, что вы видите Маяк. Убедитесь, что у вас на UUID Маяк настроен на найдите приложения правильно.
Если вы видите его на Locate, то я подозреваю, что проблема заключается в том, что разрешения не предоставляются должным образом для вашего приложения на iOS 8. В этом случае вы, вероятно, должны опубликовать фрагмент кода, показывающий вашу установку, где вы вызываете
[self.locationManager requestWhenInUseAuthorization];
, а также включить раздел вашего файла plist, который должен иметь что-то например:
<key>NSLocationWhenInUseUsageDescription</key> <string>Need to use location services</string>
Вы должны сначала запустить мониторинг маяка также установить notifyEntryStateOnDisplay = YES
self.region1.notifyEntryStateOnDisplay = YES; [theLocManager startMonitoringForRegion: region1]; [theLocManager startRangingBeaconsInRegion: region1];
Этот код отлично работает для меня и в iOS 8.
У меня действительно была эта проблема, когда я создавал свой CLBeaconRegion с мажором и минором в качестве аргументов. Если вы создаете область маяка с основными и второстепенными аргументами и не имеете никаких маяков с этими основными и второстепенными аргументами, список маяков будет пуст. В моем случае я хотел динамически определить мажор / минор. После того, как я инициализировать CLBeaconRegion с идентификатором UUID и все было хорошо.