Странные проблемы с ранжированием области маяка при одновременном мониторинге той же области маяка на iPhone 5S - PullRequest
0 голосов
/ 20 сентября 2019

У нас возникли странные проблемы с ранжированием и мониторингом одного и того же региона маяка в одно и то же время на iPhone 5S.Эти проблемы не возникают на iPhone XR, поэтому мы подозреваем, что это может быть проблема с iOS на iPhone 5S.

iOS: 12.4.1 Устройство: iPhone 5S Xcode: 10.3 Цель развертывания установлена ​​на: 12.4 Код: Цель C

Описание / шаги проблемы:

  • В действительно простом тестовом приложении мы начинаем мониторинг и ранжирование области маяка (с 2 маяками поблизости) (фрагмент кода прилагается ниже)
  • Мы регистрируем маяки, найденныепроцесс ранжирования (в didRangeBeacons)
  • Приложение показывает, что обнаружено 2 маяка
  • Переместите приложение в фоновом режиме, немного подождите и снова выведите его на передний план
  • Приложение покажет только один маяк (другой потерян)

Примечания:

  • Когда наше тестовое приложение обнаруживает только 1 маяк вместо2 маяка, затем любые другие приложения на этом iPhone 5S, которые используют определение дальности, обнаружат только один маяк (поэтому мы подозреваем, что это должно быть проблема с iOS)
  • Если в этой области маяка есть только 1 маяк, тогда я могувоспроизвести этот вопрос отолько если я остановлю и перезапущу маяк в непосредственной близости от iPhone (процесс измерения не увидит его снова).С 2 или более маяками это воспроизводимо, даже если приложение перемещено в фоновый режим и снова выведено на передний план, как отмечено выше.
  • Иногда, если я закрываю экран iPhone и снова открываю его, потерянный маяк будетпоявится на мгновение, но снова исчезнет
  • Если в коде закомментировано 'startMonitoringForRegion', то все работает нормально
  • Вышеуказанные проблемы не воспроизводятся на iPhone XR

Кто-нибудь сталкивался с вышеуказанными проблемами и нашел для них хороший обходной путь?Заранее большое спасибо.


#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController () <CLLocationManagerDelegate>

@property (nonatomic, strong) CLLocationManager *locationManager;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.allowsBackgroundLocationUpdates = YES;
    self.locationManager.pausesLocationUpdatesAutomatically = NO;
    [self.locationManager requestAlwaysAuthorization];

    CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"C336AA38-54BB-483B-AE75-3BA707855035"] identifier:@"test"];

    [self.locationManager startMonitoringForRegion:region];
    [self.locationManager startRangingBeaconsInRegion:region];
}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {

}

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {

}

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {

}

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region {
    NSLog(@"%@",beacons);
}

@end

Подробнее:

Я моделирую 2 маяка, один из iPad (приложение Noteacon)и один из Mac Book Pro (инструмент mbeacon).

Когда я запускаю тестовое приложение, маяки отображаются следующим образом:

(
    "CLBeacon (uuid:C336AA38-54BB-483B-AE75-3BA707855035, major:100, minor:101, proximity:2 +/- 1.29m, rssi:-61)",
    "CLBeacon (uuid:C336AA38-54BB-483B-AE75-3BA707855035, major:100, minor:102, proximity:2 +/- 2.78m, rssi:-63)"
)

Когда я перемещаю приложение в фоновый режим и выводлюобратно на передний план они будут отображаться так, один с rssi = 0 в течение нескольких секунд, и после этого он исчезнет:

(
    "CLBeacon (uuid:C336AA38-54BB-483B-AE75-3BA707855035, major:100, minor:102, proximity:0 +/- -1.00m, rssi:0)",
    "CLBeacon (uuid:C336AA38-54BB-483B-AE75-3BA707855035, major:100, minor:101, proximity:2 +/- 1.43m, rssi:-62)"
)

(
    "CLBeacon (uuid:C336AA38-54BB-483B-AE75-3BA707855035, major:100, minor:101, proximity:2 +/- 1.44m, rssi:-62)"
)

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

Для второй проблемы, когда у меня есть только один маяк, я останавливаю / перезапускаю маяк, и он исчезает из приложения, и я не получаю вызов didExitRegion (я ждал несколькоминут для этого).Когда я закрываю экран телефона и снова открываю его с приложением на переднем плане, обычно маяк снова появляется (но иногда просто появляется снова на несколько секунд и снова исчезает).Когда маяк исчезает из моего приложения, он не будет отображаться ни в одном приложении, которое включает маяки (например, приложение Locate Beacons).Если я удаляю свое приложение или комментирую вызов startMonitoringForRegion, вышеуказанные проблемы не возникают, и все работает нормально.

Интересно то, что на iPhone XR все работает нормально и не может воспроизвести ни одно извышеуказанные проблемы на нем.Только на моем iPhone 5S.

...