iBeacon не может быть найден iPhone 4S

Я столкнулся со странной проблемой, связанной с iPhone 4S. Я разрабатываю приложение, которое использует iBeacons. Следующий код — это то, что работает на iPad mini, iPhone 5s и iPhone 4s, но только iPad и 5S могут реагировать, когда они сталкиваются с iBeacon, а 4S ничего не делает.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //start ibeacon monitoring mode
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    [self enableMonitoring];
}

- (void)enableMonitoring
{
    [self initRegion];
    [self locationManager:self.locationManager didStartMonitoringForRegion:self.beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
{
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}

- (void) initRegion
{
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:UUID]
                                                           identifier:@"iBeacon"];
    [self.locationManager startMonitoringForRegion:self.beaconRegion];
    hasAlerted = NO;
}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    ST_UNUSED(manager);
    ST_UNUSED(region);
    NSLog(@"Beacon Found");
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    ST_UNUSED(manager);
    ST_UNUSED(region);
    NSLog(@"Left Region");
    [self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
}

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    ST_UNUSED(manager);
    ST_UNUSED(region);
    CLBeacon *beacon = [beacons lastObject];

    // stuff gets done here

}

4S без проблем может транслировать iBeacons, а остальные 2 могут их найти.

Я провел тесты [CLLocationManager isMonitoringAvailableForClass:[CLBeacon class]] и [CLLocationManager isRangingAvailable] на 4S, и они не дают сбоев.

Может кто просветит, это проблема только нашего 4S, или это проблема 4S вообще?


person Reapo    schedule 02.12.2013    source источник
comment
Да. Все под управлением iOS 7.0.2/3/4   -  person Reapo    schedule 02.12.2013
comment
Когда вы тестируете 4s, какое устройство вы устанавливаете в качестве маяка?   -  person Khaled Barazi    schedule 02.12.2013
comment
любое устройство, iPad или 5S, я могу установить в качестве маяка, и другое устройство его улавливает, а 4S - нет.   -  person Reapo    schedule 02.12.2013
comment
У меня есть iPhone 4S, который я постоянно использую для тестирования iBeacon, так что это не общая проблема. Глупый вопрос, а вы уверены, что Bluetooth включен на 4s?   -  person davidgyoung    schedule 03.12.2013
comment
Еще одна мысль: пробовали ли вы мое бесплатное приложение iBeacon Locate или любое другое эталонное приложение? Вы можете попробовать его, чтобы узнать, может ли он отслеживать iBeacons на 4S. Если это сработает, это устранит проблему с вашим оборудованием. См.: itunes.apple.com/us/app/ibeacon-locate/id738709014< /а>   -  person davidgyoung    schedule 03.12.2013
comment
Привет Реапо, твоя проблема решена? У меня та же проблема в 4S, которая даже с помощью приложения Locate iB не может обнаружить iBeacon, пока я не перезагружу iPhone.   -  person sibley    schedule 02.04.2014
comment
У меня это сработало после перезагрузки iPhone 4S. спасибо сибли   -  person tarake    schedule 26.08.2014


Ответы (4)


Я не думаю, что у вас есть дефектный блок, потому что у меня была точно такая же проблема! Тот же код отлично работал на 5S, но не нашел маяков с использованием 4S. Выходит (похоже), что стек 4S BLE работает немного иначе, чем 5S.

То, как я написал свой код, не начинало ранжирование маяка до тех пор, пока не был вызван «locationManager didDetermineState forRegion», и я определил, что на самом деле нахожусь внутри области маяка. Это прекрасно работает на iPhone 5S, и вы не настраиваете диапазон без веской причины. Но на 4S вы никогда не получите обратный вызов!

Но, если вы начнете ранжировать раньше, поставив:

[locationManager startRangingBeaconsInRegion:beaconRegion];

внутри обратного вызова «locationManager didStartMonitoringForRegion» он работает как чемпион!

person TNBtech    schedule 16.01.2014

у меня тоже такая же проблема с "iPhone4s". такое ощущение, что ни одна из служб маяка не работает, несмотря на то, что включена служба Bluetooth и служба определения местоположения.

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

person Nitesh    schedule 09.04.2014
comment
То же самое... Я бился головой о стену. Перезагрузился, и все заработало отлично ... Это довольно неприемлемо с таким сервисом, который, как я надеюсь, разбудит мое приложение в нужное время. Пользователь никогда не узнает, что он не работает. - person Lucas Goossen; 17.04.2014

У меня была аналогичная проблема, упомянутая в этом вопросе: IBeacon мониторинг регионов не работает согласованно на разных устройствах

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

if ([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusAvailable) {

    NSLog(@"Background updates are available for the app.");
}else if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusDenied)
{
    NSLog(@"The user explicitly disabled background behavior for this app or for the whole system.");
}else if([[UIApplication sharedApplication] backgroundRefreshStatus] == UIBackgroundRefreshStatusRestricted)
{
    NSLog(@"Background updates are unavailable and the user cannot enable them again. For example, this status can occur when parental controls are in effect for the current user.");
}

Найдено в этом ответе: Обнаружение пользовательских настроек для обновления фонового приложения в iOS 7

person TimPelgrim    schedule 30.01.2014

Похоже у тебя бракованная 4s. Чтобы быть уверенным, я бы посоветовал загрузить демо-версию AirLocate от Apple (с WWDC 2013 года) и запустить ее на всех своих устройствах. Он будет служить как маяком, так и «центральным» (если использовать термины BLE), также известным как приемник маяка.

У меня есть 2 iPhone 4, и они определенно работают как передатчики и приемники маяка, как и наш iPod touch 5-го поколения (4-дюймовая модель). К сожалению, мой iPad 2 этого не делает. Mini и iPad 3 — первые iPad с поддержкой BLE.

person Duncan C    schedule 03.12.2013