Я использую Apple AirLocate демо-приложение для создания iBeacon.iBeacon: настройки идентификатора CLBeaconRegion?
- Идентификатор: com.example.apple-samplecode.AirLocate
- UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
- Кафедра: 0
- Minor: 0
- Измеренная мощность: - 59
Сигнал успешно Поднял детектор маяков Android Приложение.
Однако, когда я использую следующие коды для обнаружения IBeacon в прошивке 8, маяк не показывает вверх:
self.coreLocation = [[CLLocationManager alloc] init];
_coreLocation.delegate = self;
NSString *identifier = [NSString stringWithFormat:@"com.example.apple-samplecode.AirLocate.%@", @"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"];
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifier];
if(region) {
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
[_coreLocation startMonitoringForRegion:region];
}
Независимо от того, какого значения я использую в поле идентификатора, маяк никогда не найден по CLLocationManager
. Его делегаты, didDetermineState:
и didRangeBeacons:
так и не были вызваны. Однако делегат monitoringDidFailForRegion
получил:
Не удалось выполнить операцию. (KCLErrorDomain ошибка 4.)
После посмотрел несколько онлайн документации, код ошибки 4 средства:
Доступ к службе мониторинга области было отказано пользователем.
Но я использую следующие коды, чтобы доказать мое приложение имеет право контролировать регион:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if(status == kCLAuthorizationStatusDenied) {
NSLog(@"didChangeAuthorizationStatus: Denied");
} else if(status == kCLAuthorizationStatusNotDetermined) {
NSLog(@"didChangeAuthorizationStatus: Not Determined");
} else if(status == kCLAuthorizationStatusAuthorizedAlways) {
NSLog(@"didChangeAuthorizationStatus: Authorized Always");
} else if(status == kCLAuthorizationStatusAuthorizedWhenInUse) {
NSLog(@"didChangeAuthorizationStatus: Authorized When In Use");
} else if(status == kCLAuthorizationStatusRestricted) {
NSLog(@"didChangeAuthorizationStatus: Restricted");
} else {
NSLog(@"didChangeAuthorizationStatus: Unknown");
}
}
и возвращает:
didChangeAuthorizationStatus: Авторизованный Когда в использовании
Учитывая, что:
- Я использую iPhone 5s с iOS 8.1.2
- Я добавил
NSLocationWhenInUseUsageDescription
вInfo.plist
- В странице Capabilities, я включил «обновления Адрес» и «использует Bluetooth LE принадлежности» (Xcode добавлены соответствующие записи в
Info.plist
) - Запрошенные «Когда используется» Авторизация через
[self.coreLocation requestWhenInUseAuthorization]
- Allowed «Место службы» и «Push Notification» во время первого запуска приложения
- режим полета выключен
- Bluetooth включен
- Wi-Fi включен, подключен к Интернету
- Настройки> Общие> История App обновления включена
- Настройки> Конфиденциальность> Местоположение Услуги> My App> при использовании (клещ)
[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]]
возвращает YES
Что я пропустил, чтобы вызвать эту ошибку 4? Кроме того, необходимо ли идентификатор соответствовать идентификатору Bundle iBeacon (почему Android может обнаруживать все маяки, но iOS нужно указывать идентификаторы)?
Ссылка: Region Monitoring and iBeacon
Попробуйте добавить [_locationManager startRangingBeaconsInRegion: beaconRegion]; [_locationManager requestStateForRegion: beaconRegion]; И убедитесь, что NSLocationWhenInUseUsageDescription добавлено поврежденно. Ваш код выглядит хорошо – weso