2015-09-14 3 views
1

Я пытаюсь реализовать iBeacon в ситуации развития, когда у меня нет реальных маяков для тестирования. Я использую «Beacon Bits», который является эмулятором, работающим на iPad. Я пробовал другие эмуляторы маяка, чтобы исключить возможность того, что эмулятор может быть проблемой. Итак, я использую эмулятор, работающий на iPad, и мое приложение работает на iPhone. Я не использую симулятор XCode, оба являются реальными устройствами.iBeacon не обнаружен с маяковым симулятором

Я добавил необходимые разрешения менеджера местоположений, которые, как представляется, необходимы в iOS8. Я также гарантировал, что они в моем plist.

Я дважды проверил, что bluetooth включен как на эмуляторе, так и на устройстве, на котором работает приложение, которое должно обнаружить эмулятор маякового радиосигнала.

Когда я запустил приложение, ответа нет, и ни один из методов делегирования менеджера местоположений не запускается. Вот код для моего контроллера:

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 

    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){ 
     [self.locationManager requestAlwaysAuthorization]; 
    } 

    if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){ 
     [self.locationManager requestWhenInUseAuthorization]; 
    } 

    uuid = [[NSUUID alloc] initWithUUIDString:UUID_STRING]; 
    self.region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:BEACON_NAME]; 
    [self.locationManager startMonitoringForRegion:self.region]; 


    [_responseLabel setText:@"Waiting..."]; 
} 

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { 
    [self.locationManager startRangingBeaconsInRegion:self.region]; 
    NSString* foundMessage = [NSString stringWithFormat:@"Region Entered for: %@", BEACON_NAME]; 
    [_responseLabel setText:foundMessage]; 
} 

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { 
    [self.locationManager stopRangingBeaconsInRegion:self.region]; 
} 

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { 
    [_responseLabel setText:@"BEACON FOUND"]; 
    CLBeacon* foundBeacon = [beacons firstObject]; 
    NSString* foundMessage = [NSString stringWithFormat:@"Beacon Found: %@", BEACON_NAME]; 
    [_responseLabel setText:foundMessage]; 
} 

Любые предложения по тому, почему это не отвечает? Благодаря!

+0

Поддерживает ли ваш Macbook BLE (низкая энергия Bluetooth)? – ridvankucuk

+1

Вы не можете проверить с помощью симулятора. используйте какое-то устройство. http://stackoverflow.com/questions/22109083/can-i-develop-ibeacon-application-with-the-ios-simulator – ErasmoOliveira

+0

Я не использую симулятор XCode для тестирования. И мой эмулятор маяка, и мое приложение работают на физических устройствах. – Pheepster

ответ

1

Попробуйте образец приложения Apple AirLocate. (Ищите его в документах Xcode.) Я бы предложил установить его на обоих устройствах и посмотреть, работает ли это. Если это так, вы можете затем проверить AirLocate как передатчик на ваше приложение-получатель и выяснить, отправляет ли он или нет, что не работает.

Моя компания также имеет приложение на магазин приложений под названием BeaconTest, что вы можете скачать и попробовать:

http://www.tinyurl.com/beacontest

0

Я не могу видеть всю реализацию, но в любом случае, вы проверили, что UUID связанный с вашим регионом такое же, что и в приложении iPad?

+0

Да, UUID - это то же самое. – Pheepster

+1

На первый взгляд ваш код кажется хорошим, возможно, у вас есть проблемы в приложении для трансляции (на вашем iPad). В этом приложении также нужны авторизации диспетчера местоположений, проверьте «Настройки», если вы разрешили доступ к BLE для этого приложения. Другая проблема может заключаться в том, что приложение не обновляется для iOS 8, я предлагаю загрузить проект AirLocate и запустить его на iPad для трансляции сигнала. Всегда старайтесь соответствовать правильному UUID. – r4id4

1

Возможно, вы захотите реализовать делегата locationManager:monitoringDidFailForRegion:withError: и посмотреть, не выбрасывает ли он что-либо.

Мониторинг регионов маяка считается геозондированием на iOS, поэтому при запуске мониторинга в строке состояния должен быть значок службы полых местоположений. Он также появится рядом со строкой приложения на экране «Настройки - Конфиденциальность - Местоположение». Если этого не происходит, мониторинг начинается неправильно.

Я бы также принял делегата didDetermineState и посмотрел, что он говорит. Я столкнулся с проблемой прежде, чем регион застрял в «неизвестном» состоянии.

Смежные вопросы